]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Add nubits
[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 }
920eb591
IC
110 .version {
111 position: absolute;
112 top: 5px;
113 right: 5px;
114 }
ab78acc6
IC
115 </style>
116 </head>
117 <body>
118 <div class="container">
3af2954a 119
ab78acc6 120 <h1 class="text-center">Mnemonic Code Converter</h1>
1102f201 121 <p class="version">v0.2.7</p>
ab78acc6
IC
122 <hr>
123 <div class="row">
124 <div class="col-md-12">
125 <h2>Mnemonic</h2>
126 <form class="form-horizontal" role="form">
ab78acc6 127 <div class="form-group">
c6624d51
IC
128 <div class="col-sm-2"></div>
129 <div class="col-sm-10">
1102f201
IC
130 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
131 <p>
ea87f1d3
IC
132 For more info see the
133 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
134 </p>
c6624d51
IC
135 </div>
136 </div>
137 <div class="form-group generate-container">
b0818b31 138 <label class="col-sm-2 control-label"></label>
ab78acc6 139 <div class="col-sm-10">
b0818b31
IC
140 <div class="form-inline">
141 <div class="input-group-inline">
1102f201 142 <span>Generate a random mnemonic, or enter your own below</span>:
b0818b31 143 <button class="btn generate">Generate</button>
b0818b31
IC
144 <select id="strength" class="strength form-control">
145 <option value="3">3</option>
146 <option value="6">6</option>
147 <option value="9">9</option>
148 <option value="12">12</option>
149 <option value="15" selected>15</option>
150 <option value="18">18</option>
151 <option value="21">21</option>
152 <option value="24">24</option>
153 </select>
1102f201 154 <span>words</span>
b0818b31
IC
155 </div>
156 </div>
ab78acc6 157 </div>
0515eeec 158 </div>
c6624d51 159 <div class="entropy-container hidden">
2a6dd137 160 <div class="form-group text-danger">
1102f201 161 <label class="col-sm-2 control-label">Warning</label>
2a6dd137 162 <div class="col-sm-10 form-control-static">
1102f201
IC
163 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
164 <a href="#entropy-notes">Read more</a>
18abe53b
IC
165 </div>
166 </div>
2a6dd137 167 <div class="form-group">
1102f201 168 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
2a6dd137 169 <div class="col-sm-7">
1102f201 170 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
9ff30bab
IC
171 <div class="row filter-warning text-danger hidden">
172 <p class="col-sm-12">
173 <strong>
174 Some characters have been discarded
175 </strong>
176 </p>
177 </div>
95f04905 178 <div class="row">
1102f201 179 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
f1e5d484 180 <div class="crack-time col-sm-3 form-control-static"></div>
1102f201 181 <label class="col-sm-3 control-label">Event Count</label>
95f04905
IC
182 <div class="event-count col-sm-3 form-control-static"></div>
183 </div>
184 <div class="row">
1102f201 185 <label class="col-sm-3 control-label">Entropy Type</label>
95f04905 186 <div class="type col-sm-3 form-control-static"></div>
1102f201 187 <label class="col-sm-3 control-label">Bits Per Event</label>
95f04905
IC
188 <div class="bits-per-event col-sm-3 form-control-static"></div>
189 </div>
190 <div class="row">
1102f201 191 <label class="col-sm-3 control-label">Raw Entropy Words</label>
95f04905 192 <div class="word-count col-sm-3 form-control-static"></div>
1102f201 193 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
194 <div class="bits col-sm-3 form-control-static"></div>
195 </div>
1102f201 196 <label class="col-sm-3 control-label">Filtered Entropy</label>
2a6dd137 197 <div class="filtered col-sm-9 form-control-static"></div>
1102f201 198 <label class="col-sm-3 control-label">Raw Binary</label>
2a6dd137 199 <div class="binary col-sm-9 form-control-static"></div>
1102f201 200 <label class="col-sm-3 control-label">Mnemonic Length</label>
2a6dd137 201 <div class="col-sm-9">
18abe53b 202 <select class="mnemonic-length form-control">
1102f201
IC
203 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
204 <option value="12">12 <span>Words</span></option>
205 <option value="15">15 <span>Words</option>
206 <option value="18">18 <span>Words</span></option>
207 <option value="21">21 <span>Words</span></option>
208 <option value="24">24 <span>Words</span></option>
18abe53b 209 </select>
c6624d51 210 </div>
18abe53b 211 </div>
2a6dd137 212 <div class="col-sm-3">
1102f201 213 <p>Valid entropy values include:</p>
2a6dd137 214 <ul>
1102f201
IC
215 <li><strong>Binary</strong> [0-1]<br>101010011</li>
216 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
217 <li><strong>Dice</strong> [1-6]<br>62535634</li>
218 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
219 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
220 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
221 </ul>
222 </div>
c6624d51
IC
223 </div>
224 </div>
225 <div class="form-group">
226 <div class="col-sm-2"></div>
227 <div class="col-sm-10 checkbox">
228 <label>
229 <input type="checkbox" class="use-entropy">
1102f201 230 <span>Supply my own source of entropy</span>
c6624d51
IC
231 </label>
232 </div>
233 </div>
234 <div class="form-group">
1102f201 235 <label class="col-sm-2 control-label">Mnemonic Language</label>
0515eeec 236 <div class="col-sm-10 languages">
ea87f1d3
IC
237 <div class="form-control no-border">
238 <a href="#english">English</a>
239 <a href="#japanese" title="Japanese">日本語</a>
240 <a href="#spanish" title="Spanish">Español</a>
241 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
242 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
243 <a href="#french" title="French">Français</a>
244 <a href="#italian" title="Italian">Italiano</a>
245 </div>
0515eeec 246 </div>
ab78acc6
IC
247 </div>
248 <div class="form-group">
1102f201 249 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 250 <div class="col-sm-10">
e00964cc 251 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
252 </div>
253 </div>
254 <div class="form-group">
1102f201 255 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
ab78acc6
IC
256 <div class="col-sm-10">
257 <textarea id="passphrase" class="passphrase form-control"></textarea>
258 </div>
259 </div>
73161a92 260 <div class="form-group">
1102f201 261 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
73161a92 262 <div class="col-sm-10">
e00964cc 263 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
264 </div>
265 </div>
ab78acc6 266 <div class="form-group">
1102f201 267 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
ab78acc6
IC
268 <div class="col-sm-10">
269 <select id="network-phrase" class="network form-control">
270 <!-- populated by javascript -->
271 </select>
272 </div>
273 </div>
274 <div class="form-group">
1102f201 275 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
ab78acc6 276 <div class="col-sm-10">
e00964cc 277 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
278 </div>
279 </div>
8d18f379 280 <div class="form-group litecoin-ltub-container hidden">
1102f201 281 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
8d18f379
IC
282 <div class="col-sm-10 checkbox">
283 <label>
284 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub">
285 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
286 </label>
287 </div>
288 </div>
ab78acc6
IC
289 </form>
290 </div>
291 </div>
3af2954a 292
ab78acc6 293 <hr>
3af2954a 294
ab78acc6
IC
295 <div class="row">
296 <div class="col-md-12">
297 <h2>Derivation Path</h2>
298 <ul class="derivation-type nav nav-tabs" role="tablist">
9987f0c1
IC
299 <li id="bip32-tab">
300 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
301 </li>
d5dc92fd 302 <li id="bip44-tab" class="active">
ab78acc6
IC
303 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
304 </li>
9987f0c1
IC
305 <li id="bip49-tab">
306 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
ab78acc6
IC
307 </li>
308 </ul>
309 <div class="derivation-type tab-content">
d5dc92fd 310 <div id="bip44" class="tab-pane active">
ab78acc6
IC
311 <form class="form-horizontal" role="form">
312 <br>
313 <div class="col-sm-2"></div>
314 <div class="col-sm-10">
1102f201 315 <p>
ea87f1d3
IC
316 For more info see the
317 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
318 </p>
ab78acc6
IC
319 </div>
320 <div class="form-group">
321 <label for="purpose" class="col-sm-2 control-label">
1102f201 322 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
ab78acc6
IC
323 </label>
324 <div class="col-sm-10">
9987f0c1 325 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
ab78acc6
IC
326 </div>
327 </div>
328 <div class="form-group">
329 <label for="coin" class="col-sm-2 control-label">
1102f201 330 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
ab78acc6
IC
331 </label>
332 <div class="col-sm-10">
9987f0c1 333 <input id="coin" type="text" class="coin form-control" value="0" readonly>
ab78acc6
IC
334 </div>
335 </div>
336 <div class="form-group">
337 <label for="account" class="col-sm-2 control-label">
1102f201 338 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
ab78acc6
IC
339 </label>
340 <div class="col-sm-10">
341 <input id="account" type="text" class="account form-control" value="0">
342 </div>
343 </div>
344 <div class="form-group">
345 <label for="change" class="col-sm-2 control-label">
1102f201 346 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
ab78acc6
IC
347 </label>
348 <div class="col-sm-10">
349 <input id="change" type="text" class="change form-control" value="0">
350 </div>
351 </div>
20083ab9
IC
352 <div class="form-group">
353 <label class="col-sm-2 control-label">
354 </label>
355 <div class="col-sm-10">
1102f201 356 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
357 </div>
358 </div>
359 <div class="form-group">
360 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 361 <span>Account Extended Private Key</span>
20083ab9
IC
362 </label>
363 <div class="col-sm-10">
364 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
365 </div>
366 </div>
367 <div class="form-group">
368 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 369 <span>Account Extended Public Key</span>
20083ab9
IC
370 </label>
371 <div class="col-sm-10">
372 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
373 </div>
374 </div>
375 <div class="form-group">
376 <label class="col-sm-2 control-label">
377 </label>
378 <div class="col-sm-10">
1102f201 379 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
20083ab9
IC
380 </div>
381 </div>
ab78acc6 382 <div class="form-group">
1102f201 383 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
384 <div class="col-sm-10">
385 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
386 </div>
387 </div>
388 </form>
389 </div>
390 <div id="bip32" class="tab-pane">
391 <form class="form-horizontal" role="form">
392 <br>
393 <div class="col-sm-2"></div>
394 <div class="col-sm-10">
1102f201 395 <p>
ea87f1d3
IC
396 For more info see the
397 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
398 </p>
ab78acc6 399 </div>
56530adc 400 <div class="form-group">
1102f201 401 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
56530adc
IC
402 <div class="col-sm-10">
403 <select id="bip32-client" class="client form-control">
404 <option value="custom">Custom derivation path</option>
405 <!-- populated by javascript -->
406 </select>
407 </div>
408 </div>
ab78acc6 409 <div class="form-group">
1102f201 410 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
411 <div class="col-sm-10">
412 <input id="bip32-path" type="text" class="path form-control" value="m/0">
413 </div>
414 </div>
1975bfbc
IC
415 <div class="form-group">
416 <div class="col-sm-2"></div>
417 <label class="col-sm-10">
418 <input class="hardened-addresses" type="checkbox">
1102f201 419 <span>Use hardened addresses</span>
1975bfbc
IC
420 </label>
421 </div>
0a8d06d0
IC
422 <div class="form-group">
423 <div class="col-sm-2"></div>
424 <label class="col-sm-10">
425 <input class="p2wpkh-nested-in-p2sh" type="checkbox">
1102f201 426 <span>Use SegWit addresses (ie P2WPKH Nested In P2SH)</span>
0a8d06d0
IC
427 </label>
428 </div>
1975bfbc 429 <div class="form-group">
1102f201 430 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
1975bfbc 431 <div class="col-sm-10">
1102f201 432 <p class="form-control no-border">
1975bfbc 433 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 434 </p>
1102f201 435 <p class="form-control no-border">
ea87f1d3
IC
436 For more info see the
437 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
438 </p>
439 </div>
440 </div>
56530adc 441 <div class="form-group">
1102f201 442 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
56530adc
IC
443 <div class="col-sm-10">
444 <p class="form-control no-border">
1102f201 445 <span>Use path <code>m/0'/0</code>.</span>
56530adc
IC
446 </p>
447 <p class="form-control no-border">
1102f201 448 <span>For more info see</span>
56530adc
IC
449 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
450 </p>
451 </div>
452 </div>
aa51da11 453 <div class="form-group">
1102f201 454 <label class="col-sm-2 control-label">Block Explorers</label>
aa51da11
IC
455 <div class="col-sm-10">
456 <p class="form-control no-border">
1102f201
IC
457 <span>Use path <code>m/44'/0'/0'</code>.</span>
458 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
459 </p>
460 <p class="form-control no-border">
1102f201 461 <span>Can be used with</span>:
ea87f1d3 462 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
463 </p>
464 </div>
465 </div>
ab78acc6
IC
466 </form>
467 </div>
9987f0c1
IC
468 <div id="bip49" class="tab-pane">
469 <form class="form-horizontal" role="form">
470 <br>
471 <div class="unavailable hidden">
472 <div class="form-group">
473 <div class="col-sm-2"></div>
474 <div class="col-sm-10">
1102f201 475 <p>BIP49 is unavailable for this coin.</p>
9987f0c1
IC
476 </div>
477 </div>
478 </div>
479 <div class="available">
480 <div class="col-sm-2"></div>
481 <div class="col-sm-10">
1102f201 482 <p>
9987f0c1
IC
483 For more info see the
484 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
485 </p>
486 </div>
487 <div class="form-group">
488 <label for="purpose" class="col-sm-2 control-label">
1102f201 489 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
9987f0c1
IC
490 </label>
491 <div class="col-sm-10">
492 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
493 </div>
494 </div>
495 <div class="form-group">
496 <label for="coin" class="col-sm-2 control-label">
1102f201 497 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
9987f0c1
IC
498 </label>
499 <div class="col-sm-10">
500 <input id="coin" type="text" class="coin form-control" value="0" readonly>
501 </div>
502 </div>
503 <div class="form-group">
504 <label for="account" class="col-sm-2 control-label">
1102f201 505 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
9987f0c1
IC
506 </label>
507 <div class="col-sm-10">
508 <input id="account" type="text" class="account form-control" value="0">
509 </div>
510 </div>
511 <div class="form-group">
512 <label for="change" class="col-sm-2 control-label">
1102f201 513 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
9987f0c1
IC
514 </label>
515 <div class="col-sm-10">
516 <input id="change" type="text" class="change form-control" value="0">
517 </div>
518 </div>
519 <div class="form-group">
520 <label class="col-sm-2 control-label">
521 </label>
522 <div class="col-sm-10">
1102f201 523 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
9987f0c1
IC
524 </div>
525 </div>
526 <div class="form-group">
527 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 528 <span>Account Extended Private Key</span>
9987f0c1
IC
529 </label>
530 <div class="col-sm-10">
531 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
532 </div>
533 </div>
534 <div class="form-group">
535 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 536 <span>Account Extended Public Key</span>
9987f0c1
IC
537 </label>
538 <div class="col-sm-10">
539 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
540 </div>
541 </div>
542 <div class="form-group">
543 <label class="col-sm-2 control-label">
544 </label>
545 <div class="col-sm-10">
1102f201 546 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
9987f0c1
IC
547 </div>
548 </div>
549 <div class="form-group">
1102f201 550 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
9987f0c1
IC
551 <div class="col-sm-10">
552 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
553 </div>
554 </div>
555 </div>
556 </form>
557 </div>
ab78acc6
IC
558 </div>
559 <form class="form-horizontal" role="form">
560 <div class="form-group">
1102f201 561 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
ab78acc6 562 <div class="col-sm-10">
e00964cc 563 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
564 </div>
565 </div>
566 <div class="form-group">
1102f201 567 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
ab78acc6 568 <div class="col-sm-10">
e00964cc 569 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
570 </div>
571 </div>
572 </form>
573 </div>
574 </div>
3af2954a 575
ab78acc6 576 <hr>
3af2954a 577
ab78acc6
IC
578 <div class="row">
579 <div class="col-md-12">
580 <h2>Derived Addresses</h2>
1102f201 581 <p>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
582 <table class="table table-striped">
583 <thead>
584 <th>
585 <div class="input-group">
1102f201
IC
586 <span>Path</span>&nbsp;&nbsp;
587 <button class="index-toggle">Toggle</button>
ab78acc6
IC
588 </div>
589 </th>
590 <th>
591 <div class="input-group">
1102f201
IC
592 <span>Address</span>&nbsp;&nbsp;
593 <button class="address-toggle">Toggle</button>
ab78acc6
IC
594 </div>
595 </th>
1b12b2f5
IC
596 <th>
597 <div class="input-group">
1102f201
IC
598 <span>Public Key</span>&nbsp;&nbsp;
599 <button class="public-key-toggle">Toggle</button>
1b12b2f5
IC
600 </div>
601 </th>
ab78acc6
IC
602 <th>
603 <div class="input-group">
1102f201
IC
604 <span>Private Key</span>&nbsp;&nbsp;
605 <button class="private-key-toggle">Toggle</button>
ab78acc6
IC
606 </div>
607 </th>
608 </thead>
d737abf6 609 <tbody class="addresses monospace">
c866242d
IC
610 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
611 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
612 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
613 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
614 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
615 </tbody>
616 </table>
617 </div>
618 </div>
1102f201 619 <span>Show more rows</span>:
ab78acc6 620 <input type="number" class="rows-to-add" value="20">
1102f201 621 <button class="more">Show</button>
3af2954a 622
ab78acc6 623 <hr>
3af2954a 624
ab78acc6
IC
625 <div class="row">
626 <div class="col-md-12">
1102f201
IC
627 <h2>More info</h2>
628 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
629 <p>
ab78acc6
IC
630 Read more at the
631 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
632 </p>
1102f201
IC
633 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
634 <p>
ab78acc6
IC
635 Read more at the
636 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3 637 </p>
1102f201 638 <p>
ea87f1d3 639 See the demo at
ab78acc6
IC
640 <a href="http://bip32.org/" target="_blank">bip32.org</a>
641 </p>
1102f201
IC
642 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
643 <p>
ab78acc6
IC
644 Read more at the
645 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
646 </p>
1102f201
IC
647 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
648 <p>
861750ae
JC
649 Read more at the
650 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
651 </p>
1102f201 652 <h3>Private Keys</h3>
ab78acc6 653 <p>
1102f201 654 <span>
ea87f1d3
IC
655 Use private keys at
656 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
657 </span>
1102f201 658 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 659 </p>
1102f201 660 <h3 id="entropy-notes">Entropy</h3>
c6624d51 661 <p>
1102f201 662 <span>
ea87f1d3
IC
663 Entropy values must be sourced from a
664 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
665 </span>
1102f201
IC
666 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
667 <span>
ea87f1d3
IC
668 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
669 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
670 random enough for the needs of this tool.
671 </span>
c6624d51 672 </p>
434caecd 673 <p>
1102f201 674 <strong><span>Do not store entropy.</span></strong>
434caecd
IC
675 </p>
676 <p>
1102f201
IC
677 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
678 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
679 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
434caecd 680 </p>
c6624d51 681 <p>
1102f201 682 <span>
ea87f1d3
IC
683 The random mnemonic generator on this page uses a
684 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
685 </span>
1102f201
IC
686 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
687 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
688 <span>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
689 </p>
690 <p>
1102f201 691 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
c6624d51 692 </p>
1102f201 693 <h3>License</h3>
52da415f 694 <p>
1102f201 695 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
52da415f
IC
696 </span>
697 </p>
1102f201
IC
698 <p>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
699 </div>
700 </div>
701
702 <hr>
703
704 <div class="row">
705 <div class="col-md-12">
706 <h2>Alternative Tools</h2>
707 <p>This tool is interoperable with any BIP39 wallet.</p>
708 <p>Some similar tools to this one (ie not consumer wallets) are</p>
709 <p>
710 <a href="https://bip32jp.github.io/english/">
711 https://bip32jp.github.io/english/
712 </a>
713 </p>
ab78acc6
IC
714 </div>
715 </div>
3af2954a 716
ab78acc6 717 <hr>
3af2954a 718
ab78acc6
IC
719 <div class="row">
720 <div class="col-md-12">
3af2954a 721
1102f201 722 <h2>Offline Usage</h2>
3af2954a 723
1102f201 724 <p>
ab78acc6
IC
725 You can use this tool without having to be online.
726 </p>
1102f201 727 <p>
ab78acc6
IC
728 In your browser, select file save-as, and save this page
729 as a file.
730 </p>
1102f201 731 <p>
ab78acc6
IC
732 Double-click that file to open it in a browser
733 on any offline computer.
734 </p>
735 <p>
1102f201 736 <span>Alternatively, download the file from the repository</span>
ea87f1d3
IC
737 -
738 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
739 </p>
3af2954a 740
ab78acc6
IC
741 </div>
742 </div>
3af2954a 743
ab78acc6 744 <hr>
3af2954a 745
ab78acc6
IC
746 <div class="row">
747 <div class="col-md-12">
3af2954a 748
1102f201 749 <h2>This project is 100% open-source code</h2>
3af2954a 750
ab78acc6 751 <p>
1102f201 752 <span>Get the source code from the repository</span>
ea87f1d3 753 -
b630f83d
IC
754 <a href="https://github.com/iancoleman/bip39" target="_blank">
755 https://github.com/iancoleman/bip39
ab78acc6
IC
756 </a>
757 </p>
3af2954a 758
1102f201 759 <h3>Libraries</h3>
3af2954a 760
ab78acc6
IC
761 <p>
762 <span>BitcoinJS - </span>
763 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
764 https://github.com/bitcoinjs/bitcoinjs-lib
765 </a>
766 </p>
3af2954a 767
ab78acc6
IC
768 <p>
769 <span>jsBIP39 - </span>
770 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
771 https://github.com/iancoleman/jsbip39
772 </a>
773 </p>
3af2954a 774
ab78acc6
IC
775 <p>
776 <span>sjcl - </span>
777 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
778 https://github.com/bitwiseshiftleft/sjcl
779 </a>
780 </p>
3af2954a 781
ab78acc6
IC
782 <p>
783 <span>jQuery - </span>
784 <a href="https://jquery.com/" target="_blank">
785 https://jquery.com/
786 </a>
787 </p>
3af2954a 788
ab78acc6
IC
789 <p>
790 <span>Twitter Bootstrap - </span>
791 <a href="http://getbootstrap.com/" target="_blank">
792 http://getbootstrap.com/
793 </a>
794 </p>
3af2954a 795
ab78acc6
IC
796 </div>
797 </div>
3af2954a 798
ab78acc6 799 </div>
3af2954a 800
e00964cc 801 <div class="qr-container hidden">
1102f201
IC
802 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
803 <div class="qr-hint bg-primary">Click field to show QR</div>
52da415f
IC
804 <div class="qr-hider hidden">
805 <div class="qr-image"></div>
1102f201 806 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
52da415f 807 </div>
e00964cc
IC
808 </div>
809
ab78acc6
IC
810 <div class="feedback-container">
811 <div class="feedback">Loading...</div>
812 </div>
3af2954a 813
ab78acc6
IC
814 <script type="text/template" id="address-row-template">
815 <tr>
816 <td class="index"><span></span></td>
e00964cc
IC
817 <td class="address"><span data-show-qr></span></td>
818 <td class="pubkey"><span data-show-qr></span></td>
819 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
820 </tr>
821 </script>
8b095871
IC
822 <script>// From
823// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
824// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
825// but is not required in any modern browsers.
826// For more information, see
827// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
828
829//----------------------------------------------------------------------
830//
831// ECMAScript 2015 Polyfills
832//
833//----------------------------------------------------------------------
563e401a 834
8b095871
IC
835(function (global) {
836 "use strict";
837
838 // Set this to always override native implementations, for testing
839 // the polyfill in browsers with partial/full ES2015 support.
840 var OVERRIDE_NATIVE_FOR_TESTING = false;
841
842 var undefined = (void 0); // Paranoia
843
844 // Helpers
845
846 function strict(o) {
847 return o === global ? undefined : o;
848 }
849
850 function hook(o, p, f) {
851 var op = o[p];
852 console.assert(typeof op === 'function', 'Hooking a non-function');
853 o[p] = function() {
854 var o = strict(this);
855 var r = f.apply(o, arguments);
856 return r !== undefined ? r : op.apply(o, arguments);
857 };
858 }
859
860 function isSymbol(s) {
861 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
862 }
863
864 function getPropertyDescriptor(target, name) {
865 var desc = Object.getOwnPropertyDescriptor(target, name);
866 var proto = Object.getPrototypeOf(target);
867 while (!desc && proto) {
868 desc = Object.getOwnPropertyDescriptor(proto, name);
869 proto = Object.getPrototypeOf(proto);
563e401a 870 }
8b095871
IC
871 return desc;
872 }
563e401a 873
8b095871
IC
874 var enqueue = (function(nativePromise, nativeSetImmediate) {
875 if (nativePromise)
876 return function(job) { nativePromise.resolve().then(function() { job(); }); };
877 if (nativeSetImmediate)
878 return function(job) { nativeSetImmediate(job); };
879 return function(job) { setTimeout(job, 0); };
880 }(global['Promise'], global['setImmediate']));
563e401a 881
8b095871
IC
882 function define(o, p, v, override) {
883 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
884 return;
885
886 if (typeof v === 'function') {
887 // Sanity check that functions are appropriately named (where possible)
888 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
889 Object.defineProperty(o, p, {
890 value: v,
891 configurable: true,
892 enumerable: false,
893 writable: true
894 });
563e401a 895 } else {
8b095871
IC
896 Object.defineProperty(o, p, {
897 value: v,
898 configurable: false,
899 enumerable: false,
900 writable: false
901 });
563e401a 902 }
8b095871 903 }
563e401a 904
8b095871
IC
905 function set_internal(o, p, v) {
906 Object.defineProperty(o, p, {
907 value: v,
908 configurable: false,
909 enumerable: false,
910 writable: true
911 });
912 }
563e401a 913
8b095871
IC
914 // Snapshot intrinsic functions
915 var $isNaN = global.isNaN,
916 $parseInt = global.parseInt,
917 $parseFloat = global.parseFloat;
918
919 var E = Math.E,
920 LOG10E = Math.LOG10E,
921 LOG2E = Math.LOG2E,
922 abs = Math.abs,
923 ceil = Math.ceil,
924 exp = Math.exp,
925 floor = Math.floor,
926 log = Math.log,
927 max = Math.max,
928 min = Math.min,
929 pow = Math.pow,
930 random = Math.random,
931 sqrt = Math.sqrt;
932
933 var orig_match = String.prototype.match,
934 orig_replace = String.prototype.replace,
935 orig_search = String.prototype.search,
936 orig_split = String.prototype.split;
937
938 // These are used for implementing the polyfills, but not exported.
939
940 // Inspired by https://gist.github.com/1638059
941 /** @constructor */
942 function EphemeronTable() {
943 var secretKey = ObjectCreate(null);
944
945 function conceal(o) {
946 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
947 Object.defineProperty(o, 'valueOf', {
948 value: (function(secretKey) {
949 return function (k) {
950 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
951 };
952 }(secretKey)),
953 configurable: true,
954 writeable: true,
955 enumerable: false
956 });
957 return secrets;
958 }
563e401a 959
8b095871
IC
960 function reveal(o) {
961 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
962 return v === o ? null : v;
963 }
964
965 return {
966 clear: function() {
967 secretKey = ObjectCreate(null);
968 },
969 remove: function(key) {
970 var secrets = reveal(key);
971 if (secrets && HasOwnProperty(secrets, 'value')) {
972 delete secrets.value;
973 return true;
974 }
975 return false;
976 },
977 get: function(key, defaultValue) {
978 var secrets = reveal(key);
979 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
980 },
981 has: function(key) {
982 var secrets = reveal(key);
983 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
984 },
985 set: function(key, value) {
986 var secrets = reveal(key) || conceal(key);
987 secrets.value = value;
563e401a 988 }
8b095871
IC
989 };
990 }
563e401a 991
8b095871 992 var empty = Object.create(null);
563e401a 993
8b095871
IC
994 //----------------------------------------------------------------------
995 //
996 // ECMAScript 2015
997 // http://www.ecma-international.org/ecma-262/6.0/
998 //
999 //----------------------------------------------------------------------
563e401a 1000
8b095871
IC
1001 // ---------------------------------------
1002 // 19.4 Symbol Objects
1003 // ---------------------------------------
563e401a 1004
8b095871
IC
1005 // NOTE: Symbols are defined here - out of spec order - since we need the
1006 // properties and prototype to be populated for other polyfills.
563e401a 1007
8b095871 1008 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 1009
8b095871
IC
1010 var symbolForKey;
1011 (function() {
1012 var secret = Object.create(null);
1013 var symbolMap = {};
1014 symbolForKey = function(k) {
1015 return symbolMap[k];
1016 };
563e401a 1017
8b095871 1018 var GlobalSymbolRegistry = [];
563e401a 1019
8b095871
IC
1020 function unique(bits) {
1021 return Array(bits + 1).join('x').replace(/x/g, function() {
1022 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
1023 });
1024 }
563e401a 1025
8b095871
IC
1026 // 19.4.1 The Symbol Constructor
1027 // 19.4.1.1 Symbol ( description=undefined )
1028 function Symbol(description) {
1029 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1030 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 1031
8b095871
IC
1032 var descString = description === undefined ? undefined : String(description);
1033
1034 set_internal(this, '[[SymbolData]]', unique(128));
1035 set_internal(this, '[[Description]]', descString);
1036
1037 symbolMap[this] = this;
1038 return this;
1039 }
1040
1041 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1042 global.Symbol = Symbol;
1043
1044 // 19.4.2 Properties of the Symbol Constructor
1045
1046 // 19.4.2.1 Symbol.for (key)
1047 define(Symbol, 'for', function for_(key) {
1048 var stringKey = String(key);
1049 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1050 var e = GlobalSymbolRegistry[i];
1051 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 1052 }
8b095871
IC
1053 var newSymbol = Symbol(key);
1054 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1055 return newSymbol;
1056 });
563e401a 1057
8b095871
IC
1058 // 19.4.2.2 Symbol.hasInstance
1059 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 1060
8b095871
IC
1061 // 19.4.2.4 Symbol.iterator
1062 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 1063
8b095871
IC
1064 // 19.4.2.5 Symbol.keyFor (sym)
1065 define(Symbol, 'keyFor', function keyFor(sym) {
1066 if (!(sym instanceof Symbol)) throw TypeError();
1067 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1068 var e = GlobalSymbolRegistry[i];
1069 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1070 }
1071 return undefined;
1072 });
563e401a 1073
8b095871
IC
1074 // 19.4.2.6 Symbol.match
1075 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 1076
8b095871 1077 // 19.4.2.7 Symbol.prototype
563e401a 1078
8b095871
IC
1079 // 19.4.2.8 Symbol.replace
1080 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 1081
8b095871
IC
1082 // 19.4.2.9 Symbol.search
1083 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 1084
8b095871 1085 // 19.4.2.10 Symbol.species
563e401a 1086
8b095871
IC
1087 // 19.4.2.11 Symbol.search
1088 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 1089
8b095871 1090 // 19.4.2.12 Symbol.toPrimitive
563e401a 1091
8b095871
IC
1092 // 19.4.2.13 Symbol.toStringTag
1093 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1094
1095 // 19.4.2.14 Symbol.unscopables
1096
1097 // 19.4.3 Properties of the Symbol Prototype Object
1098 // 19.4.3.1 Symbol.prototype.constructor
1099
1100 // 19.4.3.2 Symbol.prototype.toString ( )
1101 Object.defineProperty(Symbol.prototype, 'toString', {
1102 value: function toString() {
1103 var s = strict(this);
1104 var desc = s['[[Description]]'];
1105 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1106 },
1107 configurable: true, writeable: true, enumerable: false });
1108
1109 // 19.4.3.3 Symbol.prototype.valueOf ( )
1110 Object.defineProperty(Symbol.prototype, 'valueOf', {
1111 value: function valueOf() {
1112 // To prevent automatic string conversion:
1113 throw TypeError();
1114
1115 // Spec has approximately the following:
1116 //var s = strict(this);
1117 //if (Type(s) === 'symbol') return s;
1118 //if (Type(s) !== 'object') throw TypeError();
1119 //if (!('[[SymbolData]]' in s)) throw TypeError();
1120 //return s['[[SymbolData]]'];
1121 },
1122 configurable: true, writeable: true, enumerable: false });
1123
1124 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1125 // (Done later to polyfill partial implementations)
1126
1127 // 19.4.4 Properties of Symbol Instances
1128 }());
1129
1130 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1131
1132 // Defined here so that other prototypes can reference it
1133 // 25.1.2 The %IteratorPrototype% Object
1134 var $IteratorPrototype$ = {};
1135
1136 //----------------------------------------
1137 // 6 ECMAScript Data Types and Values
1138 //----------------------------------------
1139
1140 // 6.1 ECMAScript Language Types
1141
1142 // "Type(x)" is used as shorthand for "the type of x"...
1143 function Type(v) {
1144 switch (typeof v) {
1145 case 'undefined': return 'undefined';
1146 case 'boolean': return 'boolean';
1147 case 'number': return 'number';
1148 case 'string': return 'string';
1149 case 'symbol': return 'symbol';
1150 default:
1151 if (v === null) return 'null';
1152 if (v instanceof global.Symbol) return 'symbol';
1153 return 'object';
563e401a 1154 }
8b095871 1155 }
563e401a 1156
8b095871
IC
1157 // 6.1.5.1 Well-Known Symbols
1158 var $$iterator = global.Symbol.iterator,
1159 $$match = global.Symbol.match,
1160 $$replace = global.Symbol.replace,
1161 $$search = global.Symbol.search,
1162 $$split = global.Symbol.split,
1163 $$toStringTag = global.Symbol.toStringTag;
563e401a 1164
8b095871
IC
1165 //----------------------------------------
1166 // 7 Abstract Operations
1167 //----------------------------------------
1168
1169 //----------------------------------------
1170 // 7.1 Type Conversion
1171 //----------------------------------------
1172
1173 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1174 // just use valueOf()
1175
1176 // 7.1.2 ToBoolean ( argument )
1177 // just use Boolean()
1178
1179 // 7.1.3 ToNumber ( argument )
1180 // just use Number()
1181
1182 // 7.1.4 ToInteger ( argument )
1183 function ToInteger(n) {
1184 n = Number(n);
1185 if ($isNaN(n)) return 0;
1186 if (n === 0 || n === Infinity || n === -Infinity) return n;
1187 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1188 }
8b095871
IC
1189
1190 // 7.1.5 ToInt32 ( argument )
1191 function ToInt32(v) { return v >> 0; }
1192
1193 // 7.1.6 ToUint32 ( argument )
1194 function ToUint32(v) { return v >>> 0; }
1195
1196 // 7.1.7 ToInt16 ( argument )
1197 function ToInt16(v) { return (v << 16) >> 16; }
1198
1199 // 7.1.8 ToUint16 ( argument )
1200 function ToUint16(v) { return v & 0xFFFF; }
1201
1202 // 7.1.9 ToInt8 ( argument )
1203 function ToInt8(v) { return (v << 24) >> 24; }
1204
1205 // 7.1.10 ToUint8 ( argument )
1206 function ToUint8(v) { return v & 0xFF; }
1207
1208 // 7.1.11 ToUint8Clamp ( argument )
1209 function ToUint8Clamp(argument) {
1210 var number = Number(argument);
1211 if ($isNaN(number)) return 0;
1212 if (number <= 0) return 0;
1213 if (number >= 255) return 255;
1214 var f = floor(number);
1215 if ((f + 0.5) < number) return f + 1;
1216 if (number < (f + 0.5)) return f;
1217 if (f % 2) return f + 1;
1218 return f;
563e401a 1219 }
8b095871
IC
1220
1221 // 7.1.12 ToString ( argument )
1222 // just use String()
1223
1224 // 7.1.13 ToObject ( argument )
1225 function ToObject(v) {
1226 if (v === null || v === undefined) throw TypeError();
1227 return Object(v);
563e401a 1228 }
563e401a 1229
8b095871
IC
1230 // 7.1.14 ToPropertyKey ( argument )
1231 function ToPropertyKey(v) {
1232 return String(v);
1233 }
3af2954a 1234
8b095871
IC
1235 // 7.1.15 ToLength ( argument )
1236 function ToLength(v) {
1237 var len = ToInteger(v);
1238 if (len <= 0) return 0;
1239 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1240 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1241 }
3af2954a 1242
8b095871 1243 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1244
8b095871
IC
1245 //----------------------------------------
1246 // 7.2 Testing and Comparison Operations
1247 //----------------------------------------
3af2954a 1248
8b095871
IC
1249 // 7.2.1 RequireObjectCoercible ( argument )
1250 // 7.2.2 IsArray ( argument )
3af2954a 1251
8b095871
IC
1252 // 7.2.3 IsCallable ( argument )
1253 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1254
8b095871
IC
1255 // 7.2.4 IsConstructor ( argument )
1256 function IsConstructor(o) {
1257 // Hacks for Safari 7 TypedArray XXXConstructor objects
1258 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1259 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1260 // TODO: Can this be improved on?
1261 return typeof o === 'function';
3af2954a 1262 }
8b095871
IC
1263
1264 // 7.2.5 IsExtensible (O)
1265 // 7.2.6 IsInteger ( argument )
1266
1267 // 7.2.7 IsPropertyKey ( argument )
1268 function IsPropertyKey(argument) {
1269 if (Type(argument) === 'string') return true;
1270 if (Type(argument) === 'symbol') return true;
1271 return false;
3af2954a
IC
1272 }
1273
8b095871
IC
1274 // 7.2.8 IsRegExp ( argument )
1275 // 7.2.5 IsConstructor ( argument )
3af2954a 1276
8b095871
IC
1277 // 7.2.9 SameValue(x, y)
1278 function SameValue(x, y) {
1279 if (typeof x !== typeof y) return false;
1280 switch (typeof x) {
1281 case 'undefined':
1282 return true;
1283 case 'number':
1284 if (x !== x && y !== y) return true;
1285 if (x === 0 && y === 0) return 1/x === 1/y;
1286 return x === y;
1287 case 'boolean':
1288 case 'string':
1289 case 'object':
1290 default:
1291 return x === y;
1292 }
1293 }
3af2954a 1294
8b095871
IC
1295 // 7.2.10 SameValueZero(x, y)
1296 function SameValueZero(x, y) {
1297 if (typeof x !== typeof y) return false;
1298 switch (typeof x) {
1299 case 'undefined':
1300 return true;
1301 case 'number':
1302 if (x !== x && y !== y) return true;
1303 return x === y;
1304 case 'boolean':
1305 case 'string':
1306 case 'object':
1307 default:
1308 return x === y;
1309 }
1310 }
3af2954a 1311
8b095871
IC
1312 //----------------------------------------
1313 // 7.3 Operations on Objects
1314 //----------------------------------------
3af2954a 1315
8b095871
IC
1316 // 7.3.1 Get (O, P)
1317 // - just use o.p or o[p]
3af2954a 1318
8b095871
IC
1319 // 7.3.2 GetV (V, P)
1320 function GetV(v, p) {
1321 var o = ToObject(v);
1322 return o[p];
1323 }
3af2954a 1324
8b095871
IC
1325 // 7.3.3 Set (O, P, V, Throw)
1326 // - just use o.p = v or o[p] = v
3af2954a 1327
3af2954a 1328
3af2954a 1329
3af2954a 1330
8b095871
IC
1331 // 7.3.9 GetMethod (O, P)
1332 function GetMethod(o, p) {
1333 var func = GetV(o, p);
1334 if (func === undefined || func === null) return undefined;
1335 if (!IsCallable(func)) throw TypeError();
1336 return func;
ab78acc6 1337 }
8b095871
IC
1338
1339 // 7.3.10 HasProperty (O, P)
1340 function HasProperty(o, p) {
1341 while (o) {
1342 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1343 if (Type(o) !== 'object') return false;
1344 o = Object.getPrototypeOf(o);
ab78acc6 1345 }
8b095871 1346 return false;
ab78acc6 1347 }
8b095871
IC
1348
1349 // 7.3.11 HasOwnProperty (O, P)
1350 function HasOwnProperty(o, p) {
1351 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1352 }
3af2954a 1353
8b095871
IC
1354 //----------------------------------------
1355 // 7.4 Operations on Iterator Objects
1356 //----------------------------------------
3af2954a 1357
8b095871
IC
1358 // 7.4.1 GetIterator ( obj, method )
1359 function GetIterator(obj, method) {
1360 if (arguments.length < 2)
1361 method = GetMethod(obj, $$iterator);
1362 var iterator = method.call(obj);
1363 if (Type(iterator) !== 'object') throw TypeError();
1364 return iterator;
3af2954a
IC
1365 }
1366
8b095871
IC
1367 // 7.4.2 IteratorNext ( iterator, value )
1368 function IteratorNext(iterator, value) {
1369 if (arguments.length < 2)
1370 var result = iterator.next();
1371 else
1372 result = iterator.next(value);
1373 if (Type(result) !== 'object') throw TypeError();
1374 return result;
1375 }
3af2954a 1376
8b095871
IC
1377 // 7.4.3 IteratorComplete ( iterResult )
1378 function IteratorComplete(iterResult) {
1379 console.assert(Type(iterResult) === 'object');
1380 return Boolean(iterResult.done);
1381 }
3af2954a 1382
8b095871
IC
1383 // 7.4.4 IteratorValue ( iterResult )
1384 function IteratorValue(iterResult) {
1385 console.assert(Type(iterResult) === 'object');
1386 return iterResult.value;
1387 }
1388
1389 // 7.4.5 IteratorStep ( iterator )
1390 function IteratorStep( iterator, value ) {
1391 var result = IteratorNext(iterator, value);
1392 var done = result['done'];
1393 if (Boolean(done) === true) return false;
1394 return result;
1395 }
1396
1397 // 7.4.6 IteratorClose( iterator, completion )
1398 function IteratorClose( iterator, completion ) {
1399 console.assert(Type(iterator) === 'object');
1400 var _return = GetMethod(iterator, 'return');
1401 if (_return === undefined) return completion;
1402 try {
1403 var innerResult = _return[iterator]();
1404 } catch (result) {
1405 // TODO: If completion.[[type]] is throw, return completion
1406 return result;
1407 }
1408 if (Type(innerResult) !== 'object') throw TypeError();
1409 return completion;
1410 }
1411
1412 // 7.4.7 CreateIterResultObject (value, done)
1413 function CreateIterResultObject(value, done) {
1414 console.assert(Type(done) === 'boolean');
1415 var obj = {};
1416 obj["value"] = value;
1417 obj["done"] = done;
1418 return obj;
1419 }
1420
1421 // 7.4.8 CreateListIterator (list)
1422 // 7.4.8.1 ListIterator next( )
1423 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1424 // 7.4.9.1 CompoundIterator next( )
1425
1426 //----------------------------------------
1427 // 8 Executable Code and Execution Contexts
1428 //----------------------------------------
1429
1430 //----------------------------------------
1431 // 8.4 Jobs and Job Queues
1432 //----------------------------------------
1433
1434 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1435 function EnqueueJob(queueName, job, args) {
1436 var fn = function() { job.apply(undefined, args); };
1437 enqueue(fn);
1438 }
1439
1440 // 8.4.2 NextJob result
1441 function NextJob(result) {
1442 // no-op
1443 }
1444
1445 //----------------------------------------
1446 // 9 Ordinary and Exotic Objects Behaviors
1447 //----------------------------------------
1448
1449 // 9.1.11 [[Enumerate]] ()
1450 function Enumerate(obj) {
1451 var e = [];
1452 if (Object(obj) !== obj) return e;
1453 var visited = new Set;
1454 while (obj !== null) {
1455 Object.getOwnPropertyNames(obj).forEach(function(name) {
1456 if (!visited.has(name)) {
1457 var desc = Object.getOwnPropertyDescriptor(obj, name);
1458 if (desc) {
1459 visited.add(name);
1460 if (desc.enumerable) e.push(name);
1461 }
1462 }
1463 });
1464 obj = Object.getPrototypeOf(obj);
1465 }
1466 return e[$$iterator]();
1467 }
1468
1469 // 9.1.12 [[OwnPropertyKeys]] ( )
1470 function OwnPropertyKeys(o) {
1471 return Object.getOwnPropertyNames(o);
1472 }
1473
1474 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1475 function ObjectCreate(proto, internalSlotsList) {
1476 return Object.create(proto, internalSlotsList);
1477 }
1478
1479 // ---------------------------------------
1480 // 19 Fundamental Objects
1481 // ---------------------------------------
1482
1483 // ---------------------------------------
1484 // 19.1 Object Objects
1485 // ---------------------------------------
1486
1487 // 19.1.1 The Object Constructor
1488 // 19.1.1.1 Object ( [ value ] )
1489 // 19.1.2 Properties of the Object Constructor
1490 // 19.1.2.1 Object.assign ( target, ...sources )
1491 define(
1492 Object, 'assign',
1493 function assign(target, /*...*/sources) {
1494 var to = ToObject(target);
1495 if (arguments.length < 2) return to;
1496
1497 var sourcesIndex = 1;
1498 while (sourcesIndex < arguments.length) {
1499 var nextSource = arguments[sourcesIndex++];
1500 if (nextSource === undefined || nextSource === null) {
1501 var keys = [];
1502 } else {
1503 var from = ToObject(nextSource);
1504 keys = OwnPropertyKeys(from);
1505 }
1506 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1507 var nextKey = keys[keysIndex];
1508 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1509 if (desc !== undefined && desc.enumerable) {
1510 var propValue = from[nextKey];
1511 to[nextKey] = propValue;
1512 }
1513 }
1514 }
1515 return to;
1516 });
1517
1518 // 19.1.2.2 Object.create ( O [ , Properties ] )
1519 // 19.1.2.3 Object.defineProperties ( O, Properties )
1520 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1521 // 19.1.2.5 Object.freeze ( O )
1522 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1523
1524 (function() {
1525 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1526 $getOwnPropertyNames = Object.getOwnPropertyNames,
1527 $keys = Object.keys,
1528 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1529
1530 function isStringKey(k) { return !symbolForKey(k); }
1531
1532 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1533 define(
1534 Object, 'getOwnPropertyNames',
1535 function getOwnPropertyNames(o) {
1536 if (Object.prototype.toString.call(o) === '[object Window]') {
1537 // Workaround for cross-realm calling by IE itself.
1538 // https://github.com/inexorabletash/polyfill/issues/96
1539 try {
1540 return $getOwnPropertyNames(o).filter(isStringKey);
1541 } catch (_) {
1542 return $window_names.slice();
1543 }
1544 }
1545 return $getOwnPropertyNames(o).filter(isStringKey);
1546 }, !nativeSymbols);
1547
1548 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1549 define(
1550 Object, 'getOwnPropertySymbols',
1551 function getOwnPropertySymbols(o) {
1552 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1553 }, !nativeSymbols);
1554
1555 // 19.1.2.14 Object.keys ( O )
1556 define(
1557 Object, 'keys',
1558 function keys(o) {
1559 return $keys(o).filter(isStringKey);
1560 }, !nativeSymbols);
1561 }());
1562
1563 // 19.1.2.9 Object.getPrototypeOf ( O )
1564 // 19.1.2.10 Object.is ( value1, value2 )
1565 define(
1566 Object, 'is',
1567 function is(value1, value2) {
1568 return SameValue(value1, value2);
1569 });
1570
1571 // 19.1.2.11 Object.isExtensible ( O )
1572 // 19.1.2.12 Object.isFrozen ( O )
1573 // 19.1.2.13 Object.isSealed ( O )
1574
1575 // 19.1.2.14 Object.keys ( O )
1576 // see above
1577
1578 // 19.1.2.15 Object.preventExtensions ( O )
1579 // 19.1.2.16 Object.prototype
1580 // 19.1.2.17 Object.seal ( O )
1581
1582 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1583 define(
1584 Object, 'setPrototypeOf',
1585 function setPrototypeOf(o, proto) {
1586 if (Type(o) !== 'object') throw TypeError();
1587 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1588 o.__proto__ = proto;
1589 return o;
1590 }
1591 );
1592
1593 // 19.1.3 Properties of the Object Prototype Object
1594 // 19.1.3.1 Object.prototype.constructor
1595 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1596 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1597 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1598 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1599 // 19.1.3.6 Object.prototype.toString ( )
1600 hook(Object.prototype, 'toString',
1601 function() {
1602 var o = strict(this);
1603 if (o === Object(o) && $$toStringTag in o) {
1604 return '[object ' + o[$$toStringTag] + ']';
1605 }
1606 return undefined;
1607 });
1608
1609 // 19.1.3.7 Object.prototype.valueOf ( )
1610 // 19.1.4 Properties of Object Instances
1611
1612 // ---------------------------------------
1613 // 19.2 Function Objects
1614 // ---------------------------------------
1615
1616 // 19.2.1 The Function Constructor
1617 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1618 // 19.2.2 Properties of the Function Constructor
1619 // 19.2.2.1 Function.length
1620 // 19.2.2.2 Function.prototype
1621 // 19.2.3 Properties of the Function Prototype Object
1622 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1623 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1624 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1625 // 19.2.3.4 Function.prototype.constructor
1626 // 19.2.3.5 Function.prototype.toString ( )
1627 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1628 // 19.2.4 Function Instances
1629 // 19.2.4.1 length
1630 // 19.2.4.2 name
1631 // 19.2.4.3 prototype
1632
1633 // (No polyfillable changes from ES5)
1634
1635 // ---------------------------------------
1636 // 19.3 Boolean Objects
1637 // ---------------------------------------
1638
1639 // 19.3.1 The Boolean Constructor
1640 // 19.3.1.1 Boolean ( value )
1641 // 19.3.2 Properties of the Boolean Constructor
1642 // 19.3.2.1 Boolean.prototype
1643 // 19.3.3 Properties of the Boolean Prototype Object
1644 // 19.3.3.1 Boolean.prototype.constructor
1645 // 19.3.3.2 Boolean.prototype.toString ( )
1646 // 19.3.3.3 Boolean.prototype.valueOf ( )
1647 // 19.3.4 Properties of Boolean Instances
1648
1649 // (No polyfillable changes from ES5)
1650
1651 // ---------------------------------------
1652 // 19.4 Symbol Objects
1653 // ---------------------------------------
1654
1655 // Moved earlier in this script, so that other polyfills can depend on them.
1656
1657 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1658 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1659
1660 // ---------------------------------------
1661 // 19.5 Error Objects
1662 // ---------------------------------------
1663
1664 // 19.5.1 The Error Constructor
1665 // 19.5.1.1 Error ( message )
1666 // 19.5.1.2 new Error( ...argumentsList )
1667 // 19.5.2 Properties of the Error Constructor
1668 // 19.5.2.1 Error.prototype
1669 // 19.5.3 Properties of the Error Prototype Object
1670 // 19.5.3.1 Error.prototype.constructor
1671 // 19.5.3.2 Error.prototype.message
1672 // 19.5.3.3 Error.prototype.name
1673 // 19.5.3.4 Error.prototype.toString ( )
1674 // 19.5.4 Properties of Error Instances
1675 // 19.5.5 Native Error Types Used in This Standard
1676 // 19.5.5.1 EvalError
1677 // 19.5.5.2 RangeError
1678 // 19.5.5.3 ReferenceError
1679 // 19.5.5.4 SyntaxError
1680 // 19.5.5.5 TypeError
1681 // 19.5.5.6 URIError
1682 // 19.5.6 NativeError Object Structure
1683 // 19.5.6.1 NativeError Constructors
1684 // 19.5.6.1.1 NativeError ( message )
1685 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1686 // 19.5.6.2 Properties of the NativeError Constructors
1687 // 19.5.6.2.1 NativeError.prototype
1688 // 19.5.6.3 Properties of the NativeError Prototype Objects
1689 // 19.5.6.4 Properties of NativeError Instances
1690
1691 // (No polyfillable changes from ES5)
1692
1693 // ---------------------------------------
1694 // 20 Numbers and Dates
1695 // ---------------------------------------
1696
1697 // ---------------------------------------
1698 // 20.1 Number Objects
1699 // ---------------------------------------
1700
1701 // 20.1.1 The Number Constructor
1702 // 20.1.1.1 Number ( [ value ] )
1703 // 20.1.1.2 new Number ( ...argumentsList )
1704 // 20.1.2 Properties of the Number Constructor
1705
1706 // 20.1.2.1 Number.EPSILON
1707 define(
1708 Number, 'EPSILON',
1709 (function () {
1710 var next, result;
1711 for (next = 1; 1 + next !== 1; next = next / 2)
1712 result = next;
1713 return result;
1714 }()));
1715
1716 // 20.1.2.2 Number.isFinite ( number )
1717 define(
1718 Number, 'isFinite',
1719 function isFinite(number) {
1720 if (Type(number) !== 'number') return false;
1721 if (number !== number || number === +Infinity || number === -Infinity) return false;
1722 return true;
1723 });
1724
1725 // 20.1.2.3 Number.isInteger ( number )
1726 define(
1727 Number, 'isInteger',
1728 function isInteger(number) {
1729 if (Type(number) !== 'number') return false;
1730 if (number !== number || number === +Infinity || number === -Infinity) return false;
1731 var integer = ToInteger(number);
1732 if (integer !== number) return false;
1733 return true;
1734 });
1735
1736 // 20.1.2.4 Number.isNaN ( number )
1737 define(
1738 Number, 'isNaN',
1739 function isNaN(number) {
1740 if (Type(number) !== 'number') return false;
1741 if (number !== number) return true;
1742 return false;
1743 });
1744
1745 // 20.1.2.5 Number.isSafeInteger ( number )
1746 define(
1747 Number, 'isSafeInteger',
1748 function isSafeInteger(number) {
1749 if (Type(number) !== 'number') return false;
1750 if (number !== number || number === +Infinity || number === -Infinity) return false;
1751 var integer = ToInteger(number);
1752 if (integer !== number) return false;
1753 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1754 return true;
1755 return false;
1756 });
1757
1758 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1759 define(
1760 Number, 'MAX_SAFE_INTEGER',
1761 9007199254740991); // 2^53-1
1762
1763 // 20.1.2.7 Number.MAX_VALUE
1764
1765 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1766 define(
1767 Number, 'MIN_SAFE_INTEGER',
1768 -9007199254740991); // -2^53+1
1769
1770 // 20.1.2.9 Number.MIN_VALUE
1771 // 20.1.2.10 Number.NaN
1772 // 20.1.2.11 Number.NEGATIVE_INFINITY
1773
1774 // 20.1.2.12 Number.parseFloat ( string )
1775 define(Number, 'parseFloat', $parseFloat);
1776
1777 // 20.1.2.13 Number.parseInt ( string, radix )
1778 define(Number, 'parseInt', $parseInt);
1779
1780 // 20.1.2.14 Number.POSITIVE_INFINITY
1781 // 20.1.2.15 Number.prototype
1782
1783 // 20.1.3 Properties of the Number Prototype Object
1784 // 20.1.3.1 Number.prototype.constructor
1785 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1786 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1787 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1788 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1789 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1790 // 20.1.3.7 Number.prototype.valueOf ( )
1791 // 20.1.4 Properties of Number Instances
1792
1793 // ---------------------------------------
1794 // 20.2 The Math Object
1795 // ---------------------------------------
1796
1797 // 20.2.1 Value Properties of the Math Object
1798 // 20.2.1.1 Math.E
1799 // 20.2.1.2 Math.LN10
1800 // 20.2.1.3 Math.LN2
1801 // 20.2.1.4 Math.LOG10E
1802 // 20.2.1.5 Math.LOG2E
1803 // 20.2.1.6 Math.PI
1804 // 20.2.1.7 Math.SQRT1_2
1805 // 20.2.1.8 Math.SQRT2
1806
1807 // 20.2.1.9 Math [ @@toStringTag ]
1808 define(Math, $$toStringTag, 'Math');
1809
1810 // 20.2.2 Function Properties of the Math Object
1811 // 20.2.2.1 Math.abs ( x )
1812 // 20.2.2.2 Math.acos ( x )
1813
1814 // 20.2.2.3 Math.acosh(x)
1815 define(
1816 Math, 'acosh',
1817 function acosh(x) {
1818 x = Number(x);
1819 return log(x + sqrt(x * x - 1));
1820 });
1821
1822 // 20.2.2.4 Math.asin ( x )
1823
1824 // 20.2.2.5 Math.asinh( x )
1825 define(
1826 Math, 'asinh',
1827 function asinh(x) {
1828 x = Number(x);
1829 if (SameValue(x, -0)) {
1830 return x;
1831 }
1832 var s = sqrt(x * x + 1);
1833 return (s === -x) ? log(0) : log(x + s);
1834 });
1835
1836 // 20.2.2.6 Math.atan ( x )
1837
1838 // 20.2.2.7 Math.atanh( x )
1839 define(
1840 Math, 'atanh',
1841 function atanh(x) {
1842 x = Number(x);
1843 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1844 });
1845
1846 // 20.2.2.8 Math.atan2 ( y, x )
1847
1848 // 20.2.2.9 Math.cbrt ( x )
1849 define(
1850 Math, 'cbrt',
1851 function cbrt(x) {
1852 x = Number(x);
1853 if ($isNaN(x/x)) {
1854 return x;
1855 }
1856 var r = pow(abs(x), 1/3);
1857 var t = x/r/r;
1858 return r + (r * (t-r) / (2*r + t));
1859 });
1860
1861 // 20.2.2.10 Math.ceil ( x )
1862
1863 // 20.2.2.11 Math.clz32 ( x )
1864 define(
1865 Math, 'clz32',
1866 function clz32(x) {
1867 function clz8(x) {
1868 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1869 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1870 }
1871 x = ToUint32(x);
1872 return x & 0xff000000 ? clz8(x >> 24) :
1873 x & 0xff0000 ? clz8(x >> 16) + 8 :
1874 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1875 });
1876
1877
1878
1879 // 20.2.2.12 Math.cos ( x )
1880
1881 // 20.2.2.13 Math.cosh ( x )
1882 define(
1883 Math, 'cosh',
1884 function cosh(x) {
1885 x = Number(x);
1886 return (pow(E, x) + pow(E, -x)) / 2;
1887 });
1888
1889 // 20.2.2.14 Math.exp ( x )
1890
1891 // 20.2.2.15 Math.expm1 ( x )
1892 define(
1893 Math, 'expm1',
1894 function expm1(x) {
1895 x = Number(x);
1896 // from: http://www.johndcook.com/cpp_log1p.html
1897 if (SameValue(x, -0)) {
1898 return -0;
1899 } else if (abs(x) < 1e-5) {
1900 return x + 0.5 * x * x; // two terms of Taylor expansion
1901 } else {
1902 return exp(x) - 1;
1903 }
1904 });
1905
1906 // 20.2.2.16 Math.floor ( x )
1907
1908 // 20.2.2.17 Math.fround ( x )
1909 define(
1910 Math, 'fround',
1911 function fround(x) {
1912 if ($isNaN(x)) {
1913 return NaN;
1914 }
1915 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1916 return x;
1917 }
1918 return (new Float32Array([x]))[0];
1919 });
1920
1921 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1922 define(
1923 Math, 'hypot',
1924 function hypot() {
1925 var values = [];
1926 var m = 0, sawNaN = false;
1927 for (var i = 0; i < arguments.length; ++i) {
1928 var n = abs(Number(arguments[i]));
1929 if (n === Infinity) return n;
1930 if (n !== n) sawNaN = true;
1931 if (n > m) m = n;
1932 values[i] = n;
1933 }
1934 if (sawNaN) return NaN;
1935 if (m === 0) return +0;
1936 var sum = +0;
1937 for (i = 0; i < values.length; ++i) {
1938 var r = values[i] / m;
1939 sum = sum + r * r;
1940 }
1941 return m * sqrt(sum);
1942 });
1943
1944 // 20.2.2.19 Math.imul ( x, y )
1945 define(
1946 Math, 'imul',
1947 function imul(x, y) {
1948 var a = ToUint32(x);
1949 var b = ToUint32(y);
1950 // (slow but accurate)
1951 var ah = (a >>> 16) & 0xffff;
1952 var al = a & 0xffff;
1953 var bh = (b >>> 16) & 0xffff;
1954 var bl = b & 0xffff;
1955 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1956 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1957 );
1958
1959 // 20.2.2.20 Math.log ( x )
1960
1961 // 20.2.2.21 Math.log1p ( x )
1962 define(
1963 Math, 'log1p',
1964 function log1p(x) {
1965 x = Number(x);
1966 // from: http://www.johndcook.com/cpp_expm1.html
1967 if (x < -1) {
1968 return NaN;
1969 } else if (SameValue(x, -0)) {
1970 return -0;
1971 } else if (abs(x) > 1e-4) {
1972 return log(1 + x);
1973 } else {
1974 return (-0.5 * x + 1) * x;
1975 }
1976 });
1977
1978 // 20.2.2.22 Math.log10 ( x )
1979 define(
1980 Math, 'log10',
1981 function log10(x) {
1982 x = Number(x);
1983 return log(x) * LOG10E;
1984 });
1985
1986 // 20.2.2.23 Math.log2 ( x )
1987 define(
1988 Math, 'log2',
1989 function log2(x) {
1990 x = Number(x);
1991 return log(x) * LOG2E;
1992 });
1993
1994 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1995 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1996 // 20.2.2.26 Math.pow ( x, y )
1997 // 20.2.2.27 Math.random ( )
1998 // 20.2.2.28 Math.round ( x )
1999
2000 // 20.2.2.29 Math.sign(x)
2001 define(
2002 Math, 'sign',
2003 function sign(x) {
2004 x = Number(x);
2005 return x < 0 ? -1 : x > 0 ? 1 : x;
2006 });
2007
2008 // 20.2.2.30 Math.sin ( x )
2009
2010 // 20.2.2.31 Math.sinh( x )
2011 define(
2012 Math, 'sinh',
2013 function sinh(x) {
2014 x = Number(x);
2015 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
2016 });
2017
2018 // 20.2.2.32 Math.sqrt ( x )
2019 // 20.2.2.33 Math.tan ( x )
2020
2021 // 20.2.2.34 Math.tanh ( x )
2022 define(
2023 Math, 'tanh',
2024 function tanh(x) {
2025 x = Number(x);
2026 var n = pow(E, 2 * x) - 1,
2027 d = pow(E, 2 * x) + 1;
2028 if (SameValue(x, -0))
2029 return x;
2030 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2031 });
2032
2033 // 20.2.2.35 Math.trunc ( x )
2034 define(
2035 Math, 'trunc',
2036 function trunc(x) {
2037 x = Number(x);
2038 return $isNaN(x) ? NaN :
2039 x < 0 ? ceil(x) : floor(x);
2040 });
2041
2042 // ---------------------------------------
2043 // 20.3 Date Objects
2044 // ---------------------------------------
2045
2046 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2047 // 20.3.1.1 Time Values and Time Range
2048 // 20.3.1.2 Day Number and Time within Day
2049 // 20.3.1.3 Year Number
2050 // 20.3.1.4 Month Number
2051 // 20.3.1.5 Date Number
2052 // 20.3.1.6 Week Day
2053 // 20.3.1.7 Local Time Zone Adjustment
2054 // 20.3.1.8 Daylight Saving Time Adjustment
2055 // 20.3.1.9 Local Time
2056 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2057 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2058 // 20.3.1.12 MakeDay (year, month, date)
2059 // 20.3.1.13 MakeDate (day, time)
2060 // 20.3.1.14 TimeClip (time)
2061 // 20.3.1.15 Date Time String Format
2062 // 20.3.1.15.1 Extended years
2063 // 20.3.2 The Date Constructor
2064 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2065 // 20.3.2.2 Date ( value )
2066 // 20.3.2.3 Date ( )
2067 // 20.3.3 Properties of the Date Constructor
2068 // 20.3.3.1 Date.now ( )
2069 // 20.3.3.2 Date.parse (string)
2070 // 20.3.3.3 Date.prototype
2071 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2072 // 20.3.4 Properties of the Date Prototype Object
2073 // 20.3.4.1 Date.prototype.constructor
2074 // 20.3.4.2 Date.prototype.getDate ( )
2075 // 20.3.4.3 Date.prototype.getDay ( )
2076 // 20.3.4.4 Date.prototype.getFullYear ( )
2077 // 20.3.4.5 Date.prototype.getHours ( )
2078 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2079 // 20.3.4.7 Date.prototype.getMinutes ( )
2080 // 20.3.4.8 Date.prototype.getMonth ( )
2081 // 20.3.4.9 Date.prototype.getSeconds ( )
2082 // 20.3.4.10 Date.prototype.getTime ( )
2083 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2084 // 20.3.4.12 Date.prototype.getUTCDate ( )
2085 // 20.3.4.13 Date.prototype.getUTCDay ( )
2086 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2087 // 20.3.4.15 Date.prototype.getUTCHours ( )
2088 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2089 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2090 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2091 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2092 // 20.3.4.20 Date.prototype.setDate ( date )
2093 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2094 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2095 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2096 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2097 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2098 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2099 // 20.3.4.27 Date.prototype.setTime ( time )
2100 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2101 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2102 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2103 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2104 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2105 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2106 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2107 // 20.3.4.35 Date.prototype.toDateString ( )
2108 // 20.3.4.36 Date.prototype.toISOString ( )
2109 // 20.3.4.37 Date.prototype.toJSON ( key )
2110 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2111 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2112 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2113 // 20.3.4.41 Date.prototype.toString ( )
2114 // 20.3.4.42 Date.prototype.toTimeString ( )
2115 // 20.3.4.43 Date.prototype.toUTCString ( )
2116 // 20.3.4.44 Date.prototype.valueOf ( )
2117 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2118 // 20.3.5 Properties of Date Instances
2119
2120 // (No polyfillable changes from ES5)
2121
2122 // ---------------------------------------
2123 // 21 Text Processing
2124 // ---------------------------------------
2125
2126 var string_regexp_dispatch = (function() {
2127 var faux = {}, secret = Symbol();
2128 faux[Symbol.match] = function() { return secret; };
2129 return ("").match(faux) === secret;
2130 }());
2131
2132 // 21.1 String Objects
2133 // 21.1.1 The String Constructor
2134 // 21.1.1.1 String ( value )
2135 // 21.1.2 Properties of the String Constructor
2136 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2137
2138 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2139 define(
2140 String, 'fromCodePoint',
2141 function fromCodePoint(/*...codePoints*/) {
2142 var codePoints = arguments,
2143 length = codePoints.length,
2144 elements = [],
2145 nextIndex = 0;
2146 while (nextIndex < length) {
2147 var next = codePoints[nextIndex];
2148 var nextCP = Number(next);
2149 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2150 nextCP < 0 || nextCP > 0x10FFFF) {
2151 throw RangeError('Invalid code point ' + nextCP);
2152 }
2153 if (nextCP < 0x10000) {
2154 elements.push(String.fromCharCode(nextCP));
2155 } else {
2156 nextCP -= 0x10000;
2157 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2158 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2159 }
2160 nextIndex += 1;
2161 }
2162 return elements.join('');
2163 });
2164
2165 // 21.1.2.3 String.prototype
2166
2167 // 21.1.2.4 String.raw ( template , ...substitutions )
2168 define(
2169 String, 'raw',
2170 function raw(template /*, ...substitutions*/) {
2171 var substitutions = [].slice.call(arguments, 1);
2172
2173 var cooked = Object(template);
2174 var rawValue = cooked['raw'];
2175 var raw = Object(rawValue);
2176 var len = raw['length'];
2177 var literalSegments = ToLength(len);
2178 if (literalSegments <= 0) return '';
2179 var stringElements = [];
2180 var nextIndex = 0;
2181 while (true) {
2182 var next = raw[nextIndex];
2183 var nextSeg = String(next);
2184 stringElements.push(nextSeg);
2185 if (nextIndex + 1 === literalSegments)
2186 return stringElements.join('');
2187 next = substitutions[nextIndex];
2188 var nextSub = String(next);
2189 stringElements.push(nextSub);
2190 nextIndex = nextIndex + 1;
2191 }
2192 });
2193
2194 // See https://githib.com/inexorabletash/uate for a more useful version.
2195
2196 // 21.1.3 Properties of the String Prototype Object
2197 // 21.1.3.1 String.prototype.charAt ( pos )
2198 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2199
2200 // 21.1.3.3 String.prototype.codePointAt ( pos )
2201 define(
2202 String.prototype, 'codePointAt',
2203 function codePointAt(pos) {
2204 var o = strict(this);
2205 var s = String(o);
2206 var position = ToInteger(pos);
2207 var size = s.length;
2208 if (position < 0 || position >= size) return undefined;
2209 var first = s.charCodeAt(position);
2210 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2211 var second = s.charCodeAt(position + 1);
2212 if (second < 0xDC00 || second > 0xDFFF) return first;
2213 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2214 });
2215
2216 // 21.1.3.4 String.prototype.concat ( ...args )
2217 // 21.1.3.5 String.prototype.constructor
2218
2219 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2220 define(
2221 String.prototype, 'endsWith',
2222 function endsWith(searchString) {
2223 var endPosition = arguments[1];
2224
2225 var o = strict(this);
2226 var s = String(o);
2227 var searchStr = String(searchString);
2228 var len = s.length;
2229 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2230 var end = min(max(pos, 0), len);
2231 var searchLength = searchStr.length;
2232 var start = end - searchLength;
2233 if (start < 0) return false;
2234 if (s.substring(start, start + searchLength) === searchStr) return true;
2235 return false;
2236 });
2237
2238 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2239 define(
2240 String.prototype, 'includes',
2241 function includes(searchString) {
2242 var position = arguments[1];
2243
2244 var o = strict(this);
2245 var s = String(o);
2246 var searchStr = String(searchString);
2247 var pos = ToInteger(position);
2248 var len = s.length;
2249 var start = min(max(pos, 0), len);
2250 return s.indexOf(searchStr, start) !== -1;
2251 });
2252
2253 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2254 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2255 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2256 // 21.1.3.11 String.prototype.match ( regexp )
2257 define(
2258 String.prototype, 'match',
2259 function match(regexp) {
2260 var o = strict(this);
2261 var s = String(o);
2262 if (HasProperty(regexp, $$match)) var rx = regexp;
2263 else rx = new RegExp(regexp);
2264 return rx[$$match](s);
2265 }, !string_regexp_dispatch);
2266
2267 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2268
2269 // Not practical due to table sizes; if needed, pull in:
2270 // https://github.com/walling/unorm/
2271
2272 // 21.1.3.13 String.prototype.repeat ( count )
2273 define(
2274 String.prototype, 'repeat',
2275 function repeat(count) {
2276 var o = strict(this);
2277 var s = String(o);
2278 var n = ToInteger(count);
2279 if (n < 0) throw RangeError();
2280 if (n === Infinity) throw RangeError();
2281 var t = new Array(n + 1).join(s);
2282 return t;
2283 });
2284
2285 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2286 define(
2287 String.prototype, 'replace',
2288 function replace(searchValue, replaceValue) {
2289 var o = strict(this);
2290 if (HasProperty(searchValue, $$replace))
2291 return searchValue[$$replace](o, replaceValue);
2292 return orig_replace.call(o, searchValue, replaceValue);
2293 }, !string_regexp_dispatch);
2294
2295 // 21.1.3.15 String.prototype.search ( regexp )
2296 define(
2297 String.prototype, 'search',
2298 function search(regexp) {
2299 var o = strict(this);
2300 var string = String(o);
2301 if (HasProperty(regexp, $$search)) var rx = regexp;
2302 else rx = new RegExp(regexp);
2303 return rx[$$search](string);
2304 }, !string_regexp_dispatch);
2305
2306 // 21.1.3.16 String.prototype.slice ( start, end )
2307 // 21.1.3.17 String.prototype.split ( separator, limit )
2308 define(
2309 String.prototype, 'split',
2310 function split(separator, limit) {
2311 var o = strict(this);
2312 if (HasProperty(separator, $$split))
2313 return separator[$$split](o, limit);
2314 return orig_split.call(o, separator, limit);
2315 }, !string_regexp_dispatch);
2316
2317 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2318 define(
2319 String.prototype, 'startsWith',
2320 function startsWith(searchString) {
2321 var position = arguments[1];
2322
2323 var o = strict(this);
2324 var s = String(o);
2325 var searchStr = String(searchString);
2326 var pos = ToInteger(position);
2327 var len = s.length;
2328 var start = min(max(pos, 0), len);
2329 var searchLength = searchStr.length;
2330 if (searchLength + start > len) return false;
2331 if (s.substring(start, start + searchLength) === searchStr) return true;
2332 return false;
2333 });
2334
2335 // 21.1.3.19 String.prototype.substring ( start, end )
2336 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2337 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2338 // 21.1.3.22 String.prototype.toLowerCase ( )
2339 // 21.1.3.23 String.prototype.toString ( )
2340 // 21.1.3.24 String.prototype.toUpperCase ( )
2341 // 21.1.3.25 String.prototype.trim ( )
2342 // 21.1.3.26 String.prototype.valueOf ( )
2343
2344 // 21.1.3.27 String.prototype [ @@iterator ]( )
2345 define(
2346 String.prototype, $$iterator,
2347 function entries() {
2348 return CreateStringIterator(this, 'value');
2349 });
2350
2351 // 21.1.4 Properties of String Instances
2352 // 21.1.4.1 length
2353
2354 // 21.1.5 String Iterator Objects
2355 /** @constructor */
2356 function StringIterator() {}
2357
2358 // 21.1.5.1 CreateStringIterator Abstract Operation
2359 function CreateStringIterator(string, kind) {
2360 var s = String(string);
2361 var iterator = new StringIterator;
2362 set_internal(iterator, '[[IteratedString]]', s);
2363 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2364 set_internal(iterator, '[[StringIterationKind]]', kind);
2365 return iterator;
2366 }
2367
2368 // 21.1.5.2 The %StringIteratorPrototype% Object
2369 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2370 StringIterator.prototype = $StringIteratorPrototype$;
2371
2372 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2373 define(
2374 $StringIteratorPrototype$, 'next',
2375 function next() {
2376 var o = ToObject(this);
2377 var s = String(o['[[IteratedString]]']),
2378 index = o['[[StringIteratorNextIndex]]'],
2379 len = s.length;
2380 if (index >= len) {
2381 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2382 return CreateIterResultObject(undefined, true);
2383 }
2384 var cp = s.codePointAt(index);
2385 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2386 return CreateIterResultObject(String.fromCodePoint(cp), false);
2387 });
2388
2389 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2390 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2391
2392 // 21.1.5.3 Properties of String Iterator Instances
2393
2394 // ---------------------------------------
2395 // 21.2 RegExp (Regular Expression) Objects
2396 // ---------------------------------------
2397
2398 // 21.2.1 Patterns
2399 // 21.2.2 Pattern Semantics
2400 // 21.2.2.1 Notation
2401 // 21.2.2.2 Pattern
2402 // 21.2.2.3 Disjunction
2403 // 21.2.2.4 Alternative
2404 // 21.2.2.5 Term
2405 // 21.2.2.6 Assertion
2406 // 21.2.2.7 Quantifier
2407 // 21.2.2.8 Atom
2408 // 21.2.2.9 AtomEscape
2409 // 21.2.2.10 CharacterEscape
2410 // 21.2.2.11 DecimalEscape
2411 // 21.2.2.12 CharacterClassEscape
2412 // 21.2.2.13 CharacterClass
2413 // 21.2.2.14 ClassRanges
2414 // 21.2.2.15 NonemptyClassRanges
2415 // 21.2.2.16 NonemptyClassRangesNoDash
2416 // 21.2.2.17 ClassAtom
2417 // 21.2.2.18 ClassAtomNoDash
2418 // 21.2.2.19 ClassEscape
2419 // 21.2.3 The RegExp Constructor
2420 // 21.2.3.1 RegExp ( pattern, flags )
2421 // 21.2.3.2 new RegExp( ...argumentsList )
2422 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2423 // 21.2.4 Properties of the RegExp Constructor
2424 // 21.2.4.1 RegExp.prototype
2425 // 21.2.5 Properties of the RegExp Prototype Object
2426 // 21.2.5.1 RegExp.prototype.constructor
2427 // 21.2.5.2 RegExp.prototype.exec ( string )
2428
2429 // 21.2.5.3 get RegExp.prototype.flags
2430 if (!('flags' in RegExp.prototype)) {
2431 Object.defineProperty(
2432 RegExp.prototype, 'flags', {
2433 get: function() {
2434 var s = String(this);
2435 return s.substring(s.lastIndexOf('/') + 1);
2436 }
2437 });
2438 }
2439
2440 // 21.2.5.4 get RegExp.prototype.global
2441 // 21.2.5.5 get RegExp.prototype.ignoreCase
2442
2443 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2444 define(RegExp.prototype, $$match, function(string) {
2445 var o = strict(this);
2446 return orig_match.call(string, o);
2447 });
2448
2449 // 21.2.5.7 get RegExp.prototype.multiline
2450
2451 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2452 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2453 var o = strict(this);
2454 return orig_replace.call(string, o, replaceValue);
2455 });
2456
2457 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2458 define(RegExp.prototype, $$search, function(string) {
2459 var o = strict(this);
2460 return orig_search.call(string, o);
2461 });
2462
2463 // 21.2.5.10 get RegExp.prototype.source
2464
2465 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2466 define(RegExp.prototype, $$split, function(string, limit) {
2467 var o = strict(this);
2468 return orig_split.call(string, o, limit);
2469 });
2470
2471 // 21.2.5.12 get RegExp.prototype.sticky
2472 // 21.2.5.13 RegExp.prototype.test( S )
2473 // 21.2.5.14 RegExp.prototype.toString ( )
2474 // 21.2.5.15 get RegExp.prototype.unicode
2475
2476 // 21.2.6 Properties of RegExp Instances
2477 // 21.2.6.1 lastIndex
2478
2479 // (No polyfillable changes from ES5)
2480
2481 // ---------------------------------------
2482 // 22 Indexed Collections
2483 // ---------------------------------------
2484
2485 // ---------------------------------------
2486 // 22.1 Array Objects
2487 // ---------------------------------------
2488
2489 // 22.1.1 The Array Constructor
2490 // 22.1.1.1 Array ( )
2491 // 22.1.1.2 Array (len)
2492 // 22.1.1.3 Array (...items )
2493
2494 // 22.1.2 Properties of the Array Constructor
2495
2496 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2497 define(
2498 Array, 'from',
2499 function from(items) {
2500 var mapfn = arguments[1];
2501 var thisArg = arguments[2];
2502
2503 var c = strict(this);
2504 if (mapfn === undefined) {
2505 var mapping = false;
2506 } else {
2507 if (!IsCallable(mapfn)) throw TypeError();
2508 var t = thisArg;
2509 mapping = true;
2510 }
2511 var usingIterator = GetMethod(items, $$iterator);
2512 if (usingIterator !== undefined) {
2513 if (IsConstructor(c)) {
2514 var a = new c();
2515 } else {
2516 a = new Array(0);
2517 }
2518 var iterator = GetIterator(items, usingIterator);
2519 var k = 0;
2520 while (true) {
2521 var next = IteratorStep(iterator);
2522 if (next === false) {
2523 a.length = k;
2524 return a;
2525 }
2526 var nextValue = IteratorValue(next);
2527 if (mapping)
2528 var mappedValue = mapfn.call(t, nextValue);
2529 else
2530 mappedValue = nextValue;
2531 a[k] = mappedValue;
2532 k += 1;
2533 }
2534 }
2535 var arrayLike = ToObject(items);
2536 var lenValue = arrayLike.length;
2537 var len = ToLength(lenValue);
2538 if (IsConstructor(c)) {
2539 a = new c(len);
2540 } else {
2541 a = new Array(len);
2542 }
2543 k = 0;
2544 while (k < len) {
2545 var kValue = arrayLike[k];
2546 if (mapping)
2547 mappedValue = mapfn.call(t, kValue, k);
2548 else
2549 mappedValue = kValue;
2550 a[k] = mappedValue;
2551 k += 1;
2552 }
2553 a.length = len;
2554 return a;
2555 });
2556
2557 // 22.1.2.2 Array.isArray ( arg )
2558
2559 // 22.1.2.3 Array.of ( ...items )
2560 define(
2561 Array, 'of',
2562 function of() {
2563 var items = arguments;
2564
2565 var lenValue = items.length;
2566 var len = ToUint32(lenValue);
2567 var c = strict(this), a;
2568 if (IsConstructor(c)) {
2569 a = new c(len);
2570 a = ToObject(a);
2571 } else {
2572 a = new Array(len);
2573 }
2574 var k = 0;
2575 while (k < len) {
2576 a[k] = items[k];
2577 k += 1;
2578 }
2579 a.length = len;
2580 return a;
2581 });
2582
2583 // 22.1.2.4 Array.prototype
2584 // 22.1.2.5 get Array [ @@species ]
2585 // 22.1.3 Properties of the Array Prototype Object
2586 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2587 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2588 // 22.1.3.2 Array.prototype.constructor
2589 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2590 define(
2591 Array.prototype, 'copyWithin',
2592 function copyWithin(target, start/*, end*/) {
2593 var end = arguments[2];
2594
2595 var o = ToObject(this);
2596 var lenVal = o.length;
2597 var len = ToLength(lenVal);
2598 len = max(len, 0);
2599 var relativeTarget = ToInteger(target);
2600 var to;
2601 if (relativeTarget < 0)
2602 to = max(len + relativeTarget, 0);
2603 else
2604 to = min(relativeTarget, len);
2605 var relativeStart = ToInteger(start);
2606 var from;
2607 if (relativeStart < 0)
2608 from = max(len + relativeStart, 0);
2609 else
2610 from = min(relativeStart, len);
2611 var relativeEnd;
2612 if (end === undefined)
2613 relativeEnd = len;
2614 else
2615 relativeEnd = ToInteger(end);
2616 var final;
2617 if (relativeEnd < 0)
2618 final = max(len + relativeEnd, 0);
2619 else
2620 final = min(relativeEnd, len);
2621 var count = min(final - from, len - to);
2622 var direction;
2623 if (from < to && to < from + count) {
2624 direction = -1;
2625 from = from + count - 1;
2626 to = to + count - 1;
2627 } else {
2628 direction = 1;
2629 }
2630 while (count > 0) {
2631 var fromKey = String(from);
2632 var toKey = String(to);
2633 var fromPresent = HasProperty(o, fromKey);
2634 if (fromPresent) {
2635 var fromVal = o[fromKey];
2636 o[toKey] = fromVal;
2637 } else {
2638 delete o[toKey];
2639 }
2640 from = from + direction;
2641 to = to + direction;
2642 count = count - 1;
2643 }
2644 return o;
2645 });
2646
2647 // 22.1.3.4 Array.prototype.entries ( )
2648 var nativeArrayIteratorMethods =
2649 ('entries' in Array.prototype && 'next' in [].entries());
2650
2651 define(
2652 Array.prototype, 'entries',
2653 function entries() {
2654 return CreateArrayIterator(this, 'key+value');
2655 }, !nativeArrayIteratorMethods);
2656
2657 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2658
2659 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2660 define(
2661 Array.prototype, 'fill',
2662 function fill(value/*, start, end*/) {
2663 var start = arguments[1],
2664 end = arguments[2];
2665
2666 var o = ToObject(this);
2667 var lenVal = o.length;
2668 var len = ToLength(lenVal);
2669 len = max(len, 0);
2670 var relativeStart = ToInteger(start);
2671 var k;
2672 if (relativeStart < 0)
2673 k = max((len + relativeStart), 0);
2674 else
2675 k = min(relativeStart, len);
2676 var relativeEnd;
2677 if (end === undefined)
2678 relativeEnd = len;
2679 else
2680 relativeEnd = ToInteger(end);
2681 var final;
2682 if (relativeEnd < 0)
2683 final = max((len + relativeEnd), 0);
2684 else
2685 final = min(relativeEnd, len);
2686 while (k < final) {
2687 var pk = String(k);
2688 o[pk] = value;
2689 k += 1;
2690 }
2691 return o;
2692 });
2693
2694 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2695
2696 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2697 define(
2698 Array.prototype, 'find',
2699 function find(predicate) {
2700 var o = ToObject(this);
2701 var lenValue = o.length;
2702 var len = ToInteger(lenValue);
2703 if (!IsCallable(predicate)) throw TypeError();
2704 var t = arguments.length > 1 ? arguments[1] : undefined;
2705 var k = 0;
2706 while (k < len) {
2707 var pk = String(k);
2708 var kPresent = HasProperty(o, pk);
2709 if (kPresent) {
2710 var kValue = o[pk];
2711 var testResult = predicate.call(t, kValue, k, o);
2712 if (Boolean(testResult)) {
2713 return kValue;
2714 }
2715 }
2716 ++k;
2717 }
2718 return undefined;
2719 });
2720
2721 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2722 define(
2723 Array.prototype, 'findIndex',
2724 function findIndex(predicate) {
2725 var o = ToObject(this);
2726 var lenValue = o.length;
2727 var len = ToLength(lenValue);
2728 if (!IsCallable(predicate)) throw TypeError();
2729 var t = arguments.length > 1 ? arguments[1] : undefined;
2730 var k = 0;
2731 while (k < len) {
2732 var pk = String(k);
2733 var kPresent = HasProperty(o, pk);
2734 if (kPresent) {
2735 var kValue = o[pk];
2736 var testResult = predicate.call(t, kValue, k, o);
2737 if (Boolean(testResult)) {
2738 return k;
2739 }
2740 }
2741 ++k;
2742 }
2743 return -1;
2744 });
2745
2746 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2747 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2748 // 22.1.3.12 Array.prototype.join (separator)
2749
2750 // 22.1.3.13 Array.prototype.keys ( )
2751 define(
2752 Array.prototype, 'keys',
2753 function keys() {
2754 return CreateArrayIterator(this, 'key');
2755 }, !nativeArrayIteratorMethods);
2756
2757 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2758 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2759 // 22.1.3.16 Array.prototype.pop ( )
2760 // 22.1.3.17 Array.prototype.push ( ...items )
2761 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2762 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2763 // 22.1.3.20 Array.prototype.reverse ( )
2764 // 22.1.3.21 Array.prototype.shift ( )
2765 // 22.1.3.22 Array.prototype.slice (start, end)
2766 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2767 // 22.1.3.24 Array.prototype.sort (comparefn)
2768 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2769 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2770 // 22.1.3.27 Array.prototype.toString ( )
2771 // 22.1.3.28 Array.prototype.unshift ( ...items )
2772
2773 // 22.1.3.29 Array.prototype.values ( )
2774 define(
2775 Array.prototype, 'values',
2776 function values() {
2777 return CreateArrayIterator(this, 'value');
2778 }, !nativeArrayIteratorMethods);
2779
2780 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2781 define(
2782 Array.prototype, $$iterator,
2783 Array.prototype.values
2784 );
2785
2786 // 22.1.3.31 Array.prototype [ @@unscopables ]
2787 // 22.1.4 Properties of Array Instances
2788 // 22.1.4.1 length
2789
2790 // 22.1.5 Array Iterator Objects
2791 function ArrayIterator() {}
2792
2793 // 22.1.5.1 CreateArrayIterator Abstract Operation
2794 function CreateArrayIterator(array, kind) {
2795 var o = ToObject(array);
2796 var iterator = new ArrayIterator;
2797 set_internal(iterator, '[[IteratedObject]]', o);
2798 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2799 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2800 return iterator;
2801 }
2802
2803 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2804 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2805 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2806
2807 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2808 define(
2809 $ArrayIteratorPrototype$, 'next',
2810 function next() {
2811 var o = strict(this);
2812 if (Type(o) !== 'object') throw TypeError();
2813 var a = o['[[IteratedObject]]'],
2814 index = o['[[ArrayIteratorNextIndex]]'],
2815 itemKind = o['[[ArrayIterationKind]]'],
2816 lenValue = a.length,
2817 len = ToUint32(lenValue),
2818 elementKey,
2819 elementValue;
2820 if (itemKind.indexOf('sparse') !== -1) {
2821 var found = false;
2822 while (!found && index < len) {
2823 elementKey = String(index);
2824 found = HasProperty(a, elementKey);
2825 if (!found) {
2826 index += 1;
2827 }
2828 }
2829 }
2830 if (index >= len) {
2831 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2832 return CreateIterResultObject(undefined, true);
2833 }
2834 elementKey = index;
2835 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2836 if (itemKind.indexOf('value') !== -1)
2837 elementValue = a[elementKey];
2838 if (itemKind.indexOf('key+value') !== -1)
2839 return CreateIterResultObject([elementKey, elementValue], false);
2840 if (itemKind.indexOf('key') !== -1)
2841 return CreateIterResultObject(elementKey, false);
2842 if (itemKind === 'value')
2843 return CreateIterResultObject(elementValue, false);
2844 throw Error('Internal error');
2845 });
2846
2847 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2848 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2849
2850 // 22.1.5.3 Properties of Array Iterator Instances
2851
2852
2853 // ---------------------------------------
2854 // 22.2 TypedArray Objects
2855 // ---------------------------------------
2856
2857 // See typedarray.js for TypedArray polyfill
2858
2859 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2860 'Int16Array', 'Uint16Array',
2861 'Int32Array', 'Uint32Array',
2862 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2863 if (!($TypedArrayName$ in global))
2864 return;
2865 var $TypedArray$ = global[$TypedArrayName$];
2866
2867 // 22.2.1 The %TypedArray% Intrinsic Object
2868 // 22.2.1.1 %TypedArray% ( length )
2869 // 22.2.1.2 %TypedArray% ( typedArray )
2870 // 22.2.1.3 %TypedArray% ( object )
2871 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2872 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2873 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2874
2875 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2876 define(
2877 $TypedArray$, 'from',
2878 function from(source) {
2879 var mapfn = arguments[1];
2880 var thisArg = arguments[2];
2881
2882 var c = strict(this);
2883 if (!IsConstructor(c)) throw TypeError();
2884 if (mapfn === undefined) {
2885 var mapping = false;
2886 } else {
2887 if (IsCallable(mapfn)) throw TypeError();
2888 var t = thisArg;
2889 mapping = true;
2890 }
2891 var usingIterator = GetMethod(source, $$iterator);
2892 if (usingIterator !== undefined) {
2893 var iterator = GetIterator(source, usingIterator);
2894 var values = [];
2895 var next = true;
2896 while (next !== false) {
2897 next = IteratorStep(iterator);
2898 if (next !== false) {
2899 var nextValue = IteratorValue(next);
2900 values.push(nextValue);
2901 }
2902 }
2903 var len = values.length;
2904 var newObj = new c(len);
2905 var k = 0;
2906 while (k < len) {
2907 var kValue = values.shift();
2908 if (mapping) {
2909 var mappedValue = mapfn.call(t, kValue);
2910 } else {
2911 mappedValue = kValue;
2912 }
2913 newObj[k] = mappedValue;
2914 ++k;
2915 }
2916 console.assert(values.length === 0);
2917 return newObj;
2918 }
2919 var arrayLike = ToObject(source);
2920 var lenValue = arrayLike.length;
2921 len = ToLength(lenValue);
2922 newObj = new c(len);
2923 k = 0;
2924 while (k < len) {
2925 kValue = arrayLike[k];
2926 if (mapping) {
2927 mappedValue = mapfn.call(t, kValue, k);
2928 } else {
2929 mappedValue = kValue;
2930 }
2931 newObj[k] = mappedValue;
2932 ++k;
2933 }
2934 return newObj;
2935 });
2936
2937 // 22.2.2.2 %TypedArray%.of ( ...items )
2938 define(
2939 $TypedArray$, 'of',
2940 function of() {
2941 var items = arguments;
2942
2943 var len = items.length;
2944 var c = strict(this);
2945 var newObj = new c(len);
2946 var k = 0;
2947 while (k < len) {
2948 newObj[k] = items[k];
2949 ++k;
2950 }
2951 return newObj;
2952 });
2953
2954 // 22.2.2.3 %TypedArray%.prototype
2955 // 22.2.2.4 get %TypedArray% [ @@species ]
2956 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2957 // 22.2.3.1 get %TypedArray%.prototype.buffer
2958 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2959 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2960 // 22.2.3.4 %TypedArray%.prototype.constructor
2961
2962 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2963 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2964
2965 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2966 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2967
2968 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2969 define($TypedArray$.prototype, 'every', Array.prototype.every);
2970
2971 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2972 define(
2973 $TypedArray$.prototype, 'fill',
2974 //Array.prototype.fill // Doesn't work in Safari 7
2975 function fill(value/*, start, end*/) {
2976 var start = arguments[1],
2977 end = arguments[2];
2978
2979 var o = ToObject(this);
2980 var lenVal = o.length;
2981 var len = ToLength(lenVal);
2982 len = max(len, 0);
2983 var relativeStart = ToInteger(start);
2984 var k;
2985 if (relativeStart < 0) k = max((len + relativeStart), 0);
2986 else k = min(relativeStart, len);
2987 var relativeEnd;
2988 if (end === undefined) relativeEnd = len;
2989 else relativeEnd = ToInteger(end);
2990 var final;
2991 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2992 else final = min(relativeEnd, len);
2993 while (k < final) {
2994 var pk = String(k);
2995 o[pk] = value;
2996 k += 1;
2997 }
2998 return o;
2999 });
3000
3001 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
3002 define(
3003 $TypedArray$.prototype, 'filter',
3004 function filter(callbackfn) {
3005 var thisArg = arguments[1];
3006
3007 var o = ToObject(this);
3008 var lenVal = o.length;
3009 var len = ToLength(lenVal);
3010 if (!IsCallable(callbackfn)) throw TypeError();
3011 var t = thisArg;
3012 var c = o.constructor;
3013 var kept = [];
3014 var k = 0;
3015 var captured = 0;
3016 while (k < len) {
3017 var kValue = o[k];
3018 var selected = callbackfn.call(t, kValue, k, o);
3019 if (selected) {
3020 kept.push(kValue);
3021 ++captured;
3022 }
3023 ++k;
3024 }
3025 var a = new c(captured);
3026 var n = 0;
3027 for (var i = 0; i < kept.length; ++i) {
3028 var e = kept[i];
3029 a[n] = e;
3030 ++n;
3031 }
3032 return a;
3033 });
3034
3035 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3036 define($TypedArray$.prototype, 'find', Array.prototype.find);
3037
3038 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3039 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3040
3041 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3042 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3043
3044 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3045 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3046
3047 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3048 define($TypedArray$.prototype, 'join', Array.prototype.join);
3049
3050 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3051 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3052
3053 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3054 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3055
3056 // 22.2.3.17 get %TypedArray%.prototype.length
3057
3058 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3059 define(
3060 $TypedArray$.prototype, 'map',
3061 function map(callbackfn) {
3062 var thisArg = arguments[1];
3063
3064 var o = ToObject(this);
3065 var lenValue = o.length;
3066 var len = ToLength(lenValue);
3067 if (!IsCallable(callbackfn)) throw TypeError();
3068 var t = thisArg;
3069 var a = undefined;
3070 var c = o.constructor;
3071 if (IsConstructor(c))
3072 a = new c(len);
3073 if (a === undefined)
3074 a = new Array(len);
3075 var k = 0;
3076 while (k < len) {
3077 var kPresent = HasProperty(o, k);
3078 if (kPresent) {
3079 var kValue = o[k];
3080 var mappedValue = callbackfn.call(t, kValue, k, o);
3081 a[k] = mappedValue;
3082 }
3083 ++k;
3084 }
3085 return a;
3086 });
3087
3088 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3089 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3090
3091 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3092 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3093
3094 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3095 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3096
3097 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3098 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3099 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3100
3101 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3102 define(
3103 $TypedArray$.prototype, 'slice',
3104 function slice(start, end) {
3105 var o = ToObject(this);
3106 var lenVal = o.length;
3107 var len = ToLength(lenVal);
3108 var relativeStart = ToInteger(start);
3109 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3110 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3111 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3112 var count = final - k;
3113 var c = o.constructor;
3114 if (IsConstructor(c)) {
3115 var a = new c(count);
3116 } else {
3117 throw TypeError();
3118 }
3119 var n = 0;
3120 while (k < final) {
3121 var kValue = o[k];
3122 a[n] = kValue;
3123 ++k;
3124 ++n;
3125 }
3126 return a;
3127 });
3128
3129 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3130 define($TypedArray$.prototype, 'some', Array.prototype.some);
3131
3132 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3133 define(
3134 $TypedArray$.prototype, 'sort',
3135 function sort() {
3136 var comparefn = arguments[0];
3137
3138 function sortCompare(x, y) {
3139 console.assert(Type(x) === 'number' && Type(y) === 'number');
3140 if (x !== x && y !== y) return +0;
3141 if (x !== x) return 1;
3142 if (y !== y) return -1;
3143 if (comparefn !== undefined) {
3144 return comparefn(x, y);
3145 }
3146 if (x < y) return -1;
3147 if (x > y) return 1;
3148 return +0;
3149 }
3150 return Array.prototype.sort.call(this, sortCompare);
3151 });
3152
3153 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3154 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3155 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3156
3157 // 22.2.3.29 %TypedArray%.prototype.values ( )
3158 define($TypedArray$.prototype, 'values', Array.prototype.values);
3159
3160 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3161 define(
3162 $TypedArray$.prototype, $$iterator,
3163 $TypedArray$.prototype.values
3164 );
3165
3166 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3167 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3168
3169 // 22.2.4 The TypedArray Constructors
3170 // 22.2.4.1TypedArray( ... argumentsList)
3171 // 22.2.5 Properties of the TypedArray Constructors
3172 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3173 // 22.2.5.2 TypedArray.prototype
3174 // 22.2.6 Properties of TypedArray Prototype Objects
3175 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3176 // 22.2.6.2 TypedArray.prototype.constructor
3177 // 22.2.7 Properties of TypedArray Instances
3178 });
3179
3180 // ---------------------------------------
3181 // 23 Keyed Collection
3182 // ---------------------------------------
3183
3184 // ---------------------------------------
3185 // 23.1 Map Objects
3186 // ---------------------------------------
3187
3188 (function() {
3189 // 23.1.1 The Map Constructor
3190
3191 // 23.1.1.1 Map ( [ iterable ] )
3192 /** @constructor */
3193 function Map(/*iterable*/) {
3194 var map = strict(this);
3195 var iterable = arguments[0];
3196
3197 if (Type(map) !== 'object') throw TypeError();
3198 if ('[[MapData]]' in map) throw TypeError();
3199
3200 if (iterable !== undefined) {
3201 var adder = map['set'];
3202 if (!IsCallable(adder)) throw TypeError();
3203 var iter = GetIterator(ToObject(iterable));
3204 }
3205 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3206 if (iter === undefined) return map;
3207 while (true) {
3208 var next = IteratorStep(iter);
3209 if (next === false)
3210 return map;
3211 var nextItem = IteratorValue(next);
3212 if (Type(nextItem) !== 'object') throw TypeError();
3213 var k = nextItem[0];
3214 var v = nextItem[1];
3215 adder.call(map, k, v);
3216 }
3217
3218 return map;
3219 }
3220
3221 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3222 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3223 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3224 (new global.Map([['a', 1]]).size !== 1))
3225 global.Map = Map;
3226
3227
3228 function MapDataIndexOf(mapData, key) {
3229 var i;
3230 if (key === key) return mapData.keys.indexOf(key);
3231 // Slow case for NaN
3232 for (i = 0; i < mapData.keys.length; i += 1)
3233 if (SameValueZero(mapData.keys[i], key)) return i;
3234 return -1;
3235 }
3236
3237 // 23.1.1.2 new Map ( ... argumentsList )
3238 // 23.1.2 Properties of the Map Constructor
3239 // 23.1.2.1 Map.prototype
3240 var $MapPrototype$ = {};
3241 Map.prototype = $MapPrototype$;
3242
3243 // 23.1.2.2 get Map [ @@species ]
3244
3245 // 23.1.3 Properties of the Map Prototype Object
3246 // 23.1.3.1 Map.prototype.clear ()
3247 define(
3248 Map.prototype, 'clear',
3249 function clear() {
3250 var m = strict(this);
3251 if (Type(m) !== 'object') throw TypeError();
3252 if (!('[[MapData]]' in m)) throw TypeError();
3253 if (m['[[MapData]]'] === undefined) throw TypeError();
3254 var entries = m['[[MapData]]'];
3255 entries.keys.length = 0;
3256 entries.values.length = 0;
3257 return undefined;
3258 });
3259
3260 // 23.1.3.2 Map.prototype.constructor
3261
3262 // 23.1.3.3 Map.prototype.delete ( key )
3263 define(
3264 Map.prototype, 'delete',
3265 function delete_(key) {
3266 var m = strict(this);
3267 if (Type(m) !== 'object') throw TypeError();
3268 if (!('[[MapData]]' in m)) throw TypeError();
3269 if (m['[[MapData]]'] === undefined) throw TypeError();
3270 var entries = m['[[MapData]]'];
3271 var i = MapDataIndexOf(entries, key);
3272 if (i < 0) return false;
3273 entries.keys[i] = empty;
3274 entries.values[i] = empty;
3275 return true;
3276 });
3277
3278 // 23.1.3.4 Map.prototype.entries ( )
3279 define(
3280 Map.prototype, 'entries',
3281 function entries() {
3282 var m = strict(this);
3283 if (Type(m) !== 'object') throw TypeError();
3284 return CreateMapIterator(m, 'key+value');
3285 });
3286
3287 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3288 define(
3289 Map.prototype, 'forEach',
3290 function forEach(callbackfn /*, thisArg*/) {
3291 var thisArg = arguments[1];
3292
3293 var m = strict(this);
3294 if (Type(m) !== 'object') throw TypeError();
3295 if (!('[[MapData]]' in m)) throw TypeError();
3296 if (m['[[MapData]]'] === undefined) throw TypeError();
3297 var entries = m['[[MapData]]'];
3298
3299 if (!IsCallable(callbackfn)) {
3300 throw TypeError('First argument to forEach is not callable.');
3301 }
3302 for (var i = 0; i < entries.keys.length; ++i) {
3303 if (entries.keys[i] !== empty) {
3304 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3305 }
3306 }
3307 return undefined;
3308 });
3309
3310 // 23.1.3.6 Map.prototype.get ( key )
3311 define(
3312 Map.prototype, 'get',
3313 function get(key) {
3314 var m = strict(this);
3315 if (Type(m) !== 'object') throw TypeError();
3316 if (!('[[MapData]]' in m)) throw TypeError();
3317 if (m['[[MapData]]'] === undefined) throw TypeError();
3318 var entries = m['[[MapData]]'];
3319 var i = MapDataIndexOf(entries, key);
3320 if (i >= 0) return entries.values[i];
3321 return undefined;
3322 });
3323
3324 // 23.1.3.7 Map.prototype.has ( key )
3325 define(
3326 Map.prototype, 'has',
3327 function has(key) {
3328 var m = strict(this);
3329 if (Type(m) !== 'object') throw TypeError();
3330 if (!('[[MapData]]' in m)) throw TypeError();
3331 if (m['[[MapData]]'] === undefined) throw TypeError();
3332 var entries = m['[[MapData]]'];
3333 if (MapDataIndexOf(entries, key) >= 0) return true;
3334 return false;
3335 });
3336
3337 // 23.1.3.8 Map.prototype.keys ( )
3338 define(
3339 Map.prototype, 'keys',
3340 function keys() {
3341 var m = strict(this);
3342 if (Type(m) !== 'object') throw TypeError();
3343 return CreateMapIterator(m, 'key');
3344 });
3345
3346 // 23.1.3.9 Map.prototype.set ( key , value )
3347 define(
3348 Map.prototype, 'set',
3349 function set(key, value) {
3350 var m = strict(this);
3351 if (Type(m) !== 'object') throw TypeError();
3352 if (!('[[MapData]]' in m)) throw TypeError();
3353 if (m['[[MapData]]'] === undefined) throw TypeError();
3354 var entries = m['[[MapData]]'];
3355 var i = MapDataIndexOf(entries, key);
3356 if (i < 0) i = entries.keys.length;
3357 if (SameValue(key, -0)) key = 0;
3358 entries.keys[i] = key;
3359 entries.values[i] = value;
3360 return m;
3361 });
3362
3363 // 23.1.3.10 get Map.prototype.size
3364 Object.defineProperty(
3365 Map.prototype, 'size', {
3366 get: function() {
3367 var m = strict(this);
3368 if (Type(m) !== 'object') throw TypeError();
3369 if (!('[[MapData]]' in m)) throw TypeError();
3370 if (m['[[MapData]]'] === undefined) throw TypeError();
3371 var entries = m['[[MapData]]'];
3372 var count = 0;
3373 for (var i = 0; i < entries.keys.length; ++i) {
3374 if (entries.keys[i] !== empty)
3375 count = count + 1;
3376 }
3377 return count;
3378 }
3379 });
3380
3381 // 23.1.3.11 Map.prototype.values ( )
3382 define(
3383 Map.prototype, 'values',
3384 function values() {
3385 var m = strict(this);
3386 if (Type(m) !== 'object') throw TypeError();
3387 return CreateMapIterator(m, 'value');
3388 });
3389
3390 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3391 define(
3392 Map.prototype, $$iterator,
3393 function() {
3394 var m = strict(this);
3395 if (Type(m) !== 'object') throw TypeError();
3396 return CreateMapIterator(m, 'key+value');
3397 });
3398
3399 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3400 define(global.Map.prototype, $$toStringTag, 'Map');
3401
3402 // 23.1.4 Properties of Map Instances
3403 // 23.1.5 Map Iterator Objects
3404
3405 /** @constructor */
3406 function MapIterator() {}
3407
3408 // 23.1.5.1 CreateMapIterator Abstract Operation
3409 function CreateMapIterator(map, kind) {
3410 if (Type(map) !== 'object') throw TypeError();
3411 if (!('[[MapData]]' in map)) throw TypeError();
3412 if (map['[[MapData]]'] === undefined) throw TypeError();
3413 var iterator = new MapIterator;
3414 set_internal(iterator, '[[Map]]', map);
3415 set_internal(iterator, '[[MapNextIndex]]', 0);
3416 set_internal(iterator, '[[MapIterationKind]]', kind);
3417 return iterator;
3418 }
3419
3420 // 23.1.5.2 The %MapIteratorPrototype% Object
3421 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3422 MapIterator.prototype = $MapIteratorPrototype$;
3423
3424 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3425 define(
3426 $MapIteratorPrototype$, 'next',
3427 function next() {
3428 var o = strict(this);
3429 if (Type(o) !== 'object') throw TypeError();
3430 var m = o['[[Map]]'],
3431 index = o['[[MapNextIndex]]'],
3432 itemKind = o['[[MapIterationKind]]'],
3433 entries = m['[[MapData]]'];
3434 while (index < entries.keys.length) {
3435 var e = {key: entries.keys[index], value: entries.values[index]};
3436 index = index += 1;
3437 set_internal(o, '[[MapNextIndex]]', index);
3438 if (e.key !== empty) {
3439 if (itemKind === 'key') {
3440 return CreateIterResultObject(e.key, false);
3441 } else if (itemKind === 'value') {
3442 return CreateIterResultObject(e.value, false);
3443 } else {
3444 return CreateIterResultObject([e.key, e.value], false);
3445 }
3446 }
3447 }
3448 return CreateIterResultObject(undefined, true);
3449 });
3450
3451 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3452 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3453
3454 // 23.1.5.3 Properties of Map Iterator Instances
3455 }());
3456
3457 // ---------------------------------------
3458 // 23.2 Set Objects
3459 // ---------------------------------------
3460
3461 (function() {
3462 // 23.2.1 The Set Constructor
3463 // 23.2.1.1 Set ( [ iterable ] )
3464
3465 /** @constructor */
3466 function Set(/*iterable*/) {
3467 var set = strict(this);
3468 var iterable = arguments[0];
3469
3470 if (Type(set) !== 'object') throw TypeError();
3471 if ('[[SetData]]' in set) throw TypeError();
3472
3473 if (iterable !== undefined) {
3474 var adder = set['add'];
3475 if (!IsCallable(adder)) throw TypeError();
3476 var iter = GetIterator(ToObject(iterable));
3477 }
3478 set_internal(set, '[[SetData]]', []);
3479 if (iter === undefined) return set;
3480 while (true) {
3481 var next = IteratorStep(iter);
3482 if (next === false)
3483 return set;
3484 var nextValue = IteratorValue(next);
3485 adder.call(set, nextValue);
3486 }
3487
3488 return set;
3489 }
3490
3491 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3492 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3493 (new global.Set([1]).size !== 1))
3494 global.Set = Set;
3495
3496 function SetDataIndexOf(setData, key) {
3497 var i;
3498 if (key === key)
3499 return setData.indexOf(key);
3500 // Slow case for NaN
3501 for (i = 0; i < setData.length; i += 1)
3502 if (SameValueZero(setData[i], key)) return i;
3503 return -1;
3504 }
3505
3506 // 23.2.1.2 new Set ( ...argumentsList )
3507 // 23.2.2 Properties of the Set Constructor
3508
3509 // 23.2.2.1 Set.prototype
3510 var $SetPrototype$ = {};
3511 Set.prototype = $SetPrototype$;
3512
3513 // 23.2.2.2 get Set [ @@species ]
3514 // 23.2.3 Properties of the Set Prototype Object
3515
3516 // 23.2.3.1 Set.prototype.add (value )
3517 define(
3518 Set.prototype, 'add',
3519 function add(value) {
3520 var s = strict(this);
3521 if (Type(s) !== 'object') throw TypeError();
3522 if (!('[[SetData]]' in s)) throw TypeError();
3523 if (s['[[SetData]]'] === undefined) throw TypeError();
3524 if (SameValue(value, -0)) value = 0;
3525 var entries = s['[[SetData]]'];
3526 var i = SetDataIndexOf(entries, value);
3527 if (i < 0) i = s['[[SetData]]'].length;
3528 s['[[SetData]]'][i] = value;
3529
3530 return s;
3531 });
3532
3533 // 23.2.3.2 Set.prototype.clear ()
3534 define(
3535 Set.prototype, 'clear',
3536 function clear() {
3537 var s = strict(this);
3538 if (Type(s) !== 'object') throw TypeError();
3539 if (!('[[SetData]]' in s)) throw TypeError();
3540 if (s['[[SetData]]'] === undefined) throw TypeError();
3541 var entries = s['[[SetData]]'];
3542 entries.length = 0;
3543 return undefined;
3544 });
3545
3546 // 23.2.3.3 Set.prototype.constructor
3547 // 23.2.3.4 Set.prototype.delete ( value )
3548 define(
3549 Set.prototype, 'delete',
3550 function delete_(value) {
3551 var s = strict(this);
3552 if (Type(s) !== 'object') throw TypeError();
3553 if (!('[[SetData]]' in s)) throw TypeError();
3554 if (s['[[SetData]]'] === undefined) throw TypeError();
3555 var entries = s['[[SetData]]'];
3556 var i = SetDataIndexOf(entries, value);
3557 if (i < 0) return false;
3558 entries[i] = empty;
3559 return true;
3560 });
3561
3562 // 23.2.3.5 Set.prototype.entries ( )
3563 define(
3564 Set.prototype, 'entries',
3565 function entries() {
3566 var s = strict(this);
3567 if (Type(s) !== 'object') throw TypeError();
3568 return CreateSetIterator(s, 'key+value');
3569 });
3570
3571 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3572 define(
3573 Set.prototype, 'forEach',
3574 function forEach(callbackfn/*, thisArg*/) {
3575 var thisArg = arguments[1];
3576
3577 var s = strict(this);
3578 if (Type(s) !== 'object') throw TypeError();
3579 if (!('[[SetData]]' in s)) throw TypeError();
3580 if (s['[[SetData]]'] === undefined) throw TypeError();
3581 var entries = s['[[SetData]]'];
3582
3583 if (!IsCallable(callbackfn)) {
3584 throw TypeError('First argument to forEach is not callable.');
3585 }
3586 for (var i = 0; i < entries.length; ++i) {
3587 if (entries[i] !== empty) {
3588 callbackfn.call(thisArg, entries[i], entries[i], s);
3589 }
3590 }
3591 });
3592
3593 // 23.2.3.7 Set.prototype.has ( value )
3594 define(
3595 Set.prototype, 'has',
3596 function has(key) {
3597 var s = strict(this);
3598 if (Type(s) !== 'object') throw TypeError();
3599 if (!('[[SetData]]' in s)) throw TypeError();
3600 if (s['[[SetData]]'] === undefined) throw TypeError();
3601 var entries = s['[[SetData]]'];
3602 return SetDataIndexOf(entries, key) !== -1;
3603 });
3604
3605 // 23.2.3.8 Set.prototype.keys ( )
3606 // See Set.prototype.values
3607
3608 // 23.2.3.9 get Set.prototype.size
3609 Object.defineProperty(
3610 Set.prototype, 'size', {
3611 get: function() {
3612 var s = strict(this);
3613 if (Type(s) !== 'object') throw TypeError();
3614 if (!('[[SetData]]' in s)) throw TypeError();
3615 if (s['[[SetData]]'] === undefined) throw TypeError();
3616 var entries = s['[[SetData]]'];
3617 var count = 0;
3618 for (var i = 0; i < entries.length; ++i) {
3619 if (entries[i] !== empty)
3620 count = count + 1;
3621 }
3622 return count;
3623 }
3624 });
3625
3626 // 23.2.3.10 Set.prototype.values ( )
3627 define(
3628 Set.prototype, 'values',
3629 function values() {
3630 var s = strict(this);
3631 if (Type(s) !== 'object') throw TypeError();
3632 return CreateSetIterator(s, 'value');
3633 });
3634 // NOTE: function name is still 'values':
3635 Set.prototype.keys = Set.prototype.values;
3636
3637 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3638 define(
3639 Set.prototype, $$iterator,
3640 function() {
3641 var s = strict(this);
3642 if (Type(s) !== 'object') throw TypeError();
3643 return CreateSetIterator(s);
3644 });
3645
3646 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3647 define(global.Set.prototype, $$toStringTag, 'Set');
3648
3649 // 23.2.4 Properties of Set Instances
3650 // 23.2.5 Set Iterator Objects
3651 /** @constructor */
3652 function SetIterator() {}
3653
3654 // 23.2.5.1 CreateSetIterator Abstract Operation
3655 function CreateSetIterator(set, kind) {
3656 if (Type(set) !== 'object') throw TypeError();
3657 if (!('[[SetData]]' in set)) throw TypeError();
3658 if (set['[[SetData]]'] === undefined) throw TypeError();
3659 var iterator = new SetIterator;
3660 set_internal(iterator, '[[IteratedSet]]', set);
3661 set_internal(iterator, '[[SetNextIndex]]', 0);
3662 set_internal(iterator, '[[SetIterationKind]]', kind);
3663 return iterator;
3664 }
3665
3666 // 23.2.5.2 The %SetIteratorPrototype% Object
3667 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3668 SetIterator.prototype = $SetIteratorPrototype$;
3669
3670 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3671 define(
3672 $SetIteratorPrototype$, 'next',
3673 function next() {
3674 var o = strict(this);
3675 if (Type(o) !== 'object') throw TypeError();
3676 var s = o['[[IteratedSet]]'],
3677 index = o['[[SetNextIndex]]'],
3678 itemKind = o['[[SetIterationKind]]'],
3679 entries = s['[[SetData]]'];
3680 while (index < entries.length) {
3681 var e = entries[index];
3682 index = index += 1;
3683 set_internal(o, '[[SetNextIndex]]', index);
3684 if (e !== empty) {
3685 if (itemKind === 'key+value')
3686 return CreateIterResultObject([e, e], false);
3687 return CreateIterResultObject(e, false);
3688 }
3689 }
3690 return CreateIterResultObject(undefined, true);
3691 });
3692
3693 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3694 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3695
3696 // 23.2.5.3 Properties of Set Iterator Instances
3697
3698 }());
3699
3700 // ---------------------------------------
3701 // 23.3 WeakMap Objects
3702 // ---------------------------------------
3703
3704 (function() {
3705 // 23.3.1 The WeakMap Constructor
3706 // 23.3.1.1 WeakMap ( [ iterable ] )
3707 /** @constructor */
3708 function WeakMap(/*iterable*/) {
3709 var map = strict(this);
3710 var iterable = arguments[0];
3711
3712 if (Type(map) !== 'object') throw TypeError();
3713 if ('[[WeakMapData]]' in map) throw TypeError();
3714
3715 if (iterable !== undefined) {
3716 var adder = map['set'];
3717 if (!IsCallable(adder)) throw TypeError();
3718 var iter = GetIterator(ToObject(iterable));
3719 }
3720 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3721 if (iter === undefined) return map;
3722 while (true) {
3723 var next = IteratorStep(iter);
3724 if (next === false)
3725 return map;
3726 var nextValue = IteratorValue(next);
3727 if (Type(nextValue) !== 'object') throw TypeError();
3728 var k = nextValue[0];
3729 var v = nextValue[1];
3730 adder.call(map, k, v);
3731 }
3732
3733 return map;
3734 }
3735
3736 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3737 global.WeakMap = WeakMap;
3738
3739 // 23.3.2 Properties of the WeakMap Constructor
3740 // 23.3.2.1 WeakMap.prototype
3741 var $WeakMapPrototype$ = {};
3742 WeakMap.prototype = $WeakMapPrototype$;
3743
3744
3745
3746 // 23.3.2.2 WeakMap[ @@create ] ( )
3747 // 23.3.3 Properties of the WeakMap Prototype Object
3748
3749 // 23.3.3.1 WeakMap.prototype.constructor
3750
3751 // 23.3.3.2 WeakMap.prototype.delete ( key )
3752 define(
3753 WeakMap.prototype, 'delete',
3754 function delete_(key) {
3755 var M = strict(this);
3756 if (Type(M) !== 'object') throw TypeError();
3757 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3758 if (Type(key) !== 'object') throw TypeError('Expected object');
3759 return M['[[WeakMapData]]'].remove(key);
3760 });
3761
3762 // 23.3.3.3 WeakMap.prototype.get ( key )
3763 define(
3764 WeakMap.prototype, 'get',
3765 function get(key, defaultValue) {
3766 var M = strict(this);
3767 if (Type(M) !== 'object') throw TypeError();
3768 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3769 if (Type(key) !== 'object') throw TypeError('Expected object');
3770 return M['[[WeakMapData]]'].get(key, defaultValue);
3771 });
3772
3773 // 23.3.3.4 WeakMap.prototype.has ( key )
3774 define(
3775 WeakMap.prototype, 'has',
3776 function has(key) {
3777 var M = strict(this);
3778 if (Type(M) !== 'object') throw TypeError();
3779 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3780 if (Type(key) !== 'object') throw TypeError('Expected object');
3781 return M['[[WeakMapData]]'].has(key);
3782 });
3783
3784 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3785 define(
3786 WeakMap.prototype, 'set',
3787 function set(key, value) {
3788 var M = strict(this);
3789 if (Type(M) !== 'object') throw TypeError();
3790 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3791 if (Type(key) !== 'object') throw TypeError('Expected object');
3792 M['[[WeakMapData]]'].set(key, value);
3793 return M;
3794 });
3795
3796 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3797 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3798
3799 // 23.3.4 Properties of WeakMap Instances
3800
3801 // Polyfills for incomplete native implementations:
3802 (function() {
3803 var wm = new global.WeakMap();
3804 var orig = global.WeakMap.prototype.set;
3805 define(global.WeakMap.prototype, 'set', function set() {
3806 orig.apply(this, arguments);
3807 return this;
3808 }, wm.set({}, 0) !== wm);
3809 }());
3810 }());
3811
3812 // ---------------------------------------
3813 // 23.4 WeakSet Objects
3814 // ---------------------------------------
3815
3816 (function() {
3817 // 23.4.1 The WeakSet Constructor
3818 // 23.4.1.1 WeakSet ( [ iterable ] )
3819 /** @constructor */
3820 function WeakSet(/*iterable*/) {
3821 var set = strict(this);
3822 var iterable = arguments[0];
3823
3824 if (Type(set) !== 'object') throw TypeError();
3825 if ('[[WeakSetData]]' in set) throw TypeError();
3826
3827 if (iterable !== undefined) {
3828 var adder = set['add'];
3829 if (!IsCallable(adder)) throw TypeError();
3830 var iter = GetIterator(ToObject(iterable));
3831 }
3832 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3833 if (iter === undefined) return set;
3834 while (true) {
3835 var next = IteratorStep(iter);
3836 if (next === false)
3837 return set;
3838 var nextValue = IteratorValue(next);
3839 adder.call(set, nextValue);
3840 }
3841
3842 return set;
3843 }
3844
3845 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3846 global.WeakSet = WeakSet;
3847
3848 // 23.4.2 Properties of the WeakSet Constructor
3849 // 23.4.2.1 WeakSet.prototype
3850 var $WeakSetPrototype$ = {};
3851 WeakSet.prototype = $WeakSetPrototype$;
3852
3853 // 23.4.3 Properties of the WeakSet Prototype Object
3854 // 23.4.3.1 WeakSet.prototype.add (value )
3855 define(
3856 WeakSet.prototype, 'add',
3857 function add(value) {
3858 var S = strict(this);
3859 if (Type(S) !== 'object') throw TypeError();
3860 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3861 if (Type(value) !== 'object') throw TypeError('Expected object');
3862 S['[[WeakSetData]]'].set(value, true);
3863 return S;
3864 });
3865
3866 // 23.4.3.2 WeakSet.prototype.constructor
3867 // 23.4.3.3 WeakSet.prototype.delete ( value )
3868 define(
3869 WeakSet.prototype, 'delete',
3870 function delete_(value) {
3871 var S = strict(this);
3872 if (Type(S) !== 'object') throw TypeError();
3873 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3874 if (Type(value) !== 'object') throw TypeError('Expected object');
3875 return S['[[WeakSetData]]'].remove(value);
3876 });
3877
3878 // 23.4.3.4 WeakSet.prototype.has ( value )
3879 define(
3880 WeakSet.prototype, 'has',
3881 function has(key) {
3882 var S = strict(this);
3883 if (Type(S) !== 'object') throw TypeError();
3884 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3885 if (Type(key) !== 'object') throw TypeError('Expected object');
3886 return S['[[WeakSetData]]'].has(key);
3887 });
3888
3889 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3890 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3891
3892 // 23.4.4 Properties of WeakSet Instances
3893
3894 // Polyfills for incomplete native implementations:
3895 (function() {
3896 var ws = new global.WeakSet();
3897 var orig = global.WeakSet.prototype.add;
3898 define(global.WeakSet.prototype, 'add', function add() {
3899 orig.apply(this, arguments);
3900 return this;
3901 }, ws.add({}) !== ws);
3902 }());
3903 }());
3904
3905 // ---------------------------------------
3906 // 24 Structured Data
3907 // ---------------------------------------
3908
3909 // ---------------------------------------
3910 // 24.1 ArrayBuffer Objects
3911 // ---------------------------------------
3912
3913 // See typedarray.js for TypedArray polyfill
3914
3915 (function() {
3916 if (!('ArrayBuffer' in global))
3917 return;
3918
3919 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3920 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3921 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3922 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3923 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3924 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3925 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3926 // 24.1.2 The ArrayBuffer Constructor
3927 // 24.1.2.1 ArrayBuffer( length )
3928 // 24.1.3 Properties of the ArrayBuffer Constructor
3929
3930 // 24.1.3.1 ArrayBuffer.isView ( arg )
3931 define(
3932 ArrayBuffer, 'isView',
3933 function isView(arg) {
3934 if (Type(arg) !== 'object') return false;
3935 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3936 return false;
3937 });
3938
3939 // 24.1.3.2 ArrayBuffer.prototype
3940 // 24.1.3.3 get ArrayBuffer [ @@species ]
3941 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3942 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3943 // 24.1.4.2 ArrayBuffer.prototype.constructor
3944 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3945
3946 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3947 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3948
3949 // 24.1.5 Properties of the ArrayBuffer Instances
3950 }());
3951
3952 // ---------------------------------------
3953 // 24.2 DataView Objects
3954 // ---------------------------------------
3955
3956 // See typedarray.js for TypedArray polyfill
3957
3958 (function() {
3959 if (!('DataView' in global))
3960 return;
3961
3962 // 24.2.1 Abstract Operations For DataView Objects
3963 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3964 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3965 // 24.2.2 The DataView Constructor
3966 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3967 // 24.2.3 Properties of the DataView Constructor
3968 // 24.2.3.1 DataView.prototype
3969 // 24.2.4 Properties of the DataView Prototype Object
3970 // 24.2.4.1 get DataView.prototype.buffer
3971 // 24.2.4.2 get DataView.prototype.byteLength
3972 // 24.2.4.3 get DataView.prototype.byteOffset
3973 // 24.2.4.4 DataView.prototype.constructor
3974 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3975 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3976 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3977 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3978 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3979 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3980 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3981 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3982 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3983 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3984 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3985 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3986 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3987 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3988 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3989 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3990
3991 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3992 define(DataView.prototype, $$toStringTag, 'DataView');
3993
3994 // 24.2.5 Properties of DataView Instances
3995 }());
3996
3997 // ---------------------------------------
3998 // 24.3 The JSON Object
3999 // ---------------------------------------
4000
4001 // 24.3.1 JSON.parse ( text [ , reviver ] )
4002 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
4003 // 24.3.3 JSON [ @@toStringTag ]
4004 define(JSON, $$toStringTag, 'JSON');
4005
4006 // ---------------------------------------
4007 // 25.1 Iteration
4008 // ---------------------------------------
4009
4010 // 25.1.1 Common Iteration Interfaces
4011 // 25.1.1.1 The Iterable Interface
4012 // 25.1.1.2 The Iterator Interface
4013 // 25.1.1.3 The IteratorResult Interface
4014
4015 // 25.1.2 The %IteratorPrototype% Object
4016 // Defined earlier, so other prototypes can reference it.
4017 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
4018 define($IteratorPrototype$, $$iterator, function() {
4019 return this;
4020 });
4021
4022
4023 // ---------------------------------------
4024 // 25.4 Promise Objects
4025 // ---------------------------------------
4026
4027 (function() {
4028 // 25.4 Promise Objects
4029
4030 // 25.4.1 Promise Abstract Operations
4031
4032 // 25.4.1.1 PromiseCapability Records
4033 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4034
4035 function IfAbruptRejectPromise(value, capability) {
4036 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4037 return capability['[[Promise]]'];
4038 }
4039
4040 // 25.4.1.2 PromiseReaction Records
4041
4042 // 25.4.1.3 CreateResolvingFunctions ( promise )
4043
4044 function CreateResolvingFunctions(promise) {
4045 var alreadyResolved = {'[[value]]': false};
4046 var resolve = PromiseResolveFunction();
4047 set_internal(resolve, '[[Promise]]', promise);
4048 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4049 var reject = PromiseRejectFunction();
4050 set_internal(reject, '[[Promise]]', promise);
4051 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4052 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4053 }
4054
4055 // 25.4.1.3.1 Promise Reject Functions
4056
4057 function PromiseRejectFunction() {
4058 var F = function(reason) {
4059 console.assert(Type(F['[[Promise]]']) === 'object');
4060 var promise = F['[[Promise]]'];
4061 var alreadyResolved = F['[[AlreadyResolved]]'];
4062 if (alreadyResolved['[[value]]']) return undefined;
4063 set_internal(alreadyResolved, '[[value]]', true);
4064 return RejectPromise(promise, reason);
4065 };
4066 return F;
4067 }
4068
4069 // 25.4.1.3.2 Promise Resolve Functions
4070
4071 function PromiseResolveFunction() {
4072 var F = function(resolution) {
4073 console.assert(Type(F['[[Promise]]']) === 'object');
4074 var promise = F['[[Promise]]'];
4075 var alreadyResolved = F['[[AlreadyResolved]]'];
4076 if (alreadyResolved['[[value]]']) return undefined;
4077 set_internal(alreadyResolved, '[[value]]', true);
4078
4079 if (SameValue(resolution, promise)) {
4080 var selfResolutionError = TypeError();
4081 return RejectPromise(promise, selfResolutionError);
4082 }
4083 if (Type(resolution) !== 'object')
4084 return FulfillPromise(promise, resolution);
4085 try {
4086 var then = resolution['then'];
4087 } catch(then) {
4088 return RejectPromise(promise, then);
4089 }
4090 if (!IsCallable(then))
4091 return FulfillPromise(promise, resolution);
4092 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4093 return undefined;
4094 };
4095 return F;
4096 }
4097
4098 // 25.4.1.4 FulfillPromise ( promise, value )
4099
4100 function FulfillPromise(promise, value) {
4101 console.assert(promise['[[PromiseState]]'] === 'pending');
4102 var reactions = promise['[[PromiseFulfillReactions]]'];
4103 set_internal(promise, '[[PromiseResult]]', value);
4104 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4105 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4106 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4107 return TriggerPromiseReactions(reactions, value);
4108 }
4109
4110 // 25.4.1.5 NewPromiseCapability ( C )
4111
4112 function NewPromiseCapability(c) {
4113 // To keep Promise hermetic, this doesn't look much like the spec.
4114 return CreatePromiseCapabilityRecord(undefined, c);
4115 }
4116
4117 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4118
4119 function CreatePromiseCapabilityRecord(promise, constructor) {
4120 // To keep Promise hermetic, this doesn't look much like the spec.
4121 console.assert(IsConstructor(constructor));
4122 var promiseCapability = {};
4123 set_internal(promiseCapability, '[[Promise]]', promise);
4124 set_internal(promiseCapability, '[[Resolve]]', undefined);
4125 set_internal(promiseCapability, '[[Reject]]', undefined);
4126 var executor = GetCapabilitiesExecutor();
4127 set_internal(executor, '[[Capability]]', promiseCapability);
4128
4129 // NOTE: Differs from spec; object is constructed here
4130 var constructorResult = promise = new constructor(executor);
4131 set_internal(promiseCapability, '[[Promise]]', promise);
4132
4133 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4134 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4135 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4136 return promiseCapability;
4137 }
4138
4139 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4140
4141 function GetCapabilitiesExecutor() {
4142 var F = function(resolve, reject) {
4143 console.assert(F['[[Capability]]']);
4144 var promiseCapability = F['[[Capability]]'];
4145 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4146 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4147 set_internal(promiseCapability, '[[Resolve]]', resolve);
4148 set_internal(promiseCapability, '[[Reject]]', reject);
4149 return undefined;
4150 };
4151 return F;
4152 }
4153
4154 // 25.4.1.6 IsPromise ( x )
4155
4156 function IsPromise(x) {
4157 if (Type(x) !== 'object') return false;
4158 if (!('[[PromiseState]]' in x)) return false;
4159 if (x['[[PromiseState]]'] === undefined) return false;
4160 return true;
4161 }
4162
4163 // 25.4.1.7 RejectPromise ( promise, reason )
4164
4165 function RejectPromise(promise, reason) {
4166 console.assert(promise['[[PromiseState]]'] === 'pending');
4167 var reactions = promise['[[PromiseRejectReactions]]'];
4168 set_internal(promise, '[[PromiseResult]]', reason);
4169 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4170 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4171 set_internal(promise, '[[PromiseState]]', 'rejected');
4172 return TriggerPromiseReactions(reactions, reason);
4173 }
4174
4175 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4176
4177 function TriggerPromiseReactions(reactions, argument) {
4178 for (var i = 0, len = reactions.length; i < len; ++i)
4179 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4180 return undefined;
4181 }
4182
4183 // 25.4.2 Promise Jobs
4184
4185 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4186
4187 function PromiseReactionJob(reaction, argument) {
4188 var promiseCapability = reaction['[[Capabilities]]'];
4189 var handler = reaction['[[Handler]]'];
4190 var handlerResult, status;
4191 try {
4192 if (handler === 'Identity') handlerResult = argument;
4193 else if (handler === 'Thrower') throw argument;
4194 else handlerResult = handler.call(undefined, argument);
4195 } catch (handlerResult) {
4196 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4197 NextJob(status); return;
4198 }
4199 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4200 NextJob(status);
4201 }
4202
4203 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4204
4205 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4206 // SPEC BUG: promise vs. promiseToResolve
4207 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4208 try {
4209 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4210 resolvingFunctions['[[Reject]]']);
4211 } catch (thenCallResult) {
4212 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4213 NextJob(status); return;
4214 }
4215 NextJob(thenCallResult);
4216 }
4217
4218 // 25.4.3 The Promise Constructor
4219
4220 // 25.4.3.1 Promise ( executor )
4221
4222 function Promise(executor) {
4223 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4224 Object.defineProperty(this, '[[PromiseState]]', config);
4225 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4226 Object.defineProperty(this, '[[PromiseResult]]', config);
4227 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4228 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4229
4230 var promise = this;
4231 if (Type(promise) !== 'object') throw new TypeError();
4232 if (!('[[PromiseState]]' in promise)) throw TypeError();
4233 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4234 if (!IsCallable(executor)) throw TypeError();
4235
4236 set_internal(promise, '[[PromiseConstructor]]', Promise);
4237
4238 return InitializePromise(promise, executor);
4239 }
4240
4241 // 25.4.3.1.1 InitializePromise ( promise, executor )
4242
4243 function InitializePromise(promise, executor) {
4244 console.assert('[[PromiseState]]' in promise);
4245 console.assert(IsCallable(executor));
4246 set_internal(promise, '[[PromiseState]]', 'pending');
4247 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4248 set_internal(promise, '[[PromiseRejectReactions]]', []);
4249 var resolvingFunctions = CreateResolvingFunctions(promise);
4250 try {
4251 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4252 resolvingFunctions['[[Reject]]']);
4253 } catch (completion) {
4254 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4255 }
4256 return promise;
4257 }
4258
4259 // 25.4.4 Properties of the Promise Constructor
4260 // 25.4.4.1 Promise.all ( iterable )
4261
4262 define(Promise, 'all', function all(iterable) {
4263 var c = strict(this);
4264 var promiseCapability = NewPromiseCapability(c);
4265 try {
4266 var iterator = GetIterator(iterable);
4267 } catch (value) {
4268 promiseCapability['[[Reject]]'].call(undefined, value);
4269 return promiseCapability['[[Promise]]'];
4270 }
4271 var values = [];
4272 var remainingElementsCount = { value: 1 };
4273 var index = 0;
4274 while (true) {
4275 try {
4276 var next = IteratorStep(iterator);
4277 } catch (value) {
4278 promiseCapability['[[Reject]]'].call(undefined, value);
4279 return promiseCapability['[[Promise]]'];
4280 }
4281 if (!next) {
4282 remainingElementsCount.value -= 1;
4283 if (remainingElementsCount.value === 0) {
4284 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4285
4286
4287 }
4288 return promiseCapability['[[Promise]]'];
4289 }
4290 try {
4291 var nextValue = IteratorValue(next);
4292 } catch (value) {
4293 promiseCapability['[[Reject]]'].call(undefined, value);
4294 return promiseCapability['[[Promise]]'];
4295 }
4296 try {
4297 var nextPromise = c.resolve(nextValue);
4298 } catch (value) {
4299 promiseCapability['[[Reject]]'].call(undefined, value);
4300 return promiseCapability['[[Promise]]'];
4301 }
4302 var resolveElement = PromiseAllResolveElementFunction();
4303 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4304 set_internal(resolveElement, '[[Index]]', index);
4305 set_internal(resolveElement, '[[Values]]', values);
4306 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4307 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4308 remainingElementsCount.value += 1;
4309 try {
4310 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4311 } catch (value) {
4312 promiseCapability['[[Reject]]'].call(undefined, value);
4313 return promiseCapability['[[Promise]]'];
4314 }
4315 index += 1;
4316 }
4317 });
4318
4319 // 25.4.4.1.1 Promise.all Resolve Element Functions
4320
4321 function PromiseAllResolveElementFunction() {
4322 var F = function(x) {
4323 var alreadyCalled = F['[[AlreadyCalled]]'];
4324 if (alreadyCalled.value) return undefined;
4325 alreadyCalled.value = true;
4326 var index = F['[[Index]]'];
4327 var values = F['[[Values]]'];
4328 var promiseCapability = F['[[Capabilities]]'];
4329 var remainingElementsCount = F['[[RemainingElements]]'];
4330 try {
4331 values[index] = x;
4332 } catch (result) {
4333 promiseCapability['[[Reject]]'].call(undefined, result);
4334 return promiseCapability['[[Promise]]'];
4335 }
4336 remainingElementsCount.value -= 1;
4337 if (remainingElementsCount.value === 0)
4338 return promiseCapability['[[Resolve]]'].call(undefined, values);
4339 return undefined;
4340 };
4341 return F;
4342 }
4343
4344 // 25.4.4.2 Promise.prototype
4345
4346 Promise.prototype = {};
4347
4348 // 25.4.4.3 Promise.race ( iterable )
4349
4350 define(Promise, 'race', function race(iterable) {
4351 var c = strict(this);
4352 var promiseCapability = NewPromiseCapability(c);
4353 try {
4354 var iterator = GetIterator(iterable);
4355 } catch (value) {
4356 promiseCapability['[[Reject]]'].call(undefined, value);
4357 return promiseCapability['[[Promise]]'];
4358 }
4359 while (true) {
4360 try {
4361 var next = IteratorStep(iterator);
4362 } catch (value) {
4363 promiseCapability['[[Reject]]'].call(undefined, value);
4364 return promiseCapability['[[Promise]]'];
4365 }
4366 if (!next) return promiseCapability['[[Promise]]'];
4367 try {
4368 var nextValue = IteratorValue(next);
4369 } catch (value) {
4370 promiseCapability['[[Reject]]'].call(undefined, value);
4371 return promiseCapability['[[Promise]]'];
4372 }
4373 try {
4374 var nextPromise = c.resolve(nextValue);
4375 } catch (value) {
4376 promiseCapability['[[Reject]]'].call(undefined, value);
4377 return promiseCapability['[[Promise]]'];
4378 }
4379 try {
4380 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4381 } catch (value) {
4382 promiseCapability['[[Reject]]'].call(undefined, value);
4383 return promiseCapability['[[Promise]]'];
4384 }
4385 }
4386 });
4387
4388 // 25.4.4.4 Promise.reject ( r )
4389
4390 define(Promise, 'reject', function reject(r) {
4391 var c = strict(this);
4392 var promiseCapability = NewPromiseCapability(c);
4393 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4394 return promiseCapability['[[Promise]]'];
4395 });
4396
4397 // 25.4.4.5 Promise.resolve ( x )
4398
4399 define(Promise, 'resolve', function resolve(x) {
4400 var c = strict(this);
4401 if (IsPromise(x)) {
4402 var constructor = x['[[PromiseConstructor]]'];
4403 if (SameValue(constructor, c)) return x;
4404 }
4405 var promiseCapability = NewPromiseCapability(c);
4406 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4407 return promiseCapability['[[Promise]]'];
4408 });
4409
4410 // 25.4.4.6 Promise [ @@create ] ( )
4411 // 25.4.4.6.1 AllocatePromise ( constructor )
4412 // 25.4.5 Properties of the Promise Prototype Object
4413 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4414
4415 define(Promise.prototype, 'catch', function catch_(onRejected) {
4416 var promise = this;
4417 return promise.then(undefined, onRejected);
4418 });
4419
4420 // 25.4.5.2 Promise.prototype.constructor
4421
4422 Promise.prototype.constructor = Promise;
4423
4424 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4425
4426 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4427 var promise = this;
4428 if (!IsPromise(promise)) throw TypeError();
4429 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4430 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4431 var c = promise.constructor;
4432 var promiseCapability = NewPromiseCapability(c);
4433 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4434 '[[Handler]]': onFulfilled };
4435 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4436 '[[Handler]]': onRejected };
4437 if (promise['[[PromiseState]]'] === 'pending') {
4438 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4439 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4440 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4441 var value = promise['[[PromiseResult]]'];
4442 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4443 } else if (promise['[[PromiseState]]'] === 'rejected') {
4444 var reason = promise['[[PromiseResult]]'];
4445 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4446 }
4447 return promiseCapability['[[Promise]]'];
4448 });
4449
4450 // 25.4.6 Properties of Promise Instances
4451
4452 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4453 global.Promise = Promise;
4454
4455 // Patch early Promise.cast vs. Promise.resolve implementations
4456 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4457 }());
4458
4459 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4460 define(Promise.prototype, $$toStringTag, 'Promise');
4461
4462 // ---------------------------------------
4463 // 26 Reflection
4464 // ---------------------------------------
4465
4466 (function() {
4467 // 26.1 The Reflect Object
4468 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4469 global.Reflect = {};
4470
4471 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4472 define(
4473 Reflect, 'apply',
4474 function apply(target, thisArgument, argumentsList) {
4475 if (!IsCallable(target)) throw TypeError();
4476 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4477 });
4478
4479 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4480 define(
4481 Reflect, 'construct',
4482 function construct(target, argumentsList) {
4483 return __cons(target, argumentsList);
4484 });
4485
4486 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4487 define(
4488 Reflect, 'defineProperty',
4489 function defineProperty(target, propertyKey, attributes) {
4490 try {
4491 Object.defineProperty(target, propertyKey, attributes);
4492 return true;
4493 } catch (_) {
4494 return false;
4495 }
4496 });
4497
4498 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4499 define(
4500 Reflect, 'deleteProperty',
4501 function deleteProperty(target,name) {
4502 try {
4503 delete target[name];
4504 return !HasOwnProperty(target, name);
4505 } catch (_) {
4506 return false;
4507 }
4508 });
4509
4510 // 26.1.5 Reflect.enumerate ( target )
4511 define(
4512 Reflect, 'enumerate',
4513 function enumerate(target) {
4514 target = ToObject(target);
4515 var iterator = Enumerate(target);
4516 return iterator;
4517 });
4518
4519 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4520 define(
4521 Reflect, 'get',
4522 function get(target, name, receiver) {
4523 target = ToObject(target);
4524 name = String(name);
4525 receiver = (receiver === undefined) ? target : ToObject(receiver);
4526 var desc = getPropertyDescriptor(target, name);
4527 if (desc && 'get' in desc)
4528 return Function.prototype.call.call(desc['get'], receiver);
4529 return target[name];
4530 });
4531
4532 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4533 define(
4534 Reflect, 'getOwnPropertyDescriptor',
4535 Object.getOwnPropertyDescriptor);
4536
4537 // 26.1.8 Reflect.getPrototypeOf ( target )
4538 define(
4539 Reflect, 'getPrototypeOf',
4540 Object.getPrototypeOf);
4541
4542 // 26.1.9 Reflect.has ( target, propertyKey )
4543 define(
4544 Reflect, 'has',
4545 function has(target,name) {
4546 return String(name) in ToObject(target);
4547 });
4548
4549 // 26.1.10 Reflect.isExtensible (target)
4550 define(
4551 Reflect, 'isExtensible',
4552 Object.isExtensible);
4553
4554 // 26.1.11 Reflect.ownKeys ( target )
4555 define(
4556 Reflect, 'ownKeys',
4557 function ownKeys(target) {
4558 var obj = ToObject(target);
4559 return Object.getOwnPropertyNames(obj);
4560 });
4561
4562 // 26.1.12 Reflect.preventExtensions ( target )
4563 define(
4564 Reflect, 'preventExtensions',
4565 function preventExtensions(target) {
4566 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4567 });
4568
4569 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4570 define(
4571 Reflect, 'set',
4572 function set(target, name, value, receiver) {
4573 target = ToObject(target);
4574 name = String(name);
4575 receiver = (receiver === undefined) ? target : ToObject(receiver);
4576 var desc = getPropertyDescriptor(target, name);
4577 try {
4578 if (desc && 'set' in desc)
4579 Function.prototype.call.call(desc['set'], receiver, value);
4580 else
4581 target[name] = value;
4582 return true;
4583 } catch (_) {
4584 return false;
4585 }
4586 });
4587
4588 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4589 define(
4590 Reflect, 'setPrototypeOf',
4591 function setPrototypeOf(target, proto) {
4592 try {
4593 target.__proto__ = proto;
4594 return Reflect.getPrototypeOf(target) === proto;
4595 } catch(_) {
4596 return false;
4597 }
4598 });
4599
4600 }());
4601
4602 // ---------------------------------------
4603 // 26.2 Proxy Objects
4604 // ---------------------------------------
4605
4606 // Not polyfillable.
4607
4608}(self));
4609
4610// This helper is defined outside the main scope so that the use of
4611// 'eval' does not taint the scope for minifiers.
4612function __cons(t, a) {
4613 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4614}
6e0f24b1 4615</script>
8a1f452d 4616 <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){
4617'use strict'
4618
4619exports.byteLength = byteLength
4620exports.toByteArray = toByteArray
4621exports.fromByteArray = fromByteArray
4622
4623var lookup = []
4624var revLookup = []
4625var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4626
4627var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4628for (var i = 0, len = code.length; i < len; ++i) {
4629 lookup[i] = code[i]
4630 revLookup[code.charCodeAt(i)] = i
4631}
4632
4633revLookup['-'.charCodeAt(0)] = 62
4634revLookup['_'.charCodeAt(0)] = 63
4635
4636function placeHoldersCount (b64) {
4637 var len = b64.length
4638 if (len % 4 > 0) {
4639 throw new Error('Invalid string. Length must be a multiple of 4')
4640 }
4641
4642 // the number of equal signs (place holders)
4643 // if there are two placeholders, than the two characters before it
4644 // represent one byte
4645 // if there is only one, then the three characters before it represent 2 bytes
4646 // this is just a cheap hack to not do indexOf twice
4647 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4648}
4649
4650function byteLength (b64) {
4651 // base64 is 4/3 + up to two characters of the original data
4652 return b64.length * 3 / 4 - placeHoldersCount(b64)
4653}
4654
4655function toByteArray (b64) {
4656 var i, j, l, tmp, placeHolders, arr
4657 var len = b64.length
4658 placeHolders = placeHoldersCount(b64)
4659
4660 arr = new Arr(len * 3 / 4 - placeHolders)
4661
4662 // if there are placeholders, only get up to the last complete 4 chars
4663 l = placeHolders > 0 ? len - 4 : len
4664
4665 var L = 0
4666
4667 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4668 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4669 arr[L++] = (tmp >> 16) & 0xFF
4670 arr[L++] = (tmp >> 8) & 0xFF
4671 arr[L++] = tmp & 0xFF
4672 }
4673
4674 if (placeHolders === 2) {
4675 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4676 arr[L++] = tmp & 0xFF
4677 } else if (placeHolders === 1) {
4678 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4679 arr[L++] = (tmp >> 8) & 0xFF
4680 arr[L++] = tmp & 0xFF
4681 }
4682
4683 return arr
4684}
4685
4686function tripletToBase64 (num) {
4687 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4688}
4689
4690function encodeChunk (uint8, start, end) {
4691 var tmp
4692 var output = []
4693 for (var i = start; i < end; i += 3) {
4694 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4695 output.push(tripletToBase64(tmp))
4696 }
4697 return output.join('')
4698}
4699
4700function fromByteArray (uint8) {
4701 var tmp
4702 var len = uint8.length
4703 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4704 var output = ''
4705 var parts = []
4706 var maxChunkLength = 16383 // must be multiple of 3
4707
4708 // go through the array every three bytes, we'll deal with trailing stuff later
4709 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4710 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4711 }
4712
4713 // pad the end with zeros, but make sure to not forget the extra bytes
4714 if (extraBytes === 1) {
4715 tmp = uint8[len - 1]
4716 output += lookup[tmp >> 2]
4717 output += lookup[(tmp << 4) & 0x3F]
4718 output += '=='
4719 } else if (extraBytes === 2) {
4720 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4721 output += lookup[tmp >> 10]
4722 output += lookup[(tmp >> 4) & 0x3F]
4723 output += lookup[(tmp << 2) & 0x3F]
4724 output += '='
4725 }
4726
4727 parts.push(output)
4728
4729 return parts.join('')
4730}
4731
4732},{}],2:[function(require,module,exports){
4733/*!
4734 * The buffer module from node.js, for the browser.
4735 *
4736 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4737 * @license MIT
4738 */
4739/* eslint-disable no-proto */
4740
4741'use strict'
4742
4743var base64 = require('base64-js')
4744var ieee754 = require('ieee754')
4745
4746exports.Buffer = Buffer
4747exports.SlowBuffer = SlowBuffer
4748exports.INSPECT_MAX_BYTES = 50
4749
4750var K_MAX_LENGTH = 0x7fffffff
4751exports.kMaxLength = K_MAX_LENGTH
4752
4753/**
4754 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4755 * === true Use Uint8Array implementation (fastest)
4756 * === false Print warning and recommend using `buffer` v4.x which has an Object
4757 * implementation (most compatible, even IE6)
4758 *
4759 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4760 * Opera 11.6+, iOS 4.2+.
4761 *
4762 * We report that the browser does not support typed arrays if the are not subclassable
4763 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4764 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4765 * for __proto__ and has a buggy typed array implementation.
4766 */
4767Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4768
4769if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4770 typeof console.error === 'function') {
4771 console.error(
4772 'This browser lacks typed array (Uint8Array) support which is required by ' +
4773 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4774 )
4775}
4776
4777function typedArraySupport () {
4778 // Can typed array instances can be augmented?
4779 try {
4780 var arr = new Uint8Array(1)
4781 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4782 return arr.foo() === 42
4783 } catch (e) {
4784 return false
4785 }
4786}
4787
4788function createBuffer (length) {
4789 if (length > K_MAX_LENGTH) {
4790 throw new RangeError('Invalid typed array length')
4791 }
4792 // Return an augmented `Uint8Array` instance
4793 var buf = new Uint8Array(length)
4794 buf.__proto__ = Buffer.prototype
4795 return buf
4796}
4797
4798/**
4799 * The Buffer constructor returns instances of `Uint8Array` that have their
4800 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4801 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4802 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4803 * returns a single octet.
4804 *
4805 * The `Uint8Array` prototype remains unmodified.
4806 */
4807
4808function Buffer (arg, encodingOrOffset, length) {
4809 // Common case.
4810 if (typeof arg === 'number') {
4811 if (typeof encodingOrOffset === 'string') {
4812 throw new Error(
4813 'If encoding is specified then the first argument must be a string'
4814 )
4815 }
4816 return allocUnsafe(arg)
4817 }
4818 return from(arg, encodingOrOffset, length)
4819}
4820
4821// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4822if (typeof Symbol !== 'undefined' && Symbol.species &&
4823 Buffer[Symbol.species] === Buffer) {
4824 Object.defineProperty(Buffer, Symbol.species, {
4825 value: null,
4826 configurable: true,
4827 enumerable: false,
4828 writable: false
4829 })
4830}
4831
4832Buffer.poolSize = 8192 // not used by this implementation
4833
4834function from (value, encodingOrOffset, length) {
4835 if (typeof value === 'number') {
4836 throw new TypeError('"value" argument must not be a number')
4837 }
4838
4839 if (value instanceof ArrayBuffer) {
4840 return fromArrayBuffer(value, encodingOrOffset, length)
4841 }
4842
4843 if (typeof value === 'string') {
4844 return fromString(value, encodingOrOffset)
4845 }
4846
4847 return fromObject(value)
4848}
4849
4850/**
4851 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4852 * if value is a number.
4853 * Buffer.from(str[, encoding])
4854 * Buffer.from(array)
4855 * Buffer.from(buffer)
4856 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4857 **/
4858Buffer.from = function (value, encodingOrOffset, length) {
4859 return from(value, encodingOrOffset, length)
4860}
4861
4862// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4863// https://github.com/feross/buffer/pull/148
4864Buffer.prototype.__proto__ = Uint8Array.prototype
4865Buffer.__proto__ = Uint8Array
4866
4867function assertSize (size) {
4868 if (typeof size !== 'number') {
4869 throw new TypeError('"size" argument must be a number')
4870 } else if (size < 0) {
4871 throw new RangeError('"size" argument must not be negative')
4872 }
4873}
4874
4875function alloc (size, fill, encoding) {
4876 assertSize(size)
4877 if (size <= 0) {
4878 return createBuffer(size)
4879 }
4880 if (fill !== undefined) {
4881 // Only pay attention to encoding if it's a string. This
4882 // prevents accidentally sending in a number that would
4883 // be interpretted as a start offset.
4884 return typeof encoding === 'string'
4885 ? createBuffer(size).fill(fill, encoding)
4886 : createBuffer(size).fill(fill)
4887 }
4888 return createBuffer(size)
4889}
4890
4891/**
4892 * Creates a new filled Buffer instance.
4893 * alloc(size[, fill[, encoding]])
4894 **/
4895Buffer.alloc = function (size, fill, encoding) {
4896 return alloc(size, fill, encoding)
4897}
4898
4899function allocUnsafe (size) {
4900 assertSize(size)
4901 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4902}
4903
4904/**
4905 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4906 * */
4907Buffer.allocUnsafe = function (size) {
4908 return allocUnsafe(size)
4909}
4910/**
4911 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4912 */
4913Buffer.allocUnsafeSlow = function (size) {
4914 return allocUnsafe(size)
4915}
4916
4917function fromString (string, encoding) {
4918 if (typeof encoding !== 'string' || encoding === '') {
4919 encoding = 'utf8'
4920 }
4921
4922 if (!Buffer.isEncoding(encoding)) {
4923 throw new TypeError('"encoding" must be a valid string encoding')
4924 }
4925
4926 var length = byteLength(string, encoding) | 0
4927 var buf = createBuffer(length)
4928
4929 var actual = buf.write(string, encoding)
4930
4931 if (actual !== length) {
4932 // Writing a hex string, for example, that contains invalid characters will
4933 // cause everything after the first invalid character to be ignored. (e.g.
4934 // 'abxxcd' will be treated as 'ab')
4935 buf = buf.slice(0, actual)
4936 }
4937
4938 return buf
4939}
4940
4941function fromArrayLike (array) {
4942 var length = array.length < 0 ? 0 : checked(array.length) | 0
4943 var buf = createBuffer(length)
4944 for (var i = 0; i < length; i += 1) {
4945 buf[i] = array[i] & 255
4946 }
4947 return buf
4948}
4949
4950function fromArrayBuffer (array, byteOffset, length) {
4951 if (byteOffset < 0 || array.byteLength < byteOffset) {
4952 throw new RangeError('\'offset\' is out of bounds')
4953 }
4954
4955 if (array.byteLength < byteOffset + (length || 0)) {
4956 throw new RangeError('\'length\' is out of bounds')
4957 }
4958
4959 var buf
4960 if (byteOffset === undefined && length === undefined) {
4961 buf = new Uint8Array(array)
4962 } else if (length === undefined) {
4963 buf = new Uint8Array(array, byteOffset)
4964 } else {
4965 buf = new Uint8Array(array, byteOffset, length)
4966 }
4967
4968 // Return an augmented `Uint8Array` instance
4969 buf.__proto__ = Buffer.prototype
4970 return buf
4971}
4972
4973function fromObject (obj) {
4974 if (Buffer.isBuffer(obj)) {
4975 var len = checked(obj.length) | 0
4976 var buf = createBuffer(len)
4977
4978 if (buf.length === 0) {
4979 return buf
4980 }
4981
4982 obj.copy(buf, 0, 0, len)
4983 return buf
4984 }
4985
4986 if (obj) {
4987 if (isArrayBufferView(obj) || 'length' in obj) {
4988 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
4989 return createBuffer(0)
4990 }
4991 return fromArrayLike(obj)
4992 }
4993
4994 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
4995 return fromArrayLike(obj.data)
4996 }
4997 }
4998
4999 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
5000}
5001
5002function checked (length) {
5003 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
5004 // length is NaN (which is otherwise coerced to zero.)
5005 if (length >= K_MAX_LENGTH) {
5006 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
5007 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
5008 }
5009 return length | 0
5010}
5011
5012function SlowBuffer (length) {
5013 if (+length != length) { // eslint-disable-line eqeqeq
5014 length = 0
5015 }
5016 return Buffer.alloc(+length)
5017}
5018
5019Buffer.isBuffer = function isBuffer (b) {
5020 return b != null && b._isBuffer === true
5021}
5022
5023Buffer.compare = function compare (a, b) {
5024 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
5025 throw new TypeError('Arguments must be Buffers')
5026 }
5027
5028 if (a === b) return 0
5029
5030 var x = a.length
5031 var y = b.length
5032
5033 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
5034 if (a[i] !== b[i]) {
5035 x = a[i]
5036 y = b[i]
5037 break
5038 }
5039 }
5040
5041 if (x < y) return -1
5042 if (y < x) return 1
5043 return 0
5044}
5045
5046Buffer.isEncoding = function isEncoding (encoding) {
5047 switch (String(encoding).toLowerCase()) {
5048 case 'hex':
5049 case 'utf8':
5050 case 'utf-8':
5051 case 'ascii':
5052 case 'latin1':
5053 case 'binary':
5054 case 'base64':
5055 case 'ucs2':
5056 case 'ucs-2':
5057 case 'utf16le':
5058 case 'utf-16le':
5059 return true
5060 default:
5061 return false
5062 }
5063}
5064
5065Buffer.concat = function concat (list, length) {
5066 if (!Array.isArray(list)) {
5067 throw new TypeError('"list" argument must be an Array of Buffers')
5068 }
5069
5070 if (list.length === 0) {
5071 return Buffer.alloc(0)
5072 }
5073
5074 var i
5075 if (length === undefined) {
5076 length = 0
5077 for (i = 0; i < list.length; ++i) {
5078 length += list[i].length
5079 }
5080 }
5081
5082 var buffer = Buffer.allocUnsafe(length)
5083 var pos = 0
5084 for (i = 0; i < list.length; ++i) {
5085 var buf = list[i]
5086 if (!Buffer.isBuffer(buf)) {
5087 throw new TypeError('"list" argument must be an Array of Buffers')
5088 }
5089 buf.copy(buffer, pos)
5090 pos += buf.length
5091 }
5092 return buffer
5093}
5094
5095function byteLength (string, encoding) {
5096 if (Buffer.isBuffer(string)) {
5097 return string.length
5098 }
5099 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
5100 return string.byteLength
5101 }
5102 if (typeof string !== 'string') {
5103 string = '' + string
5104 }
5105
5106 var len = string.length
5107 if (len === 0) return 0
5108
5109 // Use a for loop to avoid recursion
5110 var loweredCase = false
5111 for (;;) {
5112 switch (encoding) {
5113 case 'ascii':
5114 case 'latin1':
5115 case 'binary':
5116 return len
5117 case 'utf8':
5118 case 'utf-8':
5119 case undefined:
5120 return utf8ToBytes(string).length
5121 case 'ucs2':
5122 case 'ucs-2':
5123 case 'utf16le':
5124 case 'utf-16le':
5125 return len * 2
5126 case 'hex':
5127 return len >>> 1
5128 case 'base64':
5129 return base64ToBytes(string).length
5130 default:
5131 if (loweredCase) return utf8ToBytes(string).length // assume utf8
5132 encoding = ('' + encoding).toLowerCase()
5133 loweredCase = true
5134 }
5135 }
5136}
5137Buffer.byteLength = byteLength
5138
5139function slowToString (encoding, start, end) {
5140 var loweredCase = false
5141
5142 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5143 // property of a typed array.
5144
5145 // This behaves neither like String nor Uint8Array in that we set start/end
5146 // to their upper/lower bounds if the value passed is out of range.
5147 // undefined is handled specially as per ECMA-262 6th Edition,
5148 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5149 if (start === undefined || start < 0) {
5150 start = 0
5151 }
5152 // Return early if start > this.length. Done here to prevent potential uint32
5153 // coercion fail below.
5154 if (start > this.length) {
5155 return ''
5156 }
5157
5158 if (end === undefined || end > this.length) {
5159 end = this.length
5160 }
5161
5162 if (end <= 0) {
5163 return ''
5164 }
5165
5166 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5167 end >>>= 0
5168 start >>>= 0
5169
5170 if (end <= start) {
5171 return ''
5172 }
5173
5174 if (!encoding) encoding = 'utf8'
5175
5176 while (true) {
5177 switch (encoding) {
5178 case 'hex':
5179 return hexSlice(this, start, end)
5180
5181 case 'utf8':
5182 case 'utf-8':
5183 return utf8Slice(this, start, end)
5184
5185 case 'ascii':
5186 return asciiSlice(this, start, end)
5187
5188 case 'latin1':
5189 case 'binary':
5190 return latin1Slice(this, start, end)
5191
5192 case 'base64':
5193 return base64Slice(this, start, end)
5194
5195 case 'ucs2':
5196 case 'ucs-2':
5197 case 'utf16le':
5198 case 'utf-16le':
5199 return utf16leSlice(this, start, end)
5200
5201 default:
5202 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5203 encoding = (encoding + '').toLowerCase()
5204 loweredCase = true
5205 }
5206 }
5207}
5208
5209// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5210// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5211// reliably in a browserify context because there could be multiple different
5212// copies of the 'buffer' package in use. This method works even for Buffer
5213// instances that were created from another copy of the `buffer` package.
5214// See: https://github.com/feross/buffer/issues/154
5215Buffer.prototype._isBuffer = true
5216
5217function swap (b, n, m) {
5218 var i = b[n]
5219 b[n] = b[m]
5220 b[m] = i
5221}
5222
5223Buffer.prototype.swap16 = function swap16 () {
5224 var len = this.length
5225 if (len % 2 !== 0) {
5226 throw new RangeError('Buffer size must be a multiple of 16-bits')
5227 }
5228 for (var i = 0; i < len; i += 2) {
5229 swap(this, i, i + 1)
5230 }
5231 return this
5232}
5233
5234Buffer.prototype.swap32 = function swap32 () {
5235 var len = this.length
5236 if (len % 4 !== 0) {
5237 throw new RangeError('Buffer size must be a multiple of 32-bits')
5238 }
5239 for (var i = 0; i < len; i += 4) {
5240 swap(this, i, i + 3)
5241 swap(this, i + 1, i + 2)
5242 }
5243 return this
5244}
5245
5246Buffer.prototype.swap64 = function swap64 () {
5247 var len = this.length
5248 if (len % 8 !== 0) {
5249 throw new RangeError('Buffer size must be a multiple of 64-bits')
5250 }
5251 for (var i = 0; i < len; i += 8) {
5252 swap(this, i, i + 7)
5253 swap(this, i + 1, i + 6)
5254 swap(this, i + 2, i + 5)
5255 swap(this, i + 3, i + 4)
5256 }
5257 return this
5258}
5259
5260Buffer.prototype.toString = function toString () {
5261 var length = this.length
5262 if (length === 0) return ''
5263 if (arguments.length === 0) return utf8Slice(this, 0, length)
5264 return slowToString.apply(this, arguments)
5265}
5266
5267Buffer.prototype.equals = function equals (b) {
5268 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5269 if (this === b) return true
5270 return Buffer.compare(this, b) === 0
5271}
5272
5273Buffer.prototype.inspect = function inspect () {
5274 var str = ''
5275 var max = exports.INSPECT_MAX_BYTES
5276 if (this.length > 0) {
5277 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5278 if (this.length > max) str += ' ... '
5279 }
5280 return '<Buffer ' + str + '>'
5281}
5282
5283Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5284 if (!Buffer.isBuffer(target)) {
5285 throw new TypeError('Argument must be a Buffer')
5286 }
5287
5288 if (start === undefined) {
5289 start = 0
5290 }
5291 if (end === undefined) {
5292 end = target ? target.length : 0
5293 }
5294 if (thisStart === undefined) {
5295 thisStart = 0
5296 }
5297 if (thisEnd === undefined) {
5298 thisEnd = this.length
5299 }
5300
5301 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5302 throw new RangeError('out of range index')
5303 }
5304
5305 if (thisStart >= thisEnd && start >= end) {
5306 return 0
5307 }
5308 if (thisStart >= thisEnd) {
5309 return -1
5310 }
5311 if (start >= end) {
5312 return 1
5313 }
5314
5315 start >>>= 0
5316 end >>>= 0
5317 thisStart >>>= 0
5318 thisEnd >>>= 0
5319
5320 if (this === target) return 0
5321
5322 var x = thisEnd - thisStart
5323 var y = end - start
5324 var len = Math.min(x, y)
5325
5326 var thisCopy = this.slice(thisStart, thisEnd)
5327 var targetCopy = target.slice(start, end)
5328
5329 for (var i = 0; i < len; ++i) {
5330 if (thisCopy[i] !== targetCopy[i]) {
5331 x = thisCopy[i]
5332 y = targetCopy[i]
5333 break
5334 }
5335 }
5336
5337 if (x < y) return -1
5338 if (y < x) return 1
5339 return 0
5340}
5341
5342// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5343// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5344//
5345// Arguments:
5346// - buffer - a Buffer to search
5347// - val - a string, Buffer, or number
5348// - byteOffset - an index into `buffer`; will be clamped to an int32
5349// - encoding - an optional encoding, relevant is val is a string
5350// - dir - true for indexOf, false for lastIndexOf
5351function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5352 // Empty buffer means no match
5353 if (buffer.length === 0) return -1
5354
5355 // Normalize byteOffset
5356 if (typeof byteOffset === 'string') {
5357 encoding = byteOffset
5358 byteOffset = 0
5359 } else if (byteOffset > 0x7fffffff) {
5360 byteOffset = 0x7fffffff
5361 } else if (byteOffset < -0x80000000) {
5362 byteOffset = -0x80000000
5363 }
5364 byteOffset = +byteOffset // Coerce to Number.
5365 if (numberIsNaN(byteOffset)) {
5366 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5367 byteOffset = dir ? 0 : (buffer.length - 1)
5368 }
5369
5370 // Normalize byteOffset: negative offsets start from the end of the buffer
5371 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5372 if (byteOffset >= buffer.length) {
5373 if (dir) return -1
5374 else byteOffset = buffer.length - 1
5375 } else if (byteOffset < 0) {
5376 if (dir) byteOffset = 0
5377 else return -1
5378 }
5379
5380 // Normalize val
5381 if (typeof val === 'string') {
5382 val = Buffer.from(val, encoding)
5383 }
5384
5385 // Finally, search either indexOf (if dir is true) or lastIndexOf
5386 if (Buffer.isBuffer(val)) {
5387 // Special case: looking for empty string/buffer always fails
5388 if (val.length === 0) {
5389 return -1
5390 }
5391 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5392 } else if (typeof val === 'number') {
5393 val = val & 0xFF // Search for a byte value [0-255]
5394 if (typeof Uint8Array.prototype.indexOf === 'function') {
5395 if (dir) {
5396 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5397 } else {
5398 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5399 }
5400 }
5401 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5402 }
5403
5404 throw new TypeError('val must be string, number or Buffer')
5405}
5406
5407function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5408 var indexSize = 1
5409 var arrLength = arr.length
5410 var valLength = val.length
5411
5412 if (encoding !== undefined) {
5413 encoding = String(encoding).toLowerCase()
5414 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5415 encoding === 'utf16le' || encoding === 'utf-16le') {
5416 if (arr.length < 2 || val.length < 2) {
5417 return -1
5418 }
5419 indexSize = 2
5420 arrLength /= 2
5421 valLength /= 2
5422 byteOffset /= 2
5423 }
5424 }
5425
5426 function read (buf, i) {
5427 if (indexSize === 1) {
5428 return buf[i]
5429 } else {
5430 return buf.readUInt16BE(i * indexSize)
5431 }
5432 }
5433
5434 var i
5435 if (dir) {
5436 var foundIndex = -1
5437 for (i = byteOffset; i < arrLength; i++) {
5438 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5439 if (foundIndex === -1) foundIndex = i
5440 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5441 } else {
5442 if (foundIndex !== -1) i -= i - foundIndex
5443 foundIndex = -1
5444 }
5445 }
5446 } else {
5447 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5448 for (i = byteOffset; i >= 0; i--) {
5449 var found = true
5450 for (var j = 0; j < valLength; j++) {
5451 if (read(arr, i + j) !== read(val, j)) {
5452 found = false
5453 break
5454 }
5455 }
5456 if (found) return i
5457 }
5458 }
5459
5460 return -1
5461}
5462
5463Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5464 return this.indexOf(val, byteOffset, encoding) !== -1
5465}
5466
5467Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5468 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5469}
5470
5471Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5472 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5473}
5474
5475function hexWrite (buf, string, offset, length) {
5476 offset = Number(offset) || 0
5477 var remaining = buf.length - offset
5478 if (!length) {
5479 length = remaining
5480 } else {
5481 length = Number(length)
5482 if (length > remaining) {
5483 length = remaining
5484 }
5485 }
5486
5487 // must be an even number of digits
5488 var strLen = string.length
5489 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5490
5491 if (length > strLen / 2) {
5492 length = strLen / 2
5493 }
5494 for (var i = 0; i < length; ++i) {
5495 var parsed = parseInt(string.substr(i * 2, 2), 16)
5496 if (numberIsNaN(parsed)) return i
5497 buf[offset + i] = parsed
5498 }
5499 return i
5500}
5501
5502function utf8Write (buf, string, offset, length) {
5503 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5504}
5505
5506function asciiWrite (buf, string, offset, length) {
5507 return blitBuffer(asciiToBytes(string), buf, offset, length)
5508}
5509
5510function latin1Write (buf, string, offset, length) {
5511 return asciiWrite(buf, string, offset, length)
5512}
5513
5514function base64Write (buf, string, offset, length) {
5515 return blitBuffer(base64ToBytes(string), buf, offset, length)
5516}
5517
5518function ucs2Write (buf, string, offset, length) {
5519 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5520}
5521
5522Buffer.prototype.write = function write (string, offset, length, encoding) {
5523 // Buffer#write(string)
5524 if (offset === undefined) {
5525 encoding = 'utf8'
5526 length = this.length
5527 offset = 0
5528 // Buffer#write(string, encoding)
5529 } else if (length === undefined && typeof offset === 'string') {
5530 encoding = offset
5531 length = this.length
5532 offset = 0
5533 // Buffer#write(string, offset[, length][, encoding])
5534 } else if (isFinite(offset)) {
5535 offset = offset >>> 0
5536 if (isFinite(length)) {
5537 length = length >>> 0
5538 if (encoding === undefined) encoding = 'utf8'
5539 } else {
5540 encoding = length
5541 length = undefined
5542 }
5543 } else {
5544 throw new Error(
5545 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5546 )
5547 }
5548
5549 var remaining = this.length - offset
5550 if (length === undefined || length > remaining) length = remaining
5551
5552 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5553 throw new RangeError('Attempt to write outside buffer bounds')
5554 }
5555
5556 if (!encoding) encoding = 'utf8'
5557
5558 var loweredCase = false
5559 for (;;) {
5560 switch (encoding) {
5561 case 'hex':
5562 return hexWrite(this, string, offset, length)
5563
5564 case 'utf8':
5565 case 'utf-8':
5566 return utf8Write(this, string, offset, length)
5567
5568 case 'ascii':
5569 return asciiWrite(this, string, offset, length)
5570
5571 case 'latin1':
5572 case 'binary':
5573 return latin1Write(this, string, offset, length)
5574
5575 case 'base64':
5576 // Warning: maxLength not taken into account in base64Write
5577 return base64Write(this, string, offset, length)
5578
5579 case 'ucs2':
5580 case 'ucs-2':
5581 case 'utf16le':
5582 case 'utf-16le':
5583 return ucs2Write(this, string, offset, length)
5584
5585 default:
5586 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5587 encoding = ('' + encoding).toLowerCase()
5588 loweredCase = true
5589 }
5590 }
5591}
5592
5593Buffer.prototype.toJSON = function toJSON () {
5594 return {
5595 type: 'Buffer',
5596 data: Array.prototype.slice.call(this._arr || this, 0)
5597 }
5598}
5599
5600function base64Slice (buf, start, end) {
5601 if (start === 0 && end === buf.length) {
5602 return base64.fromByteArray(buf)
5603 } else {
5604 return base64.fromByteArray(buf.slice(start, end))
5605 }
5606}
5607
5608function utf8Slice (buf, start, end) {
5609 end = Math.min(buf.length, end)
5610 var res = []
5611
5612 var i = start
5613 while (i < end) {
5614 var firstByte = buf[i]
5615 var codePoint = null
5616 var bytesPerSequence = (firstByte > 0xEF) ? 4
5617 : (firstByte > 0xDF) ? 3
5618 : (firstByte > 0xBF) ? 2
5619 : 1
5620
5621 if (i + bytesPerSequence <= end) {
5622 var secondByte, thirdByte, fourthByte, tempCodePoint
5623
5624 switch (bytesPerSequence) {
5625 case 1:
5626 if (firstByte < 0x80) {
5627 codePoint = firstByte
5628 }
5629 break
5630 case 2:
5631 secondByte = buf[i + 1]
5632 if ((secondByte & 0xC0) === 0x80) {
5633 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5634 if (tempCodePoint > 0x7F) {
5635 codePoint = tempCodePoint
5636 }
5637 }
5638 break
5639 case 3:
5640 secondByte = buf[i + 1]
5641 thirdByte = buf[i + 2]
5642 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5643 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5644 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5645 codePoint = tempCodePoint
5646 }
5647 }
5648 break
5649 case 4:
5650 secondByte = buf[i + 1]
5651 thirdByte = buf[i + 2]
5652 fourthByte = buf[i + 3]
5653 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5654 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5655 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5656 codePoint = tempCodePoint
5657 }
5658 }
5659 }
5660 }
5661
5662 if (codePoint === null) {
5663 // we did not generate a valid codePoint so insert a
5664 // replacement char (U+FFFD) and advance only 1 byte
5665 codePoint = 0xFFFD
5666 bytesPerSequence = 1
5667 } else if (codePoint > 0xFFFF) {
5668 // encode to utf16 (surrogate pair dance)
5669 codePoint -= 0x10000
5670 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5671 codePoint = 0xDC00 | codePoint & 0x3FF
5672 }
5673
5674 res.push(codePoint)
5675 i += bytesPerSequence
5676 }
5677
5678 return decodeCodePointsArray(res)
5679}
5680
5681// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5682// the lowest limit is Chrome, with 0x10000 args.
5683// We go 1 magnitude less, for safety
5684var MAX_ARGUMENTS_LENGTH = 0x1000
5685
5686function decodeCodePointsArray (codePoints) {
5687 var len = codePoints.length
5688 if (len <= MAX_ARGUMENTS_LENGTH) {
5689 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5690 }
5691
5692 // Decode in chunks to avoid "call stack size exceeded".
5693 var res = ''
5694 var i = 0
5695 while (i < len) {
5696 res += String.fromCharCode.apply(
5697 String,
5698 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5699 )
5700 }
5701 return res
5702}
5703
5704function asciiSlice (buf, start, end) {
5705 var ret = ''
5706 end = Math.min(buf.length, end)
5707
5708 for (var i = start; i < end; ++i) {
5709 ret += String.fromCharCode(buf[i] & 0x7F)
5710 }
5711 return ret
5712}
5713
5714function latin1Slice (buf, start, end) {
5715 var ret = ''
5716 end = Math.min(buf.length, end)
5717
5718 for (var i = start; i < end; ++i) {
5719 ret += String.fromCharCode(buf[i])
5720 }
5721 return ret
5722}
5723
5724function hexSlice (buf, start, end) {
5725 var len = buf.length
5726
5727 if (!start || start < 0) start = 0
5728 if (!end || end < 0 || end > len) end = len
5729
5730 var out = ''
5731 for (var i = start; i < end; ++i) {
5732 out += toHex(buf[i])
5733 }
5734 return out
5735}
5736
5737function utf16leSlice (buf, start, end) {
5738 var bytes = buf.slice(start, end)
5739 var res = ''
5740 for (var i = 0; i < bytes.length; i += 2) {
5741 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5742 }
5743 return res
5744}
5745
5746Buffer.prototype.slice = function slice (start, end) {
5747 var len = this.length
5748 start = ~~start
5749 end = end === undefined ? len : ~~end
5750
5751 if (start < 0) {
5752 start += len
5753 if (start < 0) start = 0
5754 } else if (start > len) {
5755 start = len
5756 }
5757
5758 if (end < 0) {
5759 end += len
5760 if (end < 0) end = 0
5761 } else if (end > len) {
5762 end = len
5763 }
5764
5765 if (end < start) end = start
5766
5767 var newBuf = this.subarray(start, end)
5768 // Return an augmented `Uint8Array` instance
5769 newBuf.__proto__ = Buffer.prototype
5770 return newBuf
5771}
5772
5773/*
5774 * Need to make sure that buffer isn't trying to write out of bounds.
5775 */
5776function checkOffset (offset, ext, length) {
5777 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5778 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5779}
5780
5781Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5782 offset = offset >>> 0
5783 byteLength = byteLength >>> 0
5784 if (!noAssert) checkOffset(offset, byteLength, this.length)
5785
5786 var val = this[offset]
5787 var mul = 1
5788 var i = 0
5789 while (++i < byteLength && (mul *= 0x100)) {
5790 val += this[offset + i] * mul
5791 }
5792
5793 return val
5794}
5795
5796Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5797 offset = offset >>> 0
5798 byteLength = byteLength >>> 0
5799 if (!noAssert) {
5800 checkOffset(offset, byteLength, this.length)
5801 }
5802
5803 var val = this[offset + --byteLength]
5804 var mul = 1
5805 while (byteLength > 0 && (mul *= 0x100)) {
5806 val += this[offset + --byteLength] * mul
5807 }
5808
5809 return val
5810}
5811
5812Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5813 offset = offset >>> 0
5814 if (!noAssert) checkOffset(offset, 1, this.length)
5815 return this[offset]
5816}
5817
5818Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5819 offset = offset >>> 0
5820 if (!noAssert) checkOffset(offset, 2, this.length)
5821 return this[offset] | (this[offset + 1] << 8)
5822}
5823
5824Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5825 offset = offset >>> 0
5826 if (!noAssert) checkOffset(offset, 2, this.length)
5827 return (this[offset] << 8) | this[offset + 1]
5828}
5829
5830Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5831 offset = offset >>> 0
5832 if (!noAssert) checkOffset(offset, 4, this.length)
5833
5834 return ((this[offset]) |
5835 (this[offset + 1] << 8) |
5836 (this[offset + 2] << 16)) +
5837 (this[offset + 3] * 0x1000000)
5838}
5839
5840Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5841 offset = offset >>> 0
5842 if (!noAssert) checkOffset(offset, 4, this.length)
5843
5844 return (this[offset] * 0x1000000) +
5845 ((this[offset + 1] << 16) |
5846 (this[offset + 2] << 8) |
5847 this[offset + 3])
5848}
5849
5850Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5851 offset = offset >>> 0
5852 byteLength = byteLength >>> 0
5853 if (!noAssert) checkOffset(offset, byteLength, this.length)
5854
5855 var val = this[offset]
5856 var mul = 1
5857 var i = 0
5858 while (++i < byteLength && (mul *= 0x100)) {
5859 val += this[offset + i] * mul
5860 }
5861 mul *= 0x80
5862
5863 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5864
5865 return val
5866}
5867
5868Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5869 offset = offset >>> 0
5870 byteLength = byteLength >>> 0
5871 if (!noAssert) checkOffset(offset, byteLength, this.length)
5872
5873 var i = byteLength
5874 var mul = 1
5875 var val = this[offset + --i]
5876 while (i > 0 && (mul *= 0x100)) {
5877 val += this[offset + --i] * mul
5878 }
5879 mul *= 0x80
5880
5881 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5882
5883 return val
5884}
5885
5886Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5887 offset = offset >>> 0
5888 if (!noAssert) checkOffset(offset, 1, this.length)
5889 if (!(this[offset] & 0x80)) return (this[offset])
5890 return ((0xff - this[offset] + 1) * -1)
5891}
5892
5893Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5894 offset = offset >>> 0
5895 if (!noAssert) checkOffset(offset, 2, this.length)
5896 var val = this[offset] | (this[offset + 1] << 8)
5897 return (val & 0x8000) ? val | 0xFFFF0000 : val
5898}
5899
5900Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5901 offset = offset >>> 0
5902 if (!noAssert) checkOffset(offset, 2, this.length)
5903 var val = this[offset + 1] | (this[offset] << 8)
5904 return (val & 0x8000) ? val | 0xFFFF0000 : val
5905}
5906
5907Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5908 offset = offset >>> 0
5909 if (!noAssert) checkOffset(offset, 4, this.length)
5910
5911 return (this[offset]) |
5912 (this[offset + 1] << 8) |
5913 (this[offset + 2] << 16) |
5914 (this[offset + 3] << 24)
5915}
5916
5917Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5918 offset = offset >>> 0
5919 if (!noAssert) checkOffset(offset, 4, this.length)
5920
5921 return (this[offset] << 24) |
5922 (this[offset + 1] << 16) |
5923 (this[offset + 2] << 8) |
5924 (this[offset + 3])
5925}
5926
5927Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5928 offset = offset >>> 0
5929 if (!noAssert) checkOffset(offset, 4, this.length)
5930 return ieee754.read(this, offset, true, 23, 4)
5931}
5932
5933Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5934 offset = offset >>> 0
5935 if (!noAssert) checkOffset(offset, 4, this.length)
5936 return ieee754.read(this, offset, false, 23, 4)
5937}
5938
5939Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5940 offset = offset >>> 0
5941 if (!noAssert) checkOffset(offset, 8, this.length)
5942 return ieee754.read(this, offset, true, 52, 8)
5943}
5944
5945Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5946 offset = offset >>> 0
5947 if (!noAssert) checkOffset(offset, 8, this.length)
5948 return ieee754.read(this, offset, false, 52, 8)
5949}
5950
5951function checkInt (buf, value, offset, ext, max, min) {
5952 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5953 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5954 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5955}
5956
5957Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5958 value = +value
5959 offset = offset >>> 0
5960 byteLength = byteLength >>> 0
5961 if (!noAssert) {
5962 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5963 checkInt(this, value, offset, byteLength, maxBytes, 0)
5964 }
5965
5966 var mul = 1
5967 var i = 0
5968 this[offset] = value & 0xFF
5969 while (++i < byteLength && (mul *= 0x100)) {
5970 this[offset + i] = (value / mul) & 0xFF
5971 }
5972
5973 return offset + byteLength
5974}
5975
5976Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5977 value = +value
5978 offset = offset >>> 0
5979 byteLength = byteLength >>> 0
5980 if (!noAssert) {
5981 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5982 checkInt(this, value, offset, byteLength, maxBytes, 0)
5983 }
5984
5985 var i = byteLength - 1
5986 var mul = 1
5987 this[offset + i] = value & 0xFF
5988 while (--i >= 0 && (mul *= 0x100)) {
5989 this[offset + i] = (value / mul) & 0xFF
5990 }
5991
5992 return offset + byteLength
5993}
5994
5995Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
5996 value = +value
5997 offset = offset >>> 0
5998 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
5999 this[offset] = (value & 0xff)
6000 return offset + 1
6001}
6002
6003Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
6004 value = +value
6005 offset = offset >>> 0
6006 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6007 this[offset] = (value & 0xff)
6008 this[offset + 1] = (value >>> 8)
6009 return offset + 2
6010}
6011
6012Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
6013 value = +value
6014 offset = offset >>> 0
6015 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6016 this[offset] = (value >>> 8)
6017 this[offset + 1] = (value & 0xff)
6018 return offset + 2
6019}
6020
6021Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
6022 value = +value
6023 offset = offset >>> 0
6024 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6025 this[offset + 3] = (value >>> 24)
6026 this[offset + 2] = (value >>> 16)
6027 this[offset + 1] = (value >>> 8)
6028 this[offset] = (value & 0xff)
6029 return offset + 4
6030}
6031
6032Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
6033 value = +value
6034 offset = offset >>> 0
6035 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6036 this[offset] = (value >>> 24)
6037 this[offset + 1] = (value >>> 16)
6038 this[offset + 2] = (value >>> 8)
6039 this[offset + 3] = (value & 0xff)
6040 return offset + 4
6041}
6042
6043Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
6044 value = +value
6045 offset = offset >>> 0
6046 if (!noAssert) {
6047 var limit = Math.pow(2, (8 * byteLength) - 1)
6048
6049 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6050 }
6051
6052 var i = 0
6053 var mul = 1
6054 var sub = 0
6055 this[offset] = value & 0xFF
6056 while (++i < byteLength && (mul *= 0x100)) {
6057 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
6058 sub = 1
6059 }
6060 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6061 }
6062
6063 return offset + byteLength
6064}
6065
6066Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
6067 value = +value
6068 offset = offset >>> 0
6069 if (!noAssert) {
6070 var limit = Math.pow(2, (8 * byteLength) - 1)
6071
6072 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6073 }
6074
6075 var i = byteLength - 1
6076 var mul = 1
6077 var sub = 0
6078 this[offset + i] = value & 0xFF
6079 while (--i >= 0 && (mul *= 0x100)) {
6080 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
6081 sub = 1
6082 }
6083 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6084 }
6085
6086 return offset + byteLength
6087}
6088
6089Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
6090 value = +value
6091 offset = offset >>> 0
6092 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
6093 if (value < 0) value = 0xff + value + 1
6094 this[offset] = (value & 0xff)
6095 return offset + 1
6096}
6097
6098Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
6099 value = +value
6100 offset = offset >>> 0
6101 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6102 this[offset] = (value & 0xff)
6103 this[offset + 1] = (value >>> 8)
6104 return offset + 2
6105}
6106
6107Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
6108 value = +value
6109 offset = offset >>> 0
6110 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6111 this[offset] = (value >>> 8)
6112 this[offset + 1] = (value & 0xff)
6113 return offset + 2
6114}
6115
6116Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
6117 value = +value
6118 offset = offset >>> 0
6119 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6120 this[offset] = (value & 0xff)
6121 this[offset + 1] = (value >>> 8)
6122 this[offset + 2] = (value >>> 16)
6123 this[offset + 3] = (value >>> 24)
6124 return offset + 4
6125}
6126
6127Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
6128 value = +value
6129 offset = offset >>> 0
6130 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6131 if (value < 0) value = 0xffffffff + value + 1
6132 this[offset] = (value >>> 24)
6133 this[offset + 1] = (value >>> 16)
6134 this[offset + 2] = (value >>> 8)
6135 this[offset + 3] = (value & 0xff)
6136 return offset + 4
6137}
6138
6139function checkIEEE754 (buf, value, offset, ext, max, min) {
6140 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6141 if (offset < 0) throw new RangeError('Index out of range')
6142}
6143
6144function writeFloat (buf, value, offset, littleEndian, noAssert) {
6145 value = +value
6146 offset = offset >>> 0
6147 if (!noAssert) {
6148 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6149 }
6150 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6151 return offset + 4
6152}
6153
6154Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6155 return writeFloat(this, value, offset, true, noAssert)
6156}
6157
6158Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6159 return writeFloat(this, value, offset, false, noAssert)
6160}
6161
6162function writeDouble (buf, value, offset, littleEndian, noAssert) {
6163 value = +value
6164 offset = offset >>> 0
6165 if (!noAssert) {
6166 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6167 }
6168 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6169 return offset + 8
6170}
6171
6172Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6173 return writeDouble(this, value, offset, true, noAssert)
6174}
6175
6176Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6177 return writeDouble(this, value, offset, false, noAssert)
6178}
6179
6180// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6181Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6182 if (!start) start = 0
6183 if (!end && end !== 0) end = this.length
6184 if (targetStart >= target.length) targetStart = target.length
6185 if (!targetStart) targetStart = 0
6186 if (end > 0 && end < start) end = start
6187
6188 // Copy 0 bytes; we're done
6189 if (end === start) return 0
6190 if (target.length === 0 || this.length === 0) return 0
6191
6192 // Fatal error conditions
6193 if (targetStart < 0) {
6194 throw new RangeError('targetStart out of bounds')
6195 }
6196 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6197 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6198
6199 // Are we oob?
6200 if (end > this.length) end = this.length
6201 if (target.length - targetStart < end - start) {
6202 end = target.length - targetStart + start
6203 }
6204
6205 var len = end - start
6206 var i
6207
6208 if (this === target && start < targetStart && targetStart < end) {
6209 // descending copy from end
6210 for (i = len - 1; i >= 0; --i) {
6211 target[i + targetStart] = this[i + start]
6212 }
6213 } else if (len < 1000) {
6214 // ascending copy from start
6215 for (i = 0; i < len; ++i) {
6216 target[i + targetStart] = this[i + start]
6217 }
6218 } else {
6219 Uint8Array.prototype.set.call(
6220 target,
6221 this.subarray(start, start + len),
6222 targetStart
6223 )
6224 }
6225
6226 return len
6227}
6228
6229// Usage:
6230// buffer.fill(number[, offset[, end]])
6231// buffer.fill(buffer[, offset[, end]])
6232// buffer.fill(string[, offset[, end]][, encoding])
6233Buffer.prototype.fill = function fill (val, start, end, encoding) {
6234 // Handle string cases:
6235 if (typeof val === 'string') {
6236 if (typeof start === 'string') {
6237 encoding = start
6238 start = 0
6239 end = this.length
6240 } else if (typeof end === 'string') {
6241 encoding = end
6242 end = this.length
6243 }
6244 if (val.length === 1) {
6245 var code = val.charCodeAt(0)
6246 if (code < 256) {
6247 val = code
6248 }
6249 }
6250 if (encoding !== undefined && typeof encoding !== 'string') {
6251 throw new TypeError('encoding must be a string')
6252 }
6253 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6254 throw new TypeError('Unknown encoding: ' + encoding)
6255 }
6256 } else if (typeof val === 'number') {
6257 val = val & 255
6258 }
6259
6260 // Invalid ranges are not set to a default, so can range check early.
6261 if (start < 0 || this.length < start || this.length < end) {
6262 throw new RangeError('Out of range index')
6263 }
6264
6265 if (end <= start) {
6266 return this
6267 }
6268
6269 start = start >>> 0
6270 end = end === undefined ? this.length : end >>> 0
6271
6272 if (!val) val = 0
6273
6274 var i
6275 if (typeof val === 'number') {
6276 for (i = start; i < end; ++i) {
6277 this[i] = val
6278 }
6279 } else {
6280 var bytes = Buffer.isBuffer(val)
6281 ? val
6282 : new Buffer(val, encoding)
6283 var len = bytes.length
6284 for (i = 0; i < end - start; ++i) {
6285 this[i + start] = bytes[i % len]
6286 }
6287 }
6288
6289 return this
6290}
6291
6292// HELPER FUNCTIONS
6293// ================
6294
6295var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6296
6297function base64clean (str) {
6298 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6299 str = str.trim().replace(INVALID_BASE64_RE, '')
6300 // Node converts strings with length < 2 to ''
6301 if (str.length < 2) return ''
6302 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6303 while (str.length % 4 !== 0) {
6304 str = str + '='
6305 }
6306 return str
6307}
6308
6309function toHex (n) {
6310 if (n < 16) return '0' + n.toString(16)
6311 return n.toString(16)
6312}
6313
6314function utf8ToBytes (string, units) {
6315 units = units || Infinity
6316 var codePoint
6317 var length = string.length
6318 var leadSurrogate = null
6319 var bytes = []
6320
6321 for (var i = 0; i < length; ++i) {
6322 codePoint = string.charCodeAt(i)
6323
6324 // is surrogate component
6325 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6326 // last char was a lead
6327 if (!leadSurrogate) {
6328 // no lead yet
6329 if (codePoint > 0xDBFF) {
6330 // unexpected trail
6331 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6332 continue
6333 } else if (i + 1 === length) {
6334 // unpaired lead
6335 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6336 continue
6337 }
6338
6339 // valid lead
6340 leadSurrogate = codePoint
6341
6342 continue
6343 }
6344
6345 // 2 leads in a row
6346 if (codePoint < 0xDC00) {
6347 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6348 leadSurrogate = codePoint
6349 continue
6350 }
6351
6352 // valid surrogate pair
6353 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6354 } else if (leadSurrogate) {
6355 // valid bmp char, but last char was a lead
6356 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6357 }
6358
6359 leadSurrogate = null
6360
6361 // encode utf8
6362 if (codePoint < 0x80) {
6363 if ((units -= 1) < 0) break
6364 bytes.push(codePoint)
6365 } else if (codePoint < 0x800) {
6366 if ((units -= 2) < 0) break
6367 bytes.push(
6368 codePoint >> 0x6 | 0xC0,
6369 codePoint & 0x3F | 0x80
6370 )
6371 } else if (codePoint < 0x10000) {
6372 if ((units -= 3) < 0) break
6373 bytes.push(
6374 codePoint >> 0xC | 0xE0,
6375 codePoint >> 0x6 & 0x3F | 0x80,
6376 codePoint & 0x3F | 0x80
6377 )
6378 } else if (codePoint < 0x110000) {
6379 if ((units -= 4) < 0) break
6380 bytes.push(
6381 codePoint >> 0x12 | 0xF0,
6382 codePoint >> 0xC & 0x3F | 0x80,
6383 codePoint >> 0x6 & 0x3F | 0x80,
6384 codePoint & 0x3F | 0x80
6385 )
6386 } else {
6387 throw new Error('Invalid code point')
6388 }
6389 }
6390
6391 return bytes
6392}
6393
6394function asciiToBytes (str) {
6395 var byteArray = []
6396 for (var i = 0; i < str.length; ++i) {
6397 // Node's code seems to be doing this and not & 0x7F..
6398 byteArray.push(str.charCodeAt(i) & 0xFF)
6399 }
6400 return byteArray
6401}
6402
6403function utf16leToBytes (str, units) {
6404 var c, hi, lo
6405 var byteArray = []
6406 for (var i = 0; i < str.length; ++i) {
6407 if ((units -= 2) < 0) break
6408
6409 c = str.charCodeAt(i)
6410 hi = c >> 8
6411 lo = c % 256
6412 byteArray.push(lo)
6413 byteArray.push(hi)
6414 }
6415
6416 return byteArray
6417}
6418
6419function base64ToBytes (str) {
6420 return base64.toByteArray(base64clean(str))
6421}
6422
6423function blitBuffer (src, dst, offset, length) {
6424 for (var i = 0; i < length; ++i) {
6425 if ((i + offset >= dst.length) || (i >= src.length)) break
6426 dst[i + offset] = src[i]
6427 }
6428 return i
6429}
6430
6431// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6432function isArrayBufferView (obj) {
6433 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6434}
6435
6436function numberIsNaN (obj) {
6437 return obj !== obj // eslint-disable-line no-self-compare
6438}
6439
6440},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6441exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6442 var e, m
6443 var eLen = nBytes * 8 - mLen - 1
6444 var eMax = (1 << eLen) - 1
6445 var eBias = eMax >> 1
6446 var nBits = -7
6447 var i = isLE ? (nBytes - 1) : 0
6448 var d = isLE ? -1 : 1
6449 var s = buffer[offset + i]
6450
6451 i += d
6452
6453 e = s & ((1 << (-nBits)) - 1)
6454 s >>= (-nBits)
6455 nBits += eLen
6456 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6457
6458 m = e & ((1 << (-nBits)) - 1)
6459 e >>= (-nBits)
6460 nBits += mLen
6461 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6462
6463 if (e === 0) {
6464 e = 1 - eBias
6465 } else if (e === eMax) {
6466 return m ? NaN : ((s ? -1 : 1) * Infinity)
6467 } else {
6468 m = m + Math.pow(2, mLen)
6469 e = e - eBias
6470 }
6471 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6472}
6473
6474exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6475 var e, m, c
6476 var eLen = nBytes * 8 - mLen - 1
6477 var eMax = (1 << eLen) - 1
6478 var eBias = eMax >> 1
6479 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6480 var i = isLE ? 0 : (nBytes - 1)
6481 var d = isLE ? 1 : -1
6482 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6483
6484 value = Math.abs(value)
6485
6486 if (isNaN(value) || value === Infinity) {
6487 m = isNaN(value) ? 1 : 0
6488 e = eMax
6489 } else {
6490 e = Math.floor(Math.log(value) / Math.LN2)
6491 if (value * (c = Math.pow(2, -e)) < 1) {
6492 e--
6493 c *= 2
6494 }
6495 if (e + eBias >= 1) {
6496 value += rt / c
6497 } else {
6498 value += rt * Math.pow(2, 1 - eBias)
6499 }
6500 if (value * c >= 2) {
6501 e++
6502 c /= 2
6503 }
6504
6505 if (e + eBias >= eMax) {
6506 m = 0
6507 e = eMax
6508 } else if (e + eBias >= 1) {
6509 m = (value * c - 1) * Math.pow(2, mLen)
6510 e = e + eBias
6511 } else {
6512 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6513 e = 0
6514 }
6515 }
6516
6517 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6518
6519 e = (e << mLen) | m
6520 eLen += mLen
6521 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6522
6523 buffer[offset + i - d] |= s * 128
6524}
6525
6526},{}],4:[function(require,module,exports){
6527window.basex = require('base-x')
6528},{"base-x":5}],5:[function(require,module,exports){
6529// base-x encoding
6530// Forked from https://github.com/cryptocoinjs/bs58
6531// Originally written by Mike Hearn for BitcoinJ
6532// Copyright (c) 2011 Google Inc
6533// Ported to JavaScript by Stefan Thomas
6534// Merged Buffer refactorings from base58-native by Stephen Pair
6535// Copyright (c) 2013 BitPay Inc
6536
6537var Buffer = require('safe-buffer').Buffer
6538
6539module.exports = function base (ALPHABET) {
6540 var ALPHABET_MAP = {}
6541 var BASE = ALPHABET.length
6542 var LEADER = ALPHABET.charAt(0)
6543
6544 // pre-compute lookup table
6545 for (var z = 0; z < ALPHABET.length; z++) {
6546 var x = ALPHABET.charAt(z)
6547
6548 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6549 ALPHABET_MAP[x] = z
6550 }
6551
6552 function encode (source) {
6553 if (source.length === 0) return ''
6554
6555 var digits = [0]
6556 for (var i = 0; i < source.length; ++i) {
6557 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6558 carry += digits[j] << 8
6559 digits[j] = carry % BASE
6560 carry = (carry / BASE) | 0
6561 }
6562
6563 while (carry > 0) {
6564 digits.push(carry % BASE)
6565 carry = (carry / BASE) | 0
6566 }
6567 }
6568
6569 var string = ''
6570
6571 // deal with leading zeros
6572 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6573 // convert digits to a string
6574 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6575
6576 return string
6577 }
6578
6579 function decodeUnsafe (string) {
6580 if (string.length === 0) return Buffer.allocUnsafe(0)
6581
6582 var bytes = [0]
6583 for (var i = 0; i < string.length; i++) {
6584 var value = ALPHABET_MAP[string[i]]
6585 if (value === undefined) return
6586
6587 for (var j = 0, carry = value; j < bytes.length; ++j) {
6588 carry += bytes[j] * BASE
6589 bytes[j] = carry & 0xff
6590 carry >>= 8
6591 }
6592
6593 while (carry > 0) {
6594 bytes.push(carry & 0xff)
6595 carry >>= 8
6596 }
6597 }
6598
6599 // deal with leading zeros
6600 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6601 bytes.push(0)
6602 }
6603
6604 return Buffer.from(bytes.reverse())
6605 }
6606
6607 function decode (string) {
6608 var buffer = decodeUnsafe(string)
6609 if (buffer) return buffer
6610
6611 throw new Error('Non-base' + BASE + ' character')
6612 }
6613
6614 return {
6615 encode: encode,
6616 decodeUnsafe: decodeUnsafe,
6617 decode: decode
6618 }
6619}
6620
6621},{"safe-buffer":6}],6:[function(require,module,exports){
6622module.exports = require('buffer')
6623
6624},{"buffer":2}]},{},[4])(4)
6625});</script>
6e0f24b1
IC
6626 <script>(function (root) {
6627 "use strict";
6628
6629/***** unorm.js *****/
6630
6631/*
6632 * UnicodeNormalizer 1.0.0
6633 * Copyright (c) 2008 Matsuza
6634 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6635 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6636 * $Rev: 13309 $
6637 */
6638
6639 var DEFAULT_FEATURE = [null, 0, {}];
6640 var CACHE_THRESHOLD = 10;
6641 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6642 var NCount = VCount * TCount; // 588
6643 var SCount = LCount * NCount; // 11172
6644
6645 var UChar = function(cp, feature){
6646 this.codepoint = cp;
6647 this.feature = feature;
6648 };
6649
6650 // Strategies
6651 var cache = {};
6652 var cacheCounter = [];
6653 for (var i = 0; i <= 0xFF; ++i){
6654 cacheCounter[i] = 0;
6655 }
6656
6657 function fromCache(next, cp, needFeature){
6658 var ret = cache[cp];
6659 if(!ret){
6660 ret = next(cp, needFeature);
6661 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6662 cache[cp] = ret;
6663 }
6664 }
6665 return ret;
6666 }
6667
6668 function fromData(next, cp, needFeature){
6669 var hash = cp & 0xFF00;
6670 var dunit = UChar.udata[hash] || {};
6671 var f = dunit[cp];
6672 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6673 }
6674 function fromCpOnly(next, cp, needFeature){
6675 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6676 }
6677 function fromRuleBasedJamo(next, cp, needFeature){
6678 var j;
6679 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6680 return next(cp, needFeature);
6681 }
6682 if(LBase <= cp && cp < LBase + LCount){
6683 var c = {};
6684 var base = (cp - LBase) * VCount;
6685 for (j = 0; j < VCount; ++j){
6686 c[VBase + j] = SBase + TCount * (j + base);
6687 }
6688 return new UChar(cp, [,,c]);
6689 }
6690
6691 var SIndex = cp - SBase;
6692 var TIndex = SIndex % TCount;
6693 var feature = [];
6694 if(TIndex !== 0){
6695 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6696 } else {
6697 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6698 feature[2] = {};
6699 for (j = 1; j < TCount; ++j){
6700 feature[2][TBase + j] = cp + j;
6701 }
6702 }
6703 return new UChar(cp, feature);
6704 }
6705 function fromCpFilter(next, cp, needFeature){
6706 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6707 }
6708
6709 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6710
6711 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6712 return function (cp, needFeature) {
6713 return strategy(next, cp, needFeature);
6714 };
6715 }, null);
6716
6717 UChar.isHighSurrogate = function(cp){
6718 return cp >= 0xD800 && cp <= 0xDBFF;
6719 };
6720 UChar.isLowSurrogate = function(cp){
6721 return cp >= 0xDC00 && cp <= 0xDFFF;
6722 };
6723
6724 UChar.prototype.prepFeature = function(){
6725 if(!this.feature){
6726 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6727 }
6728 };
6729
6730 UChar.prototype.toString = function(){
6731 if(this.codepoint < 0x10000){
6732 return String.fromCharCode(this.codepoint);
6733 } else {
6734 var x = this.codepoint - 0x10000;
6735 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6736 }
6737 };
6738
6739 UChar.prototype.getDecomp = function(){
6740 this.prepFeature();
6741 return this.feature[0] || null;
6742 };
6743
6744 UChar.prototype.isCompatibility = function(){
6745 this.prepFeature();
6746 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6747 };
6748 UChar.prototype.isExclude = function(){
6749 this.prepFeature();
6750 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6751 };
6752 UChar.prototype.getCanonicalClass = function(){
6753 this.prepFeature();
6754 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6755 };
6756 UChar.prototype.getComposite = function(following){
6757 this.prepFeature();
6758 if(!this.feature[2]){
6759 return null;
6760 }
6761 var cp = this.feature[2][following.codepoint];
6762 return cp ? UChar.fromCharCode(cp) : null;
6763 };
6764
6765 var UCharIterator = function(str){
6766 this.str = str;
6767 this.cursor = 0;
6768 };
6769 UCharIterator.prototype.next = function(){
6770 if(!!this.str && this.cursor < this.str.length){
6771 var cp = this.str.charCodeAt(this.cursor++);
6772 var d;
6773 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6774 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6775 ++this.cursor;
6776 }
6777 return UChar.fromCharCode(cp);
6778 } else {
6779 this.str = null;
6780 return null;
6781 }
6782 };
6783
6784 var RecursDecompIterator = function(it, cano){
6785 this.it = it;
6786 this.canonical = cano;
6787 this.resBuf = [];
6788 };
6789
6790 RecursDecompIterator.prototype.next = function(){
6791 function recursiveDecomp(cano, uchar){
6792 var decomp = uchar.getDecomp();
6793 if(!!decomp && !(cano && uchar.isCompatibility())){
6794 var ret = [];
6795 for(var i = 0; i < decomp.length; ++i){
6796 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6797 ret = ret.concat(a);
6798 }
6799 return ret;
6800 } else {
6801 return [uchar];
6802 }
6803 }
6804 if(this.resBuf.length === 0){
6805 var uchar = this.it.next();
6806 if(!uchar){
6807 return null;
6808 }
6809 this.resBuf = recursiveDecomp(this.canonical, uchar);
6810 }
6811 return this.resBuf.shift();
6812 };
6813
6814 var DecompIterator = function(it){
6815 this.it = it;
6816 this.resBuf = [];
6817 };
6818
6819 DecompIterator.prototype.next = function(){
6820 var cc;
6821 if(this.resBuf.length === 0){
6822 do{
6823 var uchar = this.it.next();
6824 if(!uchar){
6825 break;
6826 }
6827 cc = uchar.getCanonicalClass();
6828 var inspt = this.resBuf.length;
6829 if(cc !== 0){
6830 for(; inspt > 0; --inspt){
6831 var uchar2 = this.resBuf[inspt - 1];
6832 var cc2 = uchar2.getCanonicalClass();
6833 if(cc2 <= cc){
6834 break;
6835 }
6836 }
6837 }
6838 this.resBuf.splice(inspt, 0, uchar);
6839 } while(cc !== 0);
6840 }
6841 return this.resBuf.shift();
6842 };
6843
6844 var CompIterator = function(it){
6845 this.it = it;
6846 this.procBuf = [];
6847 this.resBuf = [];
6848 this.lastClass = null;
6849 };
6850
6851 CompIterator.prototype.next = function(){
6852 while(this.resBuf.length === 0){
6853 var uchar = this.it.next();
6854 if(!uchar){
6855 this.resBuf = this.procBuf;
6856 this.procBuf = [];
6857 break;
6858 }
6859 if(this.procBuf.length === 0){
6860 this.lastClass = uchar.getCanonicalClass();
6861 this.procBuf.push(uchar);
6862 } else {
6863 var starter = this.procBuf[0];
6864 var composite = starter.getComposite(uchar);
6865 var cc = uchar.getCanonicalClass();
6866 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6867 this.procBuf[0] = composite;
6868 } else {
6869 if(cc === 0){
6870 this.resBuf = this.procBuf;
6871 this.procBuf = [];
6872 }
6873 this.lastClass = cc;
6874 this.procBuf.push(uchar);
6875 }
6876 }
6877 }
6878 return this.resBuf.shift();
6879 };
6880
6881 var createIterator = function(mode, str){
6882 switch(mode){
6883 case "NFD":
6884 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6885 case "NFKD":
6886 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6887 case "NFC":
6888 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6889 case "NFKC":
6890 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6891 }
6892 throw mode + " is invalid";
6893 };
6894 var normalize = function(mode, str){
6895 var it = createIterator(mode, str);
6896 var ret = "";
6897 var uchar;
6898 while(!!(uchar = it.next())){
6899 ret += uchar.toString();
6900 }
6901 return ret;
6902 };
6903
6904 /* API functions */
6905 function nfd(str){
6906 return normalize("NFD", str);
6907 }
6908
6909 function nfkd(str){
6910 return normalize("NFKD", str);
6911 }
6912
6913 function nfc(str){
6914 return normalize("NFC", str);
6915 }
6916
6917 function nfkc(str){
6918 return normalize("NFKC", str);
6919 }
6920
6921/* Unicode data */
6922UChar.udata={
69230:{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]]},
6924256:{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]},
6925512:{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]},
6926768:{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]},
69271024:{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]]},
69281280:{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]},
69291536:{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]},
69301792:{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]},
69312048:{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]},
69322304:{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]},
69332560:{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]},
69342816:{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]},
69353072:{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]},
69363328:{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]]},
69373584:{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]},
69383840:{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]},
69394096:{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]},
69404352:{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]},
69414608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
69424864:{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]},
69435120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
69445376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
69455632:{71231:[,9],71350:[,9],71351:[,7]},
69465888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
69476144:{6313:[,228]},
69486400:{6457:[,222],6458:[,230],6459:[,220]},
69496656:{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]},
69506912:{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]},
69517168:{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]},
69527424:{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]},
69537680:{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]]},
69547936:{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}]},
69558192:{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]},
69568448:{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}]},
69578704:{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]]},
69588960:{9001:[[12296]],9002:[[12297]]},
69599216:{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]},
696010752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
696111264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
696211520:{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]},
696311776:{11935:[[27597],256],12019:[[40863],256]},
696412032:{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]},
696512288:{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]},
696612544:{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]},
696712800:{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]},
696813056:{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]},
696927136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
697027392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
697142496:{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]},
697242752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
697343008:{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]},
697443264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
697543520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
697643776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
697748128:{113822:[,1]},
697853504:{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]},
697953760:{119362:[,230],119363:[,230],119364:[,230]},
698054272:{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]},
698154528:{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]},
698254784:{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]},
698355040:{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]},
698459392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
698560928:{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]},
698661696:{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]},
698761952:{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]},
698863488:{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]]},
698963744:{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]]},
699064000:{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]]},
699164256:{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]},
699264512:{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]},
699364768:{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]},
699465024:{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]},
699565280:{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]}
6996
6997};
6998
6999 /***** Module to export */
7000 var unorm = {
7001 nfc: nfc,
7002 nfd: nfd,
7003 nfkc: nfkc,
7004 nfkd: nfkd
7005 };
7006
7007 /*globals module:true,define:true*/
7008
7009 // CommonJS
7010 if (typeof module === "object") {
7011 module.exports = unorm;
7012
7013 // AMD
7014 } else if (typeof define === "function" && define.amd) {
7015 define("unorm", function () {
7016 return unorm;
7017 });
7018
7019 // Global
7020 } else {
7021 root.unorm = unorm;
7022 }
7023
7024 /***** Export as shim for String::normalize method *****/
7025 /*
7026 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
7027
7028 21.1.3.12 String.prototype.normalize(form="NFC")
7029 When the normalize method is called with one argument form, the following steps are taken:
7030
7031 1. Let O be CheckObjectCoercible(this value).
7032 2. Let S be ToString(O).
7033 3. ReturnIfAbrupt(S).
7034 4. If form is not provided or undefined let form be "NFC".
7035 5. Let f be ToString(form).
7036 6. ReturnIfAbrupt(f).
7037 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
7038 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.
7039 9. Return ns.
7040
7041 The length property of the normalize method is 0.
7042
7043 *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.
7044 */
7045 unorm.shimApplied = false;
7046
7047 if (!String.prototype.normalize) {
7048 String.prototype.normalize = function(form) {
7049 var str = "" + this;
7050 form = form === undefined ? "NFC" : form;
7051
7052 if (form === "NFC") {
7053 return unorm.nfc(str);
7054 } else if (form === "NFD") {
7055 return unorm.nfd(str);
7056 } else if (form === "NFKC") {
7057 return unorm.nfkc(str);
7058 } else if (form === "NFKD") {
7059 return unorm.nfkd(str);
7060 } else {
7061 throw new RangeError("Invalid normalization form: " + form);
7062 }
7063 };
7064
7065 unorm.shimApplied = true;
7066 }
7067}(this));
8b095871
IC
7068</script>
7069 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
7070!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)
7071},_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))
7072},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});
7073</script>
7074 <script>/*!
7075 * Bootstrap v3.2.0 (http://getbootstrap.com)
7076 * Copyright 2011-2014 Twitter, Inc.
7077 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7078 */
7079if("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>
7080 <script>(function() {
7081 'use strict';
7082
7083 /**
7084 * Extend an Object with another Object's properties.
7085 *
7086 * The source objects are specified as additional arguments.
7087 *
7088 * @param dst Object the object to extend.
7089 *
7090 * @return Object the final object.
7091 */
7092 var _extend = function(dst) {
7093 var sources = Array.prototype.slice.call(arguments, 1);
7094 for (var i=0; i<sources.length; ++i) {
7095 var src = sources[i];
7096 for (var p in src) {
7097 if (src.hasOwnProperty(p)) dst[p] = src[p];
7098 }
7099 }
7100 return dst;
7101 };
7102
7103
7104 /**
7105 * Defer execution of given function.
7106 * @param {Function} func
7107 */
7108 var _defer = function(func) {
7109 if (typeof setImmediate === 'function') {
7110 return setImmediate(func);
7111 } else {
7112 return setTimeout(func, 0);
7113 }
7114 };
7115
7116 /**
7117 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
7118 */
7119 var Levenshtein = {
7120 /**
7121 * Calculate levenshtein distance of the two strings.
7122 *
7123 * @param str1 String the first string.
7124 * @param str2 String the second string.
7125 * @return Integer the levenshtein distance (0 and above).
7126 */
7127 get: function(str1, str2) {
7128 // base cases
7129 if (str1 === str2) return 0;
7130 if (str1.length === 0) return str2.length;
7131 if (str2.length === 0) return str1.length;
7132
7133 // two rows
7134 var prevRow = new Array(str2.length + 1),
7135 curCol, nextCol, i, j, tmp;
7136
7137 // initialise previous row
7138 for (i=0; i<prevRow.length; ++i) {
7139 prevRow[i] = i;
7140 }
7141
7142 // calculate current row distance from previous row
7143 for (i=0; i<str1.length; ++i) {
7144 nextCol = i + 1;
7145
7146 for (j=0; j<str2.length; ++j) {
7147 curCol = nextCol;
7148
7149 // substution
7150 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7151 // insertion
7152 tmp = curCol + 1;
7153 if (nextCol > tmp) {
7154 nextCol = tmp;
7155 }
7156 // deletion
7157 tmp = prevRow[j + 1] + 1;
7158 if (nextCol > tmp) {
7159 nextCol = tmp;
7160 }
7161
7162 // copy current col value into previous (in preparation for next iteration)
7163 prevRow[j] = curCol;
7164 }
7165
7166 // copy last col value into previous (in preparation for next iteration)
7167 prevRow[j] = nextCol;
7168 }
7169
7170 return nextCol;
7171 },
7172
7173 /**
7174 * Asynchronously calculate levenshtein distance of the two strings.
7175 *
7176 * @param str1 String the first string.
7177 * @param str2 String the second string.
7178 * @param cb Function callback function with signature: function(Error err, int distance)
7179 * @param [options] Object additional options.
7180 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7181 */
7182 getAsync: function(str1, str2, cb, options) {
7183 options = _extend({}, {
7184 progress: null
7185 }, options);
7186
7187 // base cases
7188 if (str1 === str2) return cb(null, 0);
7189 if (str1.length === 0) return cb(null, str2.length);
7190 if (str2.length === 0) return cb(null, str1.length);
7191
7192 // two rows
7193 var prevRow = new Array(str2.length + 1),
7194 curCol, nextCol,
7195 i, j, tmp,
7196 startTime, currentTime;
7197
7198 // initialise previous row
7199 for (i=0; i<prevRow.length; ++i) {
7200 prevRow[i] = i;
7201 }
7202
7203 nextCol = 1;
7204 i = 0;
7205 j = -1;
7206
7207 var __calculate = function() {
7208 // reset timer
7209 startTime = new Date().valueOf();
7210 currentTime = startTime;
7211
7212 // keep going until one second has elapsed
7213 while (currentTime - startTime < 1000) {
7214 // reached end of current row?
7215 if (str2.length <= (++j)) {
7216 // copy current into previous (in preparation for next iteration)
7217 prevRow[j] = nextCol;
7218
7219 // if already done all chars
7220 if (str1.length <= (++i)) {
7221 return cb(null, nextCol);
7222 }
7223 // else if we have more left to do
7224 else {
7225 nextCol = i + 1;
7226 j = 0;
7227 }
7228 }
7229
7230 // calculation
7231 curCol = nextCol;
7232
7233 // substution
7234 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7235 // insertion
7236 tmp = curCol + 1;
7237 if (nextCol > tmp) {
7238 nextCol = tmp;
7239 }
7240 // deletion
7241 tmp = prevRow[j + 1] + 1;
7242 if (nextCol > tmp) {
7243 nextCol = tmp;
7244 }
7245
7246 // copy current into previous (in preparation for next iteration)
7247 prevRow[j] = curCol;
7248
7249 // get current time
7250 currentTime = new Date().valueOf();
7251 }
7252
7253 // send a progress update?
7254 if (null !== options.progress) {
7255 try {
7256 options.progress.call(null, (i * 100.0/ str1.length));
7257 } catch (err) {
7258 return cb('Progress callback: ' + err.toString());
7259 }
7260 }
7261
7262 // next iteration
7263 _defer(__calculate);
7264 };
7265
7266 __calculate();
7267 }
7268
7269 };
7270
7271 // amd
7272 if (typeof define !== "undefined" && define !== null && define.amd) {
7273 define(function() {
7274 return Levenshtein;
7275 });
7276 }
7277 // commonjs
7278 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7279 module.exports = Levenshtein;
7280 }
7281 // web worker
7282 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7283 self.Levenshtein = Levenshtein;
7284 }
7285 // browser main thread
7286 else if (typeof window !== "undefined" && window !== null) {
7287 window.Levenshtein = Levenshtein;
7288 }
7289}());
7290
7291</script>
7292 <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},
7293write: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;
7294for(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-
72957,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]=
72960<=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},
7297setupTimingPattern: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=
7298j.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-
7299b-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,
7300c),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=
73010,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&&
7302(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,
730378,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)-
7304j.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:"+
7305a);}},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:"+
7306a);}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+
73072)&&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),
7308LOG_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>
7309this.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],
7310[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,
7311116],[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,
731243,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,
73133,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,
731455,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,
731545,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*
7316(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,
861750ae 7317correctLevel:3,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),
8b095871
IC
7318j=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",
7319d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7320</script>
9987f0c1
IC
7321 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoinjs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
7322(function (global){
7323'use strict';
8b095871 7324
9987f0c1
IC
7325// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
7326// original notice:
8b095871 7327
9987f0c1
IC
7328/*!
7329 * The buffer module from node.js, for the browser.
7330 *
7331 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7332 * @license MIT
7333 */
7334function compare(a, b) {
7335 if (a === b) {
7336 return 0;
7337 }
8b095871 7338
9987f0c1
IC
7339 var x = a.length;
7340 var y = b.length;
8b095871 7341
9987f0c1
IC
7342 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
7343 if (a[i] !== b[i]) {
7344 x = a[i];
7345 y = b[i];
7346 break;
7347 }
7348 }
8b095871 7349
9987f0c1
IC
7350 if (x < y) {
7351 return -1;
8b095871 7352 }
9987f0c1
IC
7353 if (y < x) {
7354 return 1;
8b095871 7355 }
9987f0c1 7356 return 0;
8b095871 7357}
9987f0c1
IC
7358function isBuffer(b) {
7359 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
7360 return global.Buffer.isBuffer(b);
8b095871 7361 }
9987f0c1 7362 return !!(b != null && b._isBuffer);
8b095871
IC
7363}
7364
9987f0c1 7365// based on node assert, original notice:
8b095871 7366
9987f0c1
IC
7367// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7368//
7369// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7370//
7371// Originally from narwhal.js (http://narwhaljs.org)
7372// Copyright (c) 2009 Thomas Robinson <280north.com>
7373//
7374// Permission is hereby granted, free of charge, to any person obtaining a copy
7375// of this software and associated documentation files (the 'Software'), to
7376// deal in the Software without restriction, including without limitation the
7377// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7378// sell copies of the Software, and to permit persons to whom the Software is
7379// furnished to do so, subject to the following conditions:
7380//
7381// The above copyright notice and this permission notice shall be included in
7382// all copies or substantial portions of the Software.
7383//
7384// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7385// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7386// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7387// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7388// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7389// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 7390
9987f0c1
IC
7391var util = require('util/');
7392var hasOwn = Object.prototype.hasOwnProperty;
7393var pSlice = Array.prototype.slice;
7394var functionsHaveNames = (function () {
7395 return function foo() {}.name === 'foo';
7396}());
7397function pToString (obj) {
7398 return Object.prototype.toString.call(obj);
8b095871 7399}
9987f0c1
IC
7400function isView(arrbuf) {
7401 if (isBuffer(arrbuf)) {
7402 return false;
7403 }
7404 if (typeof global.ArrayBuffer !== 'function') {
7405 return false;
7406 }
7407 if (typeof ArrayBuffer.isView === 'function') {
7408 return ArrayBuffer.isView(arrbuf);
7409 }
7410 if (!arrbuf) {
7411 return false;
7412 }
7413 if (arrbuf instanceof DataView) {
7414 return true;
7415 }
7416 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
7417 return true;
7418 }
7419 return false;
8b095871 7420}
9987f0c1
IC
7421// 1. The assert module provides functions that throw
7422// AssertionError's when particular conditions are not met. The
7423// assert module must conform to the following interface.
8b095871 7424
9987f0c1 7425var assert = module.exports = ok;
8b095871 7426
9987f0c1
IC
7427// 2. The AssertionError is defined in assert.
7428// new assert.AssertionError({ message: message,
7429// actual: actual,
7430// expected: expected })
8b095871 7431
9987f0c1
IC
7432var regex = /\s*function\s+([^\(\s]*)\s*/;
7433// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
7434function getName(func) {
7435 if (!util.isFunction(func)) {
7436 return;
7437 }
7438 if (functionsHaveNames) {
7439 return func.name;
7440 }
7441 var str = func.toString();
7442 var match = str.match(regex);
7443 return match && match[1];
8b095871 7444}
9987f0c1
IC
7445assert.AssertionError = function AssertionError(options) {
7446 this.name = 'AssertionError';
7447 this.actual = options.actual;
7448 this.expected = options.expected;
7449 this.operator = options.operator;
7450 if (options.message) {
7451 this.message = options.message;
7452 this.generatedMessage = false;
7453 } else {
7454 this.message = getMessage(this);
7455 this.generatedMessage = true;
7456 }
7457 var stackStartFunction = options.stackStartFunction || fail;
7458 if (Error.captureStackTrace) {
7459 Error.captureStackTrace(this, stackStartFunction);
7460 } else {
7461 // non v8 browsers so we can have a stacktrace
7462 var err = new Error();
7463 if (err.stack) {
7464 var out = err.stack;
8b095871 7465
9987f0c1
IC
7466 // try to strip useless frames
7467 var fn_name = getName(stackStartFunction);
7468 var idx = out.indexOf('\n' + fn_name);
7469 if (idx >= 0) {
7470 // once we have located the function frame
7471 // we need to strip out everything before it (and its line)
7472 var next_line = out.indexOf('\n', idx + 1);
7473 out = out.substring(next_line + 1);
7474 }
8b095871 7475
9987f0c1 7476 this.stack = out;
8b095871 7477 }
8b095871 7478 }
9987f0c1 7479};
8b095871 7480
9987f0c1
IC
7481// assert.AssertionError instanceof Error
7482util.inherits(assert.AssertionError, Error);
8b095871 7483
9987f0c1
IC
7484function truncate(s, n) {
7485 if (typeof s === 'string') {
7486 return s.length < n ? s : s.slice(0, n);
7487 } else {
7488 return s;
8b095871 7489 }
8b095871 7490}
9987f0c1
IC
7491function inspect(something) {
7492 if (functionsHaveNames || !util.isFunction(something)) {
7493 return util.inspect(something);
7494 }
7495 var rawname = getName(something);
7496 var name = rawname ? ': ' + rawname : '';
7497 return '[Function' + name + ']';
8b095871 7498}
9987f0c1
IC
7499function getMessage(self) {
7500 return truncate(inspect(self.actual), 128) + ' ' +
7501 self.operator + ' ' +
7502 truncate(inspect(self.expected), 128);
8b095871
IC
7503}
7504
9987f0c1
IC
7505// At present only the three keys mentioned above are used and
7506// understood by the spec. Implementations or sub modules can pass
7507// other keys to the AssertionError's constructor - they will be
7508// ignored.
3af2954a 7509
9987f0c1
IC
7510// 3. All of the following functions must throw an AssertionError
7511// when a corresponding condition is not met, with a message that
7512// may be undefined if not provided. All assertion methods provide
7513// both the actual and expected values to the assertion error for
7514// display purposes.
8b095871 7515
9987f0c1
IC
7516function fail(actual, expected, message, operator, stackStartFunction) {
7517 throw new assert.AssertionError({
7518 message: message,
7519 actual: actual,
7520 expected: expected,
7521 operator: operator,
7522 stackStartFunction: stackStartFunction
7523 });
8b095871
IC
7524}
7525
9987f0c1
IC
7526// EXTENSION! allows for well behaved errors defined elsewhere.
7527assert.fail = fail;
8b095871 7528
9987f0c1
IC
7529// 4. Pure assertion tests whether a value is truthy, as determined
7530// by !!guard.
7531// assert.ok(guard, message_opt);
7532// This statement is equivalent to assert.equal(true, !!guard,
7533// message_opt);. To test strictly for the value true, use
7534// assert.strictEqual(true, guard, message_opt);.
8b095871 7535
9987f0c1
IC
7536function ok(value, message) {
7537 if (!value) fail(value, true, message, '==', assert.ok);
8b095871 7538}
9987f0c1 7539assert.ok = ok;
8b095871 7540
9987f0c1
IC
7541// 5. The equality assertion tests shallow, coercive equality with
7542// ==.
7543// assert.equal(actual, expected, message_opt);
7544
7545assert.equal = function equal(actual, expected, message) {
7546 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7547};
7548
7549// 6. The non-equality assertion tests for whether two objects are not equal
7550// with != assert.notEqual(actual, expected, message_opt);
7551
7552assert.notEqual = function notEqual(actual, expected, message) {
7553 if (actual == expected) {
7554 fail(actual, expected, message, '!=', assert.notEqual);
8b095871 7555 }
9987f0c1 7556};
8b095871 7557
9987f0c1
IC
7558// 7. The equivalence assertion tests a deep equality relation.
7559// assert.deepEqual(actual, expected, message_opt);
7560
7561assert.deepEqual = function deepEqual(actual, expected, message) {
7562 if (!_deepEqual(actual, expected, false)) {
7563 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8b095871 7564 }
9987f0c1
IC
7565};
7566
7567assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
7568 if (!_deepEqual(actual, expected, true)) {
7569 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
7570 }
7571};
7572
7573function _deepEqual(actual, expected, strict, memos) {
7574 // 7.1. All identical values are equivalent, as determined by ===.
7575 if (actual === expected) {
7576 return true;
7577 } else if (isBuffer(actual) && isBuffer(expected)) {
7578 return compare(actual, expected) === 0;
7579
7580 // 7.2. If the expected value is a Date object, the actual value is
7581 // equivalent if it is also a Date object that refers to the same time.
7582 } else if (util.isDate(actual) && util.isDate(expected)) {
7583 return actual.getTime() === expected.getTime();
7584
7585 // 7.3 If the expected value is a RegExp object, the actual value is
7586 // equivalent if it is also a RegExp object with the same source and
7587 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7588 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7589 return actual.source === expected.source &&
7590 actual.global === expected.global &&
7591 actual.multiline === expected.multiline &&
7592 actual.lastIndex === expected.lastIndex &&
7593 actual.ignoreCase === expected.ignoreCase;
7594
7595 // 7.4. Other pairs that do not both pass typeof value == 'object',
7596 // equivalence is determined by ==.
7597 } else if ((actual === null || typeof actual !== 'object') &&
7598 (expected === null || typeof expected !== 'object')) {
7599 return strict ? actual === expected : actual == expected;
7600
7601 // If both values are instances of typed arrays, wrap their underlying
7602 // ArrayBuffers in a Buffer each to increase performance
7603 // This optimization requires the arrays to have the same type as checked by
7604 // Object.prototype.toString (aka pToString). Never perform binary
7605 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
7606 // bit patterns are not identical.
7607 } else if (isView(actual) && isView(expected) &&
7608 pToString(actual) === pToString(expected) &&
7609 !(actual instanceof Float32Array ||
7610 actual instanceof Float64Array)) {
7611 return compare(new Uint8Array(actual.buffer),
7612 new Uint8Array(expected.buffer)) === 0;
7613
7614 // 7.5 For all other Object pairs, including Array objects, equivalence is
7615 // determined by having the same number of owned properties (as verified
7616 // with Object.prototype.hasOwnProperty.call), the same set of keys
7617 // (although not necessarily the same order), equivalent values for every
7618 // corresponding key, and an identical 'prototype' property. Note: this
7619 // accounts for both named and indexed properties on Arrays.
7620 } else if (isBuffer(actual) !== isBuffer(expected)) {
7621 return false;
7622 } else {
7623 memos = memos || {actual: [], expected: []};
7624
7625 var actualIndex = memos.actual.indexOf(actual);
7626 if (actualIndex !== -1) {
7627 if (actualIndex === memos.expected.indexOf(expected)) {
7628 return true;
7629 }
7630 }
7631
7632 memos.actual.push(actual);
7633 memos.expected.push(expected);
7634
7635 return objEquiv(actual, expected, strict, memos);
7636 }
7637}
7638
7639function isArguments(object) {
7640 return Object.prototype.toString.call(object) == '[object Arguments]';
7641}
7642
7643function objEquiv(a, b, strict, actualVisitedObjects) {
7644 if (a === null || a === undefined || b === null || b === undefined)
7645 return false;
7646 // if one is a primitive, the other must be same
7647 if (util.isPrimitive(a) || util.isPrimitive(b))
7648 return a === b;
7649 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
7650 return false;
7651 var aIsArgs = isArguments(a);
7652 var bIsArgs = isArguments(b);
7653 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7654 return false;
7655 if (aIsArgs) {
7656 a = pSlice.call(a);
7657 b = pSlice.call(b);
7658 return _deepEqual(a, b, strict);
7659 }
7660 var ka = objectKeys(a);
7661 var kb = objectKeys(b);
7662 var key, i;
7663 // having the same number of owned properties (keys incorporates
7664 // hasOwnProperty)
7665 if (ka.length !== kb.length)
7666 return false;
7667 //the same set of keys (although not necessarily the same order),
7668 ka.sort();
7669 kb.sort();
7670 //~~~cheap key test
7671 for (i = ka.length - 1; i >= 0; i--) {
7672 if (ka[i] !== kb[i])
7673 return false;
7674 }
7675 //equivalent values for every corresponding key, and
7676 //~~~possibly expensive deep test
7677 for (i = ka.length - 1; i >= 0; i--) {
7678 key = ka[i];
7679 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
7680 return false;
7681 }
7682 return true;
7683}
7684
7685// 8. The non-equivalence assertion tests for any deep inequality.
7686// assert.notDeepEqual(actual, expected, message_opt);
7687
7688assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7689 if (_deepEqual(actual, expected, false)) {
7690 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7691 }
7692};
7693
7694assert.notDeepStrictEqual = notDeepStrictEqual;
7695function notDeepStrictEqual(actual, expected, message) {
7696 if (_deepEqual(actual, expected, true)) {
7697 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
7698 }
7699}
7700
7701
7702// 9. The strict equality assertion tests strict equality, as determined by ===.
7703// assert.strictEqual(actual, expected, message_opt);
7704
7705assert.strictEqual = function strictEqual(actual, expected, message) {
7706 if (actual !== expected) {
7707 fail(actual, expected, message, '===', assert.strictEqual);
7708 }
7709};
7710
7711// 10. The strict non-equality assertion tests for strict inequality, as
7712// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7713
7714assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7715 if (actual === expected) {
7716 fail(actual, expected, message, '!==', assert.notStrictEqual);
7717 }
7718};
7719
7720function expectedException(actual, expected) {
7721 if (!actual || !expected) {
7722 return false;
7723 }
7724
7725 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7726 return expected.test(actual);
7727 }
7728
7729 try {
7730 if (actual instanceof expected) {
7731 return true;
7732 }
7733 } catch (e) {
7734 // Ignore. The instanceof check doesn't work for arrow functions.
7735 }
7736
7737 if (Error.isPrototypeOf(expected)) {
7738 return false;
7739 }
7740
7741 return expected.call({}, actual) === true;
7742}
7743
7744function _tryBlock(block) {
7745 var error;
7746 try {
7747 block();
7748 } catch (e) {
7749 error = e;
7750 }
7751 return error;
7752}
7753
7754function _throws(shouldThrow, block, expected, message) {
7755 var actual;
7756
7757 if (typeof block !== 'function') {
7758 throw new TypeError('"block" argument must be a function');
7759 }
7760
7761 if (typeof expected === 'string') {
7762 message = expected;
7763 expected = null;
7764 }
7765
7766 actual = _tryBlock(block);
7767
7768 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7769 (message ? ' ' + message : '.');
7770
7771 if (shouldThrow && !actual) {
7772 fail(actual, expected, 'Missing expected exception' + message);
7773 }
7774
7775 var userProvidedMessage = typeof message === 'string';
7776 var isUnwantedException = !shouldThrow && util.isError(actual);
7777 var isUnexpectedException = !shouldThrow && actual && !expected;
7778
7779 if ((isUnwantedException &&
7780 userProvidedMessage &&
7781 expectedException(actual, expected)) ||
7782 isUnexpectedException) {
7783 fail(actual, expected, 'Got unwanted exception' + message);
7784 }
7785
7786 if ((shouldThrow && actual && expected &&
7787 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7788 throw actual;
7789 }
7790}
7791
7792// 11. Expected to throw an error:
7793// assert.throws(block, Error_opt, message_opt);
7794
7795assert.throws = function(block, /*optional*/error, /*optional*/message) {
7796 _throws(true, block, error, message);
7797};
7798
7799// EXTENSION! This is annoying to write outside this module.
7800assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
7801 _throws(false, block, error, message);
7802};
7803
7804assert.ifError = function(err) { if (err) throw err; };
7805
7806var objectKeys = Object.keys || function (obj) {
7807 var keys = [];
7808 for (var key in obj) {
7809 if (hasOwn.call(obj, key)) keys.push(key);
7810 }
7811 return keys;
7812};
7813
7814}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7815},{"util/":32}],2:[function(require,module,exports){
7816'use strict'
7817
7818exports.byteLength = byteLength
7819exports.toByteArray = toByteArray
7820exports.fromByteArray = fromByteArray
7821
7822var lookup = []
7823var revLookup = []
7824var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
7825
7826var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
7827for (var i = 0, len = code.length; i < len; ++i) {
7828 lookup[i] = code[i]
7829 revLookup[code.charCodeAt(i)] = i
7830}
7831
7832revLookup['-'.charCodeAt(0)] = 62
7833revLookup['_'.charCodeAt(0)] = 63
7834
7835function placeHoldersCount (b64) {
7836 var len = b64.length
7837 if (len % 4 > 0) {
7838 throw new Error('Invalid string. Length must be a multiple of 4')
7839 }
7840
7841 // the number of equal signs (place holders)
7842 // if there are two placeholders, than the two characters before it
7843 // represent one byte
7844 // if there is only one, then the three characters before it represent 2 bytes
7845 // this is just a cheap hack to not do indexOf twice
7846 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
7847}
7848
7849function byteLength (b64) {
7850 // base64 is 4/3 + up to two characters of the original data
7851 return (b64.length * 3 / 4) - placeHoldersCount(b64)
7852}
7853
7854function toByteArray (b64) {
7855 var i, l, tmp, placeHolders, arr
7856 var len = b64.length
7857 placeHolders = placeHoldersCount(b64)
7858
7859 arr = new Arr((len * 3 / 4) - placeHolders)
7860
7861 // if there are placeholders, only get up to the last complete 4 chars
7862 l = placeHolders > 0 ? len - 4 : len
7863
7864 var L = 0
7865
7866 for (i = 0; i < l; i += 4) {
7867 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
7868 arr[L++] = (tmp >> 16) & 0xFF
7869 arr[L++] = (tmp >> 8) & 0xFF
7870 arr[L++] = tmp & 0xFF
7871 }
7872
7873 if (placeHolders === 2) {
7874 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
7875 arr[L++] = tmp & 0xFF
7876 } else if (placeHolders === 1) {
7877 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
7878 arr[L++] = (tmp >> 8) & 0xFF
7879 arr[L++] = tmp & 0xFF
7880 }
7881
7882 return arr
7883}
7884
7885function tripletToBase64 (num) {
7886 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
7887}
7888
7889function encodeChunk (uint8, start, end) {
7890 var tmp
7891 var output = []
7892 for (var i = start; i < end; i += 3) {
7893 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
7894 output.push(tripletToBase64(tmp))
7895 }
7896 return output.join('')
7897}
7898
7899function fromByteArray (uint8) {
7900 var tmp
7901 var len = uint8.length
7902 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
7903 var output = ''
7904 var parts = []
7905 var maxChunkLength = 16383 // must be multiple of 3
7906
7907 // go through the array every three bytes, we'll deal with trailing stuff later
7908 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
7909 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
7910 }
7911
7912 // pad the end with zeros, but make sure to not forget the extra bytes
7913 if (extraBytes === 1) {
7914 tmp = uint8[len - 1]
7915 output += lookup[tmp >> 2]
7916 output += lookup[(tmp << 4) & 0x3F]
7917 output += '=='
7918 } else if (extraBytes === 2) {
7919 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
7920 output += lookup[tmp >> 10]
7921 output += lookup[(tmp >> 4) & 0x3F]
7922 output += lookup[(tmp << 2) & 0x3F]
7923 output += '='
7924 }
7925
7926 parts.push(output)
7927
7928 return parts.join('')
7929}
7930
7931},{}],3:[function(require,module,exports){
7932
7933},{}],4:[function(require,module,exports){
7934/*!
7935 * The buffer module from node.js, for the browser.
7936 *
7937 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7938 * @license MIT
7939 */
7940/* eslint-disable no-proto */
7941
7942'use strict'
7943
7944var base64 = require('base64-js')
7945var ieee754 = require('ieee754')
7946
7947exports.Buffer = Buffer
7948exports.SlowBuffer = SlowBuffer
7949exports.INSPECT_MAX_BYTES = 50
7950
7951var K_MAX_LENGTH = 0x7fffffff
7952exports.kMaxLength = K_MAX_LENGTH
7953
7954/**
7955 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7956 * === true Use Uint8Array implementation (fastest)
7957 * === false Print warning and recommend using `buffer` v4.x which has an Object
7958 * implementation (most compatible, even IE6)
7959 *
7960 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7961 * Opera 11.6+, iOS 4.2+.
7962 *
7963 * We report that the browser does not support typed arrays if the are not subclassable
7964 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
7965 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
7966 * for __proto__ and has a buggy typed array implementation.
7967 */
7968Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
7969
7970if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
7971 typeof console.error === 'function') {
7972 console.error(
7973 'This browser lacks typed array (Uint8Array) support which is required by ' +
7974 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
7975 )
7976}
7977
7978function typedArraySupport () {
7979 // Can typed array instances can be augmented?
7980 try {
7981 var arr = new Uint8Array(1)
7982 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
7983 return arr.foo() === 42
7984 } catch (e) {
7985 return false
7986 }
7987}
7988
7989function createBuffer (length) {
7990 if (length > K_MAX_LENGTH) {
7991 throw new RangeError('Invalid typed array length')
7992 }
7993 // Return an augmented `Uint8Array` instance
7994 var buf = new Uint8Array(length)
7995 buf.__proto__ = Buffer.prototype
7996 return buf
7997}
7998
7999/**
8000 * The Buffer constructor returns instances of `Uint8Array` that have their
8001 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
8002 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
8003 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
8004 * returns a single octet.
8005 *
8006 * The `Uint8Array` prototype remains unmodified.
8007 */
8008
8009function Buffer (arg, encodingOrOffset, length) {
8010 // Common case.
8011 if (typeof arg === 'number') {
8012 if (typeof encodingOrOffset === 'string') {
8013 throw new Error(
8014 'If encoding is specified then the first argument must be a string'
8015 )
8016 }
8017 return allocUnsafe(arg)
8018 }
8019 return from(arg, encodingOrOffset, length)
8020}
8021
8022// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
8023if (typeof Symbol !== 'undefined' && Symbol.species &&
8024 Buffer[Symbol.species] === Buffer) {
8025 Object.defineProperty(Buffer, Symbol.species, {
8026 value: null,
8027 configurable: true,
8028 enumerable: false,
8029 writable: false
8030 })
8031}
8032
8033Buffer.poolSize = 8192 // not used by this implementation
8034
8035function from (value, encodingOrOffset, length) {
8036 if (typeof value === 'number') {
8037 throw new TypeError('"value" argument must not be a number')
8038 }
8039
8040 if (value instanceof ArrayBuffer) {
8041 return fromArrayBuffer(value, encodingOrOffset, length)
8042 }
8043
8044 if (typeof value === 'string') {
8045 return fromString(value, encodingOrOffset)
8046 }
8047
8048 return fromObject(value)
8049}
8050
8051/**
8052 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
8053 * if value is a number.
8054 * Buffer.from(str[, encoding])
8055 * Buffer.from(array)
8056 * Buffer.from(buffer)
8057 * Buffer.from(arrayBuffer[, byteOffset[, length]])
8058 **/
8059Buffer.from = function (value, encodingOrOffset, length) {
8060 return from(value, encodingOrOffset, length)
8061}
8062
8063// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
8064// https://github.com/feross/buffer/pull/148
8065Buffer.prototype.__proto__ = Uint8Array.prototype
8066Buffer.__proto__ = Uint8Array
8067
8068function assertSize (size) {
8069 if (typeof size !== 'number') {
8070 throw new TypeError('"size" argument must be a number')
8071 } else if (size < 0) {
8072 throw new RangeError('"size" argument must not be negative')
8073 }
8074}
8075
8076function alloc (size, fill, encoding) {
8077 assertSize(size)
8078 if (size <= 0) {
8079 return createBuffer(size)
8080 }
8081 if (fill !== undefined) {
8082 // Only pay attention to encoding if it's a string. This
8083 // prevents accidentally sending in a number that would
8084 // be interpretted as a start offset.
8085 return typeof encoding === 'string'
8086 ? createBuffer(size).fill(fill, encoding)
8087 : createBuffer(size).fill(fill)
8088 }
8089 return createBuffer(size)
8090}
8091
8092/**
8093 * Creates a new filled Buffer instance.
8094 * alloc(size[, fill[, encoding]])
8095 **/
8096Buffer.alloc = function (size, fill, encoding) {
8097 return alloc(size, fill, encoding)
8098}
8099
8100function allocUnsafe (size) {
8101 assertSize(size)
8102 return createBuffer(size < 0 ? 0 : checked(size) | 0)
8103}
8104
8105/**
8106 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
8107 * */
8108Buffer.allocUnsafe = function (size) {
8109 return allocUnsafe(size)
8110}
8111/**
8112 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
8113 */
8114Buffer.allocUnsafeSlow = function (size) {
8115 return allocUnsafe(size)
8116}
8117
8118function fromString (string, encoding) {
8119 if (typeof encoding !== 'string' || encoding === '') {
8120 encoding = 'utf8'
8121 }
8122
8123 if (!Buffer.isEncoding(encoding)) {
8124 throw new TypeError('"encoding" must be a valid string encoding')
8125 }
8126
8127 var length = byteLength(string, encoding) | 0
8128 var buf = createBuffer(length)
8129
8130 var actual = buf.write(string, encoding)
8131
8132 if (actual !== length) {
8133 // Writing a hex string, for example, that contains invalid characters will
8134 // cause everything after the first invalid character to be ignored. (e.g.
8135 // 'abxxcd' will be treated as 'ab')
8136 buf = buf.slice(0, actual)
8137 }
8138
8139 return buf
8140}
8141
8142function fromArrayLike (array) {
8143 var length = array.length < 0 ? 0 : checked(array.length) | 0
8144 var buf = createBuffer(length)
8145 for (var i = 0; i < length; i += 1) {
8146 buf[i] = array[i] & 255
8147 }
8148 return buf
8149}
8150
8151function fromArrayBuffer (array, byteOffset, length) {
8152 if (byteOffset < 0 || array.byteLength < byteOffset) {
8153 throw new RangeError('\'offset\' is out of bounds')
8154 }
8155
8156 if (array.byteLength < byteOffset + (length || 0)) {
8157 throw new RangeError('\'length\' is out of bounds')
8158 }
8159
8160 var buf
8161 if (byteOffset === undefined && length === undefined) {
8162 buf = new Uint8Array(array)
8163 } else if (length === undefined) {
8164 buf = new Uint8Array(array, byteOffset)
8165 } else {
8166 buf = new Uint8Array(array, byteOffset, length)
8167 }
8168
8169 // Return an augmented `Uint8Array` instance
8170 buf.__proto__ = Buffer.prototype
8171 return buf
8172}
8173
8174function fromObject (obj) {
8175 if (Buffer.isBuffer(obj)) {
8176 var len = checked(obj.length) | 0
8177 var buf = createBuffer(len)
8178
8179 if (buf.length === 0) {
8180 return buf
8181 }
8182
8183 obj.copy(buf, 0, 0, len)
8184 return buf
8185 }
8186
8187 if (obj) {
8188 if (isArrayBufferView(obj) || 'length' in obj) {
8189 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
8190 return createBuffer(0)
8191 }
8192 return fromArrayLike(obj)
8193 }
8194
8195 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
8196 return fromArrayLike(obj.data)
8197 }
8198 }
8199
8200 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
8201}
8202
8203function checked (length) {
8204 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
8205 // length is NaN (which is otherwise coerced to zero.)
8206 if (length >= K_MAX_LENGTH) {
8207 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
8208 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
8209 }
8210 return length | 0
8211}
8212
8213function SlowBuffer (length) {
8214 if (+length != length) { // eslint-disable-line eqeqeq
8215 length = 0
8216 }
8217 return Buffer.alloc(+length)
8218}
8219
8220Buffer.isBuffer = function isBuffer (b) {
8221 return b != null && b._isBuffer === true
8222}
8223
8224Buffer.compare = function compare (a, b) {
8225 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
8226 throw new TypeError('Arguments must be Buffers')
8227 }
8228
8229 if (a === b) return 0
8230
8231 var x = a.length
8232 var y = b.length
8233
8234 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
8235 if (a[i] !== b[i]) {
8236 x = a[i]
8237 y = b[i]
8238 break
8239 }
8b095871 8240 }
9987f0c1
IC
8241
8242 if (x < y) return -1
8243 if (y < x) return 1
8244 return 0
8b095871
IC
8245}
8246
9987f0c1
IC
8247Buffer.isEncoding = function isEncoding (encoding) {
8248 switch (String(encoding).toLowerCase()) {
8249 case 'hex':
8250 case 'utf8':
8251 case 'utf-8':
8252 case 'ascii':
8253 case 'latin1':
8254 case 'binary':
8255 case 'base64':
8256 case 'ucs2':
8257 case 'ucs-2':
8258 case 'utf16le':
8259 case 'utf-16le':
8260 return true
8261 default:
8262 return false
8b095871 8263 }
9987f0c1
IC
8264}
8265
8266Buffer.concat = function concat (list, length) {
8267 if (!Array.isArray(list)) {
8268 throw new TypeError('"list" argument must be an Array of Buffers')
8269 }
8270
8271 if (list.length === 0) {
8272 return Buffer.alloc(0)
8273 }
8274
8275 var i
8276 if (length === undefined) {
8277 length = 0
8278 for (i = 0; i < list.length; ++i) {
8279 length += list[i].length
8b095871 8280 }
9987f0c1
IC
8281 }
8282
8283 var buffer = Buffer.allocUnsafe(length)
8284 var pos = 0
8285 for (i = 0; i < list.length; ++i) {
8286 var buf = list[i]
8287 if (!Buffer.isBuffer(buf)) {
8288 throw new TypeError('"list" argument must be an Array of Buffers')
8b095871 8289 }
9987f0c1
IC
8290 buf.copy(buffer, pos)
8291 pos += buf.length
8b095871 8292 }
9987f0c1 8293 return buffer
8b095871
IC
8294}
8295
9987f0c1
IC
8296function byteLength (string, encoding) {
8297 if (Buffer.isBuffer(string)) {
8298 return string.length
8299 }
8300 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
8301 return string.byteLength
8302 }
8303 if (typeof string !== 'string') {
8304 string = '' + string
8305 }
8306
8307 var len = string.length
8308 if (len === 0) return 0
8309
8310 // Use a for loop to avoid recursion
8311 var loweredCase = false
8312 for (;;) {
8313 switch (encoding) {
8314 case 'ascii':
8315 case 'latin1':
8316 case 'binary':
8317 return len
8318 case 'utf8':
8319 case 'utf-8':
8320 case undefined:
8321 return utf8ToBytes(string).length
8322 case 'ucs2':
8323 case 'ucs-2':
8324 case 'utf16le':
8325 case 'utf-16le':
8326 return len * 2
8327 case 'hex':
8328 return len >>> 1
8329 case 'base64':
8330 return base64ToBytes(string).length
8331 default:
8332 if (loweredCase) return utf8ToBytes(string).length // assume utf8
8333 encoding = ('' + encoding).toLowerCase()
8334 loweredCase = true
8335 }
8336 }
8b095871 8337}
9987f0c1 8338Buffer.byteLength = byteLength
8b095871 8339
9987f0c1
IC
8340function slowToString (encoding, start, end) {
8341 var loweredCase = false
8342
8343 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
8344 // property of a typed array.
8345
8346 // This behaves neither like String nor Uint8Array in that we set start/end
8347 // to their upper/lower bounds if the value passed is out of range.
8348 // undefined is handled specially as per ECMA-262 6th Edition,
8349 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
8350 if (start === undefined || start < 0) {
8351 start = 0
8352 }
8353 // Return early if start > this.length. Done here to prevent potential uint32
8354 // coercion fail below.
8355 if (start > this.length) {
8356 return ''
8357 }
8358
8359 if (end === undefined || end > this.length) {
8360 end = this.length
8361 }
8362
8363 if (end <= 0) {
8364 return ''
8365 }
8366
8367 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
8368 end >>>= 0
8369 start >>>= 0
8370
8371 if (end <= start) {
8372 return ''
8373 }
8374
8375 if (!encoding) encoding = 'utf8'
8376
8377 while (true) {
8378 switch (encoding) {
8379 case 'hex':
8380 return hexSlice(this, start, end)
8381
8382 case 'utf8':
8383 case 'utf-8':
8384 return utf8Slice(this, start, end)
8385
8386 case 'ascii':
8387 return asciiSlice(this, start, end)
8388
8389 case 'latin1':
8390 case 'binary':
8391 return latin1Slice(this, start, end)
8392
8393 case 'base64':
8394 return base64Slice(this, start, end)
8395
8396 case 'ucs2':
8397 case 'ucs-2':
8398 case 'utf16le':
8399 case 'utf-16le':
8400 return utf16leSlice(this, start, end)
8401
8402 default:
8403 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8404 encoding = (encoding + '').toLowerCase()
8405 loweredCase = true
8b095871
IC
8406 }
8407 }
8b095871
IC
8408}
8409
9987f0c1
IC
8410// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
8411// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
8412// reliably in a browserify context because there could be multiple different
8413// copies of the 'buffer' package in use. This method works even for Buffer
8414// instances that were created from another copy of the `buffer` package.
8415// See: https://github.com/feross/buffer/issues/154
8416Buffer.prototype._isBuffer = true
8417
8418function swap (b, n, m) {
8419 var i = b[n]
8420 b[n] = b[m]
8421 b[m] = i
8422}
8423
8424Buffer.prototype.swap16 = function swap16 () {
8425 var len = this.length
8426 if (len % 2 !== 0) {
8427 throw new RangeError('Buffer size must be a multiple of 16-bits')
8b095871 8428 }
9987f0c1
IC
8429 for (var i = 0; i < len; i += 2) {
8430 swap(this, i, i + 1)
8b095871 8431 }
9987f0c1
IC
8432 return this
8433}
8434
8435Buffer.prototype.swap32 = function swap32 () {
8436 var len = this.length
8437 if (len % 4 !== 0) {
8438 throw new RangeError('Buffer size must be a multiple of 32-bits')
8b095871 8439 }
9987f0c1
IC
8440 for (var i = 0; i < len; i += 4) {
8441 swap(this, i, i + 3)
8442 swap(this, i + 1, i + 2)
8443 }
8444 return this
8445}
8446
8447Buffer.prototype.swap64 = function swap64 () {
8448 var len = this.length
8449 if (len % 8 !== 0) {
8450 throw new RangeError('Buffer size must be a multiple of 64-bits')
8451 }
8452 for (var i = 0; i < len; i += 8) {
8453 swap(this, i, i + 7)
8454 swap(this, i + 1, i + 6)
8455 swap(this, i + 2, i + 5)
8456 swap(this, i + 3, i + 4)
8457 }
8458 return this
8459}
8460
8461Buffer.prototype.toString = function toString () {
8462 var length = this.length
8463 if (length === 0) return ''
8464 if (arguments.length === 0) return utf8Slice(this, 0, length)
8465 return slowToString.apply(this, arguments)
8466}
8467
8468Buffer.prototype.equals = function equals (b) {
8469 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8470 if (this === b) return true
8471 return Buffer.compare(this, b) === 0
8472}
8473
8474Buffer.prototype.inspect = function inspect () {
8475 var str = ''
8476 var max = exports.INSPECT_MAX_BYTES
8477 if (this.length > 0) {
8478 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8479 if (this.length > max) str += ' ... '
8480 }
8481 return '<Buffer ' + str + '>'
8482}
8483
8484Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
8485 if (!Buffer.isBuffer(target)) {
8486 throw new TypeError('Argument must be a Buffer')
8487 }
8488
8489 if (start === undefined) {
8490 start = 0
8491 }
8492 if (end === undefined) {
8493 end = target ? target.length : 0
8494 }
8495 if (thisStart === undefined) {
8496 thisStart = 0
8497 }
8498 if (thisEnd === undefined) {
8499 thisEnd = this.length
8500 }
8501
8502 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
8503 throw new RangeError('out of range index')
8504 }
8505
8506 if (thisStart >= thisEnd && start >= end) {
8507 return 0
8508 }
8509 if (thisStart >= thisEnd) {
8510 return -1
8511 }
8512 if (start >= end) {
8513 return 1
8514 }
8515
8516 start >>>= 0
8517 end >>>= 0
8518 thisStart >>>= 0
8519 thisEnd >>>= 0
8520
8521 if (this === target) return 0
8522
8523 var x = thisEnd - thisStart
8524 var y = end - start
8525 var len = Math.min(x, y)
8526
8527 var thisCopy = this.slice(thisStart, thisEnd)
8528 var targetCopy = target.slice(start, end)
8529
8530 for (var i = 0; i < len; ++i) {
8531 if (thisCopy[i] !== targetCopy[i]) {
8532 x = thisCopy[i]
8533 y = targetCopy[i]
8534 break
8535 }
8536 }
8537
8538 if (x < y) return -1
8539 if (y < x) return 1
8540 return 0
8541}
8542
8543// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
8544// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
8545//
8546// Arguments:
8547// - buffer - a Buffer to search
8548// - val - a string, Buffer, or number
8549// - byteOffset - an index into `buffer`; will be clamped to an int32
8550// - encoding - an optional encoding, relevant is val is a string
8551// - dir - true for indexOf, false for lastIndexOf
8552function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
8553 // Empty buffer means no match
8554 if (buffer.length === 0) return -1
8555
8556 // Normalize byteOffset
8557 if (typeof byteOffset === 'string') {
8558 encoding = byteOffset
8559 byteOffset = 0
8560 } else if (byteOffset > 0x7fffffff) {
8561 byteOffset = 0x7fffffff
8562 } else if (byteOffset < -0x80000000) {
8563 byteOffset = -0x80000000
8564 }
8565 byteOffset = +byteOffset // Coerce to Number.
8566 if (numberIsNaN(byteOffset)) {
8567 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
8568 byteOffset = dir ? 0 : (buffer.length - 1)
8569 }
8570
8571 // Normalize byteOffset: negative offsets start from the end of the buffer
8572 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
8573 if (byteOffset >= buffer.length) {
8574 if (dir) return -1
8575 else byteOffset = buffer.length - 1
8576 } else if (byteOffset < 0) {
8577 if (dir) byteOffset = 0
8578 else return -1
8579 }
8580
8581 // Normalize val
8582 if (typeof val === 'string') {
8583 val = Buffer.from(val, encoding)
8584 }
8585
8586 // Finally, search either indexOf (if dir is true) or lastIndexOf
8587 if (Buffer.isBuffer(val)) {
8588 // Special case: looking for empty string/buffer always fails
8589 if (val.length === 0) {
8590 return -1
8591 }
8592 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
8593 } else if (typeof val === 'number') {
8594 val = val & 0xFF // Search for a byte value [0-255]
8595 if (typeof Uint8Array.prototype.indexOf === 'function') {
8596 if (dir) {
8597 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
8598 } else {
8599 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
8600 }
8601 }
8602 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
8603 }
8604
8605 throw new TypeError('val must be string, number or Buffer')
8606}
8607
8608function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
8609 var indexSize = 1
8610 var arrLength = arr.length
8611 var valLength = val.length
8612
8613 if (encoding !== undefined) {
8614 encoding = String(encoding).toLowerCase()
8615 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
8616 encoding === 'utf16le' || encoding === 'utf-16le') {
8617 if (arr.length < 2 || val.length < 2) {
8618 return -1
8619 }
8620 indexSize = 2
8621 arrLength /= 2
8622 valLength /= 2
8623 byteOffset /= 2
8624 }
8625 }
8626
8627 function read (buf, i) {
8628 if (indexSize === 1) {
8629 return buf[i]
8630 } else {
8631 return buf.readUInt16BE(i * indexSize)
8632 }
8633 }
8634
8635 var i
8636 if (dir) {
8637 var foundIndex = -1
8638 for (i = byteOffset; i < arrLength; i++) {
8639 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
8640 if (foundIndex === -1) foundIndex = i
8641 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
8642 } else {
8643 if (foundIndex !== -1) i -= i - foundIndex
8644 foundIndex = -1
8645 }
8646 }
8647 } else {
8648 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
8649 for (i = byteOffset; i >= 0; i--) {
8650 var found = true
8651 for (var j = 0; j < valLength; j++) {
8652 if (read(arr, i + j) !== read(val, j)) {
8653 found = false
8654 break
8655 }
8656 }
8657 if (found) return i
8b095871
IC
8658 }
8659 }
8b095871 8660
9987f0c1 8661 return -1
8b095871
IC
8662}
8663
9987f0c1
IC
8664Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
8665 return this.indexOf(val, byteOffset, encoding) !== -1
8b095871
IC
8666}
8667
9987f0c1
IC
8668Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
8669 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
8b095871
IC
8670}
8671
9987f0c1
IC
8672Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
8673 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
8b095871
IC
8674}
8675
9987f0c1
IC
8676function hexWrite (buf, string, offset, length) {
8677 offset = Number(offset) || 0
8678 var remaining = buf.length - offset
8679 if (!length) {
8680 length = remaining
8681 } else {
8682 length = Number(length)
8683 if (length > remaining) {
8684 length = remaining
8685 }
8686 }
8b095871 8687
9987f0c1
IC
8688 // must be an even number of digits
8689 var strLen = string.length
8690 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
8b095871 8691
9987f0c1
IC
8692 if (length > strLen / 2) {
8693 length = strLen / 2
8694 }
8695 for (var i = 0; i < length; ++i) {
8696 var parsed = parseInt(string.substr(i * 2, 2), 16)
8697 if (numberIsNaN(parsed)) return i
8698 buf[offset + i] = parsed
8699 }
8700 return i
8b095871
IC
8701}
8702
9987f0c1
IC
8703function utf8Write (buf, string, offset, length) {
8704 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8705}
8b095871 8706
9987f0c1
IC
8707function asciiWrite (buf, string, offset, length) {
8708 return blitBuffer(asciiToBytes(string), buf, offset, length)
8b095871
IC
8709}
8710
9987f0c1
IC
8711function latin1Write (buf, string, offset, length) {
8712 return asciiWrite(buf, string, offset, length)
8b095871
IC
8713}
8714
9987f0c1
IC
8715function base64Write (buf, string, offset, length) {
8716 return blitBuffer(base64ToBytes(string), buf, offset, length)
8b095871
IC
8717}
8718
9987f0c1
IC
8719function ucs2Write (buf, string, offset, length) {
8720 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8b095871
IC
8721}
8722
9987f0c1
IC
8723Buffer.prototype.write = function write (string, offset, length, encoding) {
8724 // Buffer#write(string)
8725 if (offset === undefined) {
8726 encoding = 'utf8'
8727 length = this.length
8728 offset = 0
8729 // Buffer#write(string, encoding)
8730 } else if (length === undefined && typeof offset === 'string') {
8731 encoding = offset
8732 length = this.length
8733 offset = 0
8734 // Buffer#write(string, offset[, length][, encoding])
8735 } else if (isFinite(offset)) {
8736 offset = offset >>> 0
8737 if (isFinite(length)) {
8738 length = length >>> 0
8739 if (encoding === undefined) encoding = 'utf8'
8740 } else {
8741 encoding = length
8742 length = undefined
8b095871 8743 }
9987f0c1
IC
8744 } else {
8745 throw new Error(
8746 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
8747 )
8b095871 8748 }
8b095871 8749
9987f0c1
IC
8750 var remaining = this.length - offset
8751 if (length === undefined || length > remaining) length = remaining
8b095871 8752
9987f0c1
IC
8753 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8754 throw new RangeError('Attempt to write outside buffer bounds')
8755 }
8b095871 8756
9987f0c1 8757 if (!encoding) encoding = 'utf8'
8b095871 8758
9987f0c1
IC
8759 var loweredCase = false
8760 for (;;) {
8761 switch (encoding) {
8762 case 'hex':
8763 return hexWrite(this, string, offset, length)
8b095871 8764
9987f0c1
IC
8765 case 'utf8':
8766 case 'utf-8':
8767 return utf8Write(this, string, offset, length)
8b095871 8768
9987f0c1
IC
8769 case 'ascii':
8770 return asciiWrite(this, string, offset, length)
8b095871 8771
9987f0c1
IC
8772 case 'latin1':
8773 case 'binary':
8774 return latin1Write(this, string, offset, length)
8b095871 8775
9987f0c1
IC
8776 case 'base64':
8777 // Warning: maxLength not taken into account in base64Write
8778 return base64Write(this, string, offset, length)
8b095871 8779
9987f0c1
IC
8780 case 'ucs2':
8781 case 'ucs-2':
8782 case 'utf16le':
8783 case 'utf-16le':
8784 return ucs2Write(this, string, offset, length)
8b095871 8785
9987f0c1
IC
8786 default:
8787 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8788 encoding = ('' + encoding).toLowerCase()
8789 loweredCase = true
8790 }
8791 }
8b095871
IC
8792}
8793
9987f0c1
IC
8794Buffer.prototype.toJSON = function toJSON () {
8795 return {
8796 type: 'Buffer',
8797 data: Array.prototype.slice.call(this._arr || this, 0)
8798 }
8b095871
IC
8799}
8800
9987f0c1
IC
8801function base64Slice (buf, start, end) {
8802 if (start === 0 && end === buf.length) {
8803 return base64.fromByteArray(buf)
8804 } else {
8805 return base64.fromByteArray(buf.slice(start, end))
8806 }
8b095871
IC
8807}
8808
9987f0c1
IC
8809function utf8Slice (buf, start, end) {
8810 end = Math.min(buf.length, end)
8811 var res = []
8b095871 8812
9987f0c1
IC
8813 var i = start
8814 while (i < end) {
8815 var firstByte = buf[i]
8816 var codePoint = null
8817 var bytesPerSequence = (firstByte > 0xEF) ? 4
8818 : (firstByte > 0xDF) ? 3
8819 : (firstByte > 0xBF) ? 2
8820 : 1
8b095871 8821
9987f0c1
IC
8822 if (i + bytesPerSequence <= end) {
8823 var secondByte, thirdByte, fourthByte, tempCodePoint
8b095871 8824
9987f0c1
IC
8825 switch (bytesPerSequence) {
8826 case 1:
8827 if (firstByte < 0x80) {
8828 codePoint = firstByte
8829 }
8830 break
8831 case 2:
8832 secondByte = buf[i + 1]
8833 if ((secondByte & 0xC0) === 0x80) {
8834 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8835 if (tempCodePoint > 0x7F) {
8836 codePoint = tempCodePoint
8837 }
8838 }
8839 break
8840 case 3:
8841 secondByte = buf[i + 1]
8842 thirdByte = buf[i + 2]
8843 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
8844 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
8845 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
8846 codePoint = tempCodePoint
8847 }
8848 }
8849 break
8850 case 4:
8851 secondByte = buf[i + 1]
8852 thirdByte = buf[i + 2]
8853 fourthByte = buf[i + 3]
8854 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
8855 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
8856 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
8857 codePoint = tempCodePoint
8858 }
8859 }
8860 }
8b095871 8861 }
9987f0c1
IC
8862
8863 if (codePoint === null) {
8864 // we did not generate a valid codePoint so insert a
8865 // replacement char (U+FFFD) and advance only 1 byte
8866 codePoint = 0xFFFD
8867 bytesPerSequence = 1
8868 } else if (codePoint > 0xFFFF) {
8869 // encode to utf16 (surrogate pair dance)
8870 codePoint -= 0x10000
8871 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
8872 codePoint = 0xDC00 | codePoint & 0x3FF
8b095871 8873 }
9987f0c1
IC
8874
8875 res.push(codePoint)
8876 i += bytesPerSequence
8b095871 8877 }
9987f0c1
IC
8878
8879 return decodeCodePointsArray(res)
8880}
8881
8882// Based on http://stackoverflow.com/a/22747272/680742, the browser with
8883// the lowest limit is Chrome, with 0x10000 args.
8884// We go 1 magnitude less, for safety
8885var MAX_ARGUMENTS_LENGTH = 0x1000
8886
8887function decodeCodePointsArray (codePoints) {
8888 var len = codePoints.length
8889 if (len <= MAX_ARGUMENTS_LENGTH) {
8890 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
8b095871 8891 }
9987f0c1
IC
8892
8893 // Decode in chunks to avoid "call stack size exceeded".
8894 var res = ''
8895 var i = 0
8896 while (i < len) {
8897 res += String.fromCharCode.apply(
8898 String,
8899 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
8900 )
8901 }
8902 return res
8b095871
IC
8903}
8904
9987f0c1
IC
8905function asciiSlice (buf, start, end) {
8906 var ret = ''
8907 end = Math.min(buf.length, end)
8908
8909 for (var i = start; i < end; ++i) {
8910 ret += String.fromCharCode(buf[i] & 0x7F)
8b095871 8911 }
9987f0c1 8912 return ret
8b095871
IC
8913}
8914
9987f0c1
IC
8915function latin1Slice (buf, start, end) {
8916 var ret = ''
8917 end = Math.min(buf.length, end)
8918
8919 for (var i = start; i < end; ++i) {
8920 ret += String.fromCharCode(buf[i])
8b095871 8921 }
9987f0c1 8922 return ret
8b095871
IC
8923}
8924
9987f0c1
IC
8925function hexSlice (buf, start, end) {
8926 var len = buf.length
8b095871 8927
9987f0c1
IC
8928 if (!start || start < 0) start = 0
8929 if (!end || end < 0 || end > len) end = len
8b095871 8930
9987f0c1
IC
8931 var out = ''
8932 for (var i = start; i < end; ++i) {
8933 out += toHex(buf[i])
8934 }
8935 return out
8b095871
IC
8936}
8937
9987f0c1
IC
8938function utf16leSlice (buf, start, end) {
8939 var bytes = buf.slice(start, end)
8940 var res = ''
8941 for (var i = 0; i < bytes.length; i += 2) {
8942 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
8b095871 8943 }
9987f0c1 8944 return res
8b095871
IC
8945}
8946
9987f0c1
IC
8947Buffer.prototype.slice = function slice (start, end) {
8948 var len = this.length
8949 start = ~~start
8950 end = end === undefined ? len : ~~end
8b095871 8951
9987f0c1
IC
8952 if (start < 0) {
8953 start += len
8954 if (start < 0) start = 0
8955 } else if (start > len) {
8956 start = len
8957 }
8b095871 8958
9987f0c1
IC
8959 if (end < 0) {
8960 end += len
8961 if (end < 0) end = 0
8962 } else if (end > len) {
8963 end = len
8964 }
8965
8966 if (end < start) end = start
8967
8968 var newBuf = this.subarray(start, end)
8969 // Return an augmented `Uint8Array` instance
8970 newBuf.__proto__ = Buffer.prototype
8971 return newBuf
8b095871
IC
8972}
8973
9987f0c1
IC
8974/*
8975 * Need to make sure that buffer isn't trying to write out of bounds.
8976 */
8977function checkOffset (offset, ext, length) {
8978 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8979 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8b095871
IC
8980}
8981
9987f0c1
IC
8982Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8983 offset = offset >>> 0
8984 byteLength = byteLength >>> 0
8985 if (!noAssert) checkOffset(offset, byteLength, this.length)
8986
8987 var val = this[offset]
8988 var mul = 1
8989 var i = 0
8990 while (++i < byteLength && (mul *= 0x100)) {
8991 val += this[offset + i] * mul
8992 }
8993
8994 return val
8b095871
IC
8995}
8996
9987f0c1
IC
8997Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
8998 offset = offset >>> 0
8999 byteLength = byteLength >>> 0
9000 if (!noAssert) {
9001 checkOffset(offset, byteLength, this.length)
9002 }
9003
9004 var val = this[offset + --byteLength]
9005 var mul = 1
9006 while (byteLength > 0 && (mul *= 0x100)) {
9007 val += this[offset + --byteLength] * mul
9008 }
9009
9010 return val
8b095871
IC
9011}
9012
9987f0c1
IC
9013Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
9014 offset = offset >>> 0
9015 if (!noAssert) checkOffset(offset, 1, this.length)
9016 return this[offset]
8b095871
IC
9017}
9018
9987f0c1
IC
9019Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
9020 offset = offset >>> 0
9021 if (!noAssert) checkOffset(offset, 2, this.length)
9022 return this[offset] | (this[offset + 1] << 8)
8b095871
IC
9023}
9024
9987f0c1
IC
9025Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
9026 offset = offset >>> 0
9027 if (!noAssert) checkOffset(offset, 2, this.length)
9028 return (this[offset] << 8) | this[offset + 1]
8b095871
IC
9029}
9030
9987f0c1
IC
9031Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
9032 offset = offset >>> 0
9033 if (!noAssert) checkOffset(offset, 4, this.length)
9034
9035 return ((this[offset]) |
9036 (this[offset + 1] << 8) |
9037 (this[offset + 2] << 16)) +
9038 (this[offset + 3] * 0x1000000)
8b095871
IC
9039}
9040
9987f0c1
IC
9041Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
9042 offset = offset >>> 0
9043 if (!noAssert) checkOffset(offset, 4, this.length)
9044
9045 return (this[offset] * 0x1000000) +
9046 ((this[offset + 1] << 16) |
9047 (this[offset + 2] << 8) |
9048 this[offset + 3])
8b095871
IC
9049}
9050
9987f0c1
IC
9051Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
9052 offset = offset >>> 0
9053 byteLength = byteLength >>> 0
9054 if (!noAssert) checkOffset(offset, byteLength, this.length)
9055
9056 var val = this[offset]
9057 var mul = 1
9058 var i = 0
9059 while (++i < byteLength && (mul *= 0x100)) {
9060 val += this[offset + i] * mul
8b095871 9061 }
9987f0c1
IC
9062 mul *= 0x80
9063
9064 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9065
9066 return val
9067}
9068
9069Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
9070 offset = offset >>> 0
9071 byteLength = byteLength >>> 0
9072 if (!noAssert) checkOffset(offset, byteLength, this.length)
9073
9074 var i = byteLength
9075 var mul = 1
9076 var val = this[offset + --i]
9077 while (i > 0 && (mul *= 0x100)) {
9078 val += this[offset + --i] * mul
8b095871 9079 }
9987f0c1
IC
9080 mul *= 0x80
9081
9082 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9083
9084 return val
8b095871
IC
9085}
9086
9987f0c1
IC
9087Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
9088 offset = offset >>> 0
9089 if (!noAssert) checkOffset(offset, 1, this.length)
9090 if (!(this[offset] & 0x80)) return (this[offset])
9091 return ((0xff - this[offset] + 1) * -1)
8b095871
IC
9092}
9093
9987f0c1
IC
9094Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
9095 offset = offset >>> 0
9096 if (!noAssert) checkOffset(offset, 2, this.length)
9097 var val = this[offset] | (this[offset + 1] << 8)
9098 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9099}
9100
9987f0c1
IC
9101Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
9102 offset = offset >>> 0
9103 if (!noAssert) checkOffset(offset, 2, this.length)
9104 var val = this[offset + 1] | (this[offset] << 8)
9105 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9106}
9107
9987f0c1
IC
9108Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
9109 offset = offset >>> 0
9110 if (!noAssert) checkOffset(offset, 4, this.length)
9111
9112 return (this[offset]) |
9113 (this[offset + 1] << 8) |
9114 (this[offset + 2] << 16) |
9115 (this[offset + 3] << 24)
8b095871
IC
9116}
9117
9987f0c1
IC
9118Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
9119 offset = offset >>> 0
9120 if (!noAssert) checkOffset(offset, 4, this.length)
9121
9122 return (this[offset] << 24) |
9123 (this[offset + 1] << 16) |
9124 (this[offset + 2] << 8) |
9125 (this[offset + 3])
8b095871
IC
9126}
9127
9987f0c1
IC
9128Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
9129 offset = offset >>> 0
9130 if (!noAssert) checkOffset(offset, 4, this.length)
9131 return ieee754.read(this, offset, true, 23, 4)
8b095871
IC
9132}
9133
9987f0c1
IC
9134Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
9135 offset = offset >>> 0
9136 if (!noAssert) checkOffset(offset, 4, this.length)
9137 return ieee754.read(this, offset, false, 23, 4)
8b095871
IC
9138}
9139
9987f0c1
IC
9140Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
9141 offset = offset >>> 0
9142 if (!noAssert) checkOffset(offset, 8, this.length)
9143 return ieee754.read(this, offset, true, 52, 8)
8b095871
IC
9144}
9145
9987f0c1
IC
9146Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
9147 offset = offset >>> 0
9148 if (!noAssert) checkOffset(offset, 8, this.length)
9149 return ieee754.read(this, offset, false, 52, 8)
9150}
8b095871 9151
9987f0c1
IC
9152function checkInt (buf, value, offset, ext, max, min) {
9153 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
9154 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
9155 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9156}
9157
9158Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
9159 value = +value
9160 offset = offset >>> 0
9161 byteLength = byteLength >>> 0
9162 if (!noAssert) {
9163 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9164 checkInt(this, value, offset, byteLength, maxBytes, 0)
8b095871 9165 }
9987f0c1
IC
9166
9167 var mul = 1
9168 var i = 0
9169 this[offset] = value & 0xFF
9170 while (++i < byteLength && (mul *= 0x100)) {
9171 this[offset + i] = (value / mul) & 0xFF
8b095871 9172 }
8b095871 9173
9987f0c1 9174 return offset + byteLength
8b095871
IC
9175}
9176
9987f0c1
IC
9177Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
9178 value = +value
9179 offset = offset >>> 0
9180 byteLength = byteLength >>> 0
9181 if (!noAssert) {
9182 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9183 checkInt(this, value, offset, byteLength, maxBytes, 0)
9184 }
8b095871 9185
9987f0c1
IC
9186 var i = byteLength - 1
9187 var mul = 1
9188 this[offset + i] = value & 0xFF
9189 while (--i >= 0 && (mul *= 0x100)) {
9190 this[offset + i] = (value / mul) & 0xFF
9191 }
9192
9193 return offset + byteLength
8b095871
IC
9194}
9195
9987f0c1
IC
9196Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
9197 value = +value
9198 offset = offset >>> 0
9199 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
9200 this[offset] = (value & 0xff)
9201 return offset + 1
8b095871
IC
9202}
9203
9987f0c1
IC
9204Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
9205 value = +value
9206 offset = offset >>> 0
9207 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9208 this[offset] = (value & 0xff)
9209 this[offset + 1] = (value >>> 8)
9210 return offset + 2
8b095871
IC
9211}
9212
9987f0c1
IC
9213Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
9214 value = +value
9215 offset = offset >>> 0
9216 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9217 this[offset] = (value >>> 8)
9218 this[offset + 1] = (value & 0xff)
9219 return offset + 2
8b095871
IC
9220}
9221
9987f0c1
IC
9222Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
9223 value = +value
9224 offset = offset >>> 0
9225 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9226 this[offset + 3] = (value >>> 24)
9227 this[offset + 2] = (value >>> 16)
9228 this[offset + 1] = (value >>> 8)
9229 this[offset] = (value & 0xff)
9230 return offset + 4
8b095871
IC
9231}
9232
9987f0c1
IC
9233Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
9234 value = +value
9235 offset = offset >>> 0
9236 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9237 this[offset] = (value >>> 24)
9238 this[offset + 1] = (value >>> 16)
9239 this[offset + 2] = (value >>> 8)
9240 this[offset + 3] = (value & 0xff)
9241 return offset + 4
8b095871
IC
9242}
9243
9987f0c1
IC
9244Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
9245 value = +value
9246 offset = offset >>> 0
9247 if (!noAssert) {
9248 var limit = Math.pow(2, (8 * byteLength) - 1)
9249
9250 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9251 }
9252
9253 var i = 0
9254 var mul = 1
9255 var sub = 0
9256 this[offset] = value & 0xFF
9257 while (++i < byteLength && (mul *= 0x100)) {
9258 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
9259 sub = 1
9260 }
9261 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8b095871 9262 }
9987f0c1
IC
9263
9264 return offset + byteLength
8b095871
IC
9265}
9266
9987f0c1
IC
9267Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
9268 value = +value
9269 offset = offset >>> 0
9270 if (!noAssert) {
9271 var limit = Math.pow(2, (8 * byteLength) - 1)
8b095871 9272
9987f0c1
IC
9273 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9274 }
9275
9276 var i = byteLength - 1
9277 var mul = 1
9278 var sub = 0
9279 this[offset + i] = value & 0xFF
9280 while (--i >= 0 && (mul *= 0x100)) {
9281 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
9282 sub = 1
9283 }
9284 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
9285 }
9286
9287 return offset + byteLength
8b095871
IC
9288}
9289
9987f0c1
IC
9290Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
9291 value = +value
9292 offset = offset >>> 0
9293 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
9294 if (value < 0) value = 0xff + value + 1
9295 this[offset] = (value & 0xff)
9296 return offset + 1
8b095871
IC
9297}
9298
9987f0c1
IC
9299Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
9300 value = +value
9301 offset = offset >>> 0
9302 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9303 this[offset] = (value & 0xff)
9304 this[offset + 1] = (value >>> 8)
9305 return offset + 2
8b095871
IC
9306}
9307
9987f0c1
IC
9308Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
9309 value = +value
9310 offset = offset >>> 0
9311 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9312 this[offset] = (value >>> 8)
9313 this[offset + 1] = (value & 0xff)
9314 return offset + 2
8b095871
IC
9315}
9316
9987f0c1
IC
9317Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
9318 value = +value
9319 offset = offset >>> 0
9320 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9321 this[offset] = (value & 0xff)
9322 this[offset + 1] = (value >>> 8)
9323 this[offset + 2] = (value >>> 16)
9324 this[offset + 3] = (value >>> 24)
9325 return offset + 4
8b095871
IC
9326}
9327
9987f0c1
IC
9328Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
9329 value = +value
9330 offset = offset >>> 0
9331 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9332 if (value < 0) value = 0xffffffff + value + 1
9333 this[offset] = (value >>> 24)
9334 this[offset + 1] = (value >>> 16)
9335 this[offset + 2] = (value >>> 8)
9336 this[offset + 3] = (value & 0xff)
9337 return offset + 4
8b095871
IC
9338}
9339
9987f0c1
IC
9340function checkIEEE754 (buf, value, offset, ext, max, min) {
9341 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9342 if (offset < 0) throw new RangeError('Index out of range')
8b095871
IC
9343}
9344
9987f0c1
IC
9345function writeFloat (buf, value, offset, littleEndian, noAssert) {
9346 value = +value
9347 offset = offset >>> 0
9348 if (!noAssert) {
9349 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8b095871 9350 }
9987f0c1
IC
9351 ieee754.write(buf, value, offset, littleEndian, 23, 4)
9352 return offset + 4
8b095871
IC
9353}
9354
9987f0c1
IC
9355Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
9356 return writeFloat(this, value, offset, true, noAssert)
8b095871
IC
9357}
9358
9987f0c1
IC
9359Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
9360 return writeFloat(this, value, offset, false, noAssert)
9361}
9362
9363function writeDouble (buf, value, offset, littleEndian, noAssert) {
9364 value = +value
9365 offset = offset >>> 0
9366 if (!noAssert) {
9367 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8b095871 9368 }
9987f0c1
IC
9369 ieee754.write(buf, value, offset, littleEndian, 52, 8)
9370 return offset + 8
8b095871
IC
9371}
9372
9987f0c1
IC
9373Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
9374 return writeDouble(this, value, offset, true, noAssert)
8b095871
IC
9375}
9376
9987f0c1
IC
9377Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
9378 return writeDouble(this, value, offset, false, noAssert)
8b095871
IC
9379}
9380
9987f0c1
IC
9381// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
9382Buffer.prototype.copy = function copy (target, targetStart, start, end) {
9383 if (!start) start = 0
9384 if (!end && end !== 0) end = this.length
9385 if (targetStart >= target.length) targetStart = target.length
9386 if (!targetStart) targetStart = 0
9387 if (end > 0 && end < start) end = start
8b095871 9388
9987f0c1
IC
9389 // Copy 0 bytes; we're done
9390 if (end === start) return 0
9391 if (target.length === 0 || this.length === 0) return 0
8b095871 9392
9987f0c1
IC
9393 // Fatal error conditions
9394 if (targetStart < 0) {
9395 throw new RangeError('targetStart out of bounds')
8b095871 9396 }
9987f0c1
IC
9397 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
9398 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8b095871 9399
9987f0c1
IC
9400 // Are we oob?
9401 if (end > this.length) end = this.length
9402 if (target.length - targetStart < end - start) {
9403 end = target.length - targetStart + start
9404 }
8b095871 9405
9987f0c1
IC
9406 var len = end - start
9407 var i
9408
9409 if (this === target && start < targetStart && targetStart < end) {
9410 // descending copy from end
9411 for (i = len - 1; i >= 0; --i) {
9412 target[i + targetStart] = this[i + start]
8b095871 9413 }
9987f0c1
IC
9414 } else if (len < 1000) {
9415 // ascending copy from start
9416 for (i = 0; i < len; ++i) {
9417 target[i + targetStart] = this[i + start]
8b095871 9418 }
9987f0c1
IC
9419 } else {
9420 Uint8Array.prototype.set.call(
9421 target,
9422 this.subarray(start, start + len),
9423 targetStart
9424 )
9425 }
8b095871 9426
9987f0c1
IC
9427 return len
9428}
9429
9430// Usage:
9431// buffer.fill(number[, offset[, end]])
9432// buffer.fill(buffer[, offset[, end]])
9433// buffer.fill(string[, offset[, end]][, encoding])
9434Buffer.prototype.fill = function fill (val, start, end, encoding) {
9435 // Handle string cases:
9436 if (typeof val === 'string') {
9437 if (typeof start === 'string') {
9438 encoding = start
9439 start = 0
9440 end = this.length
9441 } else if (typeof end === 'string') {
9442 encoding = end
9443 end = this.length
9444 }
9445 if (val.length === 1) {
9446 var code = val.charCodeAt(0)
9447 if (code < 256) {
9448 val = code
8b095871
IC
9449 }
9450 }
9987f0c1
IC
9451 if (encoding !== undefined && typeof encoding !== 'string') {
9452 throw new TypeError('encoding must be a string')
9453 }
9454 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
9455 throw new TypeError('Unknown encoding: ' + encoding)
9456 }
9457 } else if (typeof val === 'number') {
9458 val = val & 255
8b095871 9459 }
8b095871 9460
9987f0c1
IC
9461 // Invalid ranges are not set to a default, so can range check early.
9462 if (start < 0 || this.length < start || this.length < end) {
9463 throw new RangeError('Out of range index')
8b095871 9464 }
9987f0c1
IC
9465
9466 if (end <= start) {
9467 return this
8b095871 9468 }
8b095871 9469
9987f0c1
IC
9470 start = start >>> 0
9471 end = end === undefined ? this.length : end >>> 0
8b095871 9472
9987f0c1
IC
9473 if (!val) val = 0
9474
9475 var i
9476 if (typeof val === 'number') {
9477 for (i = start; i < end; ++i) {
9478 this[i] = val
8b095871 9479 }
9987f0c1
IC
9480 } else {
9481 var bytes = Buffer.isBuffer(val)
9482 ? val
9483 : new Buffer(val, encoding)
9484 var len = bytes.length
9485 for (i = 0; i < end - start; ++i) {
9486 this[i + start] = bytes[i % len]
8b095871
IC
9487 }
9488 }
9987f0c1
IC
9489
9490 return this
8b095871
IC
9491}
9492
9987f0c1
IC
9493// HELPER FUNCTIONS
9494// ================
8b095871 9495
9987f0c1 9496var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
8b095871 9497
9987f0c1
IC
9498function base64clean (str) {
9499 // Node strips out invalid characters like \n and \t from the string, base64-js does not
9500 str = str.trim().replace(INVALID_BASE64_RE, '')
9501 // Node converts strings with length < 2 to ''
9502 if (str.length < 2) return ''
9503 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
9504 while (str.length % 4 !== 0) {
9505 str = str + '='
8b095871 9506 }
9987f0c1
IC
9507 return str
9508}
9509
9510function toHex (n) {
9511 if (n < 16) return '0' + n.toString(16)
9512 return n.toString(16)
9513}
9514
9515function utf8ToBytes (string, units) {
9516 units = units || Infinity
9517 var codePoint
9518 var length = string.length
9519 var leadSurrogate = null
9520 var bytes = []
9521
9522 for (var i = 0; i < length; ++i) {
9523 codePoint = string.charCodeAt(i)
9524
9525 // is surrogate component
9526 if (codePoint > 0xD7FF && codePoint < 0xE000) {
9527 // last char was a lead
9528 if (!leadSurrogate) {
9529 // no lead yet
9530 if (codePoint > 0xDBFF) {
9531 // unexpected trail
9532 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9533 continue
9534 } else if (i + 1 === length) {
9535 // unpaired lead
9536 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9537 continue
9538 }
9539
9540 // valid lead
9541 leadSurrogate = codePoint
9542
9543 continue
9544 }
9545
9546 // 2 leads in a row
9547 if (codePoint < 0xDC00) {
9548 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9549 leadSurrogate = codePoint
9550 continue
9551 }
9552
9553 // valid surrogate pair
9554 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
9555 } else if (leadSurrogate) {
9556 // valid bmp char, but last char was a lead
9557 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9558 }
9559
9560 leadSurrogate = null
9561
9562 // encode utf8
9563 if (codePoint < 0x80) {
9564 if ((units -= 1) < 0) break
9565 bytes.push(codePoint)
9566 } else if (codePoint < 0x800) {
9567 if ((units -= 2) < 0) break
9568 bytes.push(
9569 codePoint >> 0x6 | 0xC0,
9570 codePoint & 0x3F | 0x80
9571 )
9572 } else if (codePoint < 0x10000) {
9573 if ((units -= 3) < 0) break
9574 bytes.push(
9575 codePoint >> 0xC | 0xE0,
9576 codePoint >> 0x6 & 0x3F | 0x80,
9577 codePoint & 0x3F | 0x80
9578 )
9579 } else if (codePoint < 0x110000) {
9580 if ((units -= 4) < 0) break
9581 bytes.push(
9582 codePoint >> 0x12 | 0xF0,
9583 codePoint >> 0xC & 0x3F | 0x80,
9584 codePoint >> 0x6 & 0x3F | 0x80,
9585 codePoint & 0x3F | 0x80
9586 )
9587 } else {
9588 throw new Error('Invalid code point')
9589 }
8b095871 9590 }
9987f0c1
IC
9591
9592 return bytes
8b095871
IC
9593}
9594
9987f0c1
IC
9595function asciiToBytes (str) {
9596 var byteArray = []
9597 for (var i = 0; i < str.length; ++i) {
9598 // Node's code seems to be doing this and not & 0x7F..
9599 byteArray.push(str.charCodeAt(i) & 0xFF)
8b095871 9600 }
9987f0c1 9601 return byteArray
8b095871
IC
9602}
9603
9987f0c1
IC
9604function utf16leToBytes (str, units) {
9605 var c, hi, lo
9606 var byteArray = []
9607 for (var i = 0; i < str.length; ++i) {
9608 if ((units -= 2) < 0) break
8b095871 9609
9987f0c1
IC
9610 c = str.charCodeAt(i)
9611 hi = c >> 8
9612 lo = c % 256
9613 byteArray.push(lo)
9614 byteArray.push(hi)
9615 }
8b095871 9616
9987f0c1
IC
9617 return byteArray
9618}
8b095871 9619
9987f0c1
IC
9620function base64ToBytes (str) {
9621 return base64.toByteArray(base64clean(str))
9622}
8b095871 9623
9987f0c1
IC
9624function blitBuffer (src, dst, offset, length) {
9625 for (var i = 0; i < length; ++i) {
9626 if ((i + offset >= dst.length) || (i >= src.length)) break
9627 dst[i + offset] = src[i]
9628 }
9629 return i
9630}
9631
9632// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
9633function isArrayBufferView (obj) {
9634 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
9635}
9636
9637function numberIsNaN (obj) {
9638 return obj !== obj // eslint-disable-line no-self-compare
9639}
8b095871 9640
9987f0c1 9641},{"base64-js":2,"ieee754":7}],5:[function(require,module,exports){
8b095871 9642(function (Buffer){
9987f0c1
IC
9643// Copyright Joyent, Inc. and other Node contributors.
9644//
9645// Permission is hereby granted, free of charge, to any person obtaining a
9646// copy of this software and associated documentation files (the
9647// "Software"), to deal in the Software without restriction, including
9648// without limitation the rights to use, copy, modify, merge, publish,
9649// distribute, sublicense, and/or sell copies of the Software, and to permit
9650// persons to whom the Software is furnished to do so, subject to the
9651// following conditions:
9652//
9653// The above copyright notice and this permission notice shall be included
9654// in all copies or substantial portions of the Software.
9655//
9656// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9657// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9658// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9659// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9660// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9661// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9662// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9663
9987f0c1
IC
9664// NOTE: These type checking functions intentionally don't use `instanceof`
9665// because it is fragile and can be easily faked with `Object.create()`.
8b095871 9666
9987f0c1
IC
9667function isArray(arg) {
9668 if (Array.isArray) {
9669 return Array.isArray(arg);
9670 }
9671 return objectToString(arg) === '[object Array]';
8b095871 9672}
9987f0c1 9673exports.isArray = isArray;
8b095871 9674
9987f0c1
IC
9675function isBoolean(arg) {
9676 return typeof arg === 'boolean';
8b095871 9677}
9987f0c1 9678exports.isBoolean = isBoolean;
8b095871 9679
9987f0c1
IC
9680function isNull(arg) {
9681 return arg === null;
8b095871 9682}
9987f0c1 9683exports.isNull = isNull;
8b095871 9684
9987f0c1
IC
9685function isNullOrUndefined(arg) {
9686 return arg == null;
9687}
9688exports.isNullOrUndefined = isNullOrUndefined;
8b095871 9689
9987f0c1
IC
9690function isNumber(arg) {
9691 return typeof arg === 'number';
9692}
9693exports.isNumber = isNumber;
8b095871 9694
9987f0c1
IC
9695function isString(arg) {
9696 return typeof arg === 'string';
9697}
9698exports.isString = isString;
8b095871 9699
9987f0c1
IC
9700function isSymbol(arg) {
9701 return typeof arg === 'symbol';
8b095871 9702}
9987f0c1 9703exports.isSymbol = isSymbol;
8b095871 9704
9987f0c1
IC
9705function isUndefined(arg) {
9706 return arg === void 0;
9707}
9708exports.isUndefined = isUndefined;
8b095871 9709
9987f0c1
IC
9710function isRegExp(re) {
9711 return objectToString(re) === '[object RegExp]';
8b095871 9712}
9987f0c1 9713exports.isRegExp = isRegExp;
8b095871 9714
9987f0c1
IC
9715function isObject(arg) {
9716 return typeof arg === 'object' && arg !== null;
9717}
9718exports.isObject = isObject;
8b095871 9719
9987f0c1
IC
9720function isDate(d) {
9721 return objectToString(d) === '[object Date]';
9722}
9723exports.isDate = isDate;
8b095871 9724
9987f0c1
IC
9725function isError(e) {
9726 return (objectToString(e) === '[object Error]' || e instanceof Error);
8b095871 9727}
9987f0c1 9728exports.isError = isError;
8b095871 9729
9987f0c1
IC
9730function isFunction(arg) {
9731 return typeof arg === 'function';
8b095871 9732}
9987f0c1 9733exports.isFunction = isFunction;
8b095871 9734
9987f0c1
IC
9735function isPrimitive(arg) {
9736 return arg === null ||
9737 typeof arg === 'boolean' ||
9738 typeof arg === 'number' ||
9739 typeof arg === 'string' ||
9740 typeof arg === 'symbol' || // ES6 symbol
9741 typeof arg === 'undefined';
9742}
9743exports.isPrimitive = isPrimitive;
8b095871 9744
9987f0c1 9745exports.isBuffer = Buffer.isBuffer;
8b095871 9746
9987f0c1
IC
9747function objectToString(o) {
9748 return Object.prototype.toString.call(o);
8b095871
IC
9749}
9750
9987f0c1
IC
9751}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
9752},{"../../is-buffer/index.js":9}],6:[function(require,module,exports){
9753// Copyright Joyent, Inc. and other Node contributors.
8b095871 9754//
9987f0c1
IC
9755// Permission is hereby granted, free of charge, to any person obtaining a
9756// copy of this software and associated documentation files (the
9757// "Software"), to deal in the Software without restriction, including
9758// without limitation the rights to use, copy, modify, merge, publish,
9759// distribute, sublicense, and/or sell copies of the Software, and to permit
9760// persons to whom the Software is furnished to do so, subject to the
9761// following conditions:
8b095871 9762//
9987f0c1
IC
9763// The above copyright notice and this permission notice shall be included
9764// in all copies or substantial portions of the Software.
8b095871 9765//
9987f0c1
IC
9766// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9767// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9768// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9769// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9770// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9771// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9772// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9773
9987f0c1
IC
9774function EventEmitter() {
9775 this._events = this._events || {};
9776 this._maxListeners = this._maxListeners || undefined;
9777}
9778module.exports = EventEmitter;
8b095871 9779
9987f0c1
IC
9780// Backwards-compat with node 0.10.x
9781EventEmitter.EventEmitter = EventEmitter;
8b095871 9782
9987f0c1
IC
9783EventEmitter.prototype._events = undefined;
9784EventEmitter.prototype._maxListeners = undefined;
8b095871 9785
9987f0c1
IC
9786// By default EventEmitters will print a warning if more than 10 listeners are
9787// added to it. This is a useful default which helps finding memory leaks.
9788EventEmitter.defaultMaxListeners = 10;
8b095871 9789
9987f0c1
IC
9790// Obviously not all Emitters should be limited to 10. This function allows
9791// that to be increased. Set to zero for unlimited.
9792EventEmitter.prototype.setMaxListeners = function(n) {
9793 if (!isNumber(n) || n < 0 || isNaN(n))
9794 throw TypeError('n must be a positive number');
9795 this._maxListeners = n;
9796 return this;
9797};
8b095871 9798
9987f0c1
IC
9799EventEmitter.prototype.emit = function(type) {
9800 var er, handler, len, args, i, listeners;
9801
9802 if (!this._events)
9803 this._events = {};
9804
9805 // If there is no 'error' event listener then throw.
9806 if (type === 'error') {
9807 if (!this._events.error ||
9808 (isObject(this._events.error) && !this._events.error.length)) {
9809 er = arguments[1];
9810 if (er instanceof Error) {
9811 throw er; // Unhandled 'error' event
9812 } else {
9813 // At least give some kind of context to the user
9814 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
9815 err.context = er;
9816 throw err;
9817 }
9818 }
8b095871 9819 }
8b095871 9820
9987f0c1
IC
9821 handler = this._events[type];
9822
9823 if (isUndefined(handler))
9824 return false;
9825
9826 if (isFunction(handler)) {
9827 switch (arguments.length) {
9828 // fast cases
9829 case 1:
9830 handler.call(this);
9831 break;
9832 case 2:
9833 handler.call(this, arguments[1]);
9834 break;
9835 case 3:
9836 handler.call(this, arguments[1], arguments[2]);
9837 break;
9838 // slower
9839 default:
9840 args = Array.prototype.slice.call(arguments, 1);
9841 handler.apply(this, args);
9842 }
9843 } else if (isObject(handler)) {
9844 args = Array.prototype.slice.call(arguments, 1);
9845 listeners = handler.slice();
9846 len = listeners.length;
9847 for (i = 0; i < len; i++)
9848 listeners[i].apply(this, args);
8b095871 9849 }
8b095871 9850
9987f0c1
IC
9851 return true;
9852};
9853
9854EventEmitter.prototype.addListener = function(type, listener) {
9855 var m;
9856
9857 if (!isFunction(listener))
9858 throw TypeError('listener must be a function');
9859
9860 if (!this._events)
9861 this._events = {};
9862
9863 // To avoid recursion in the case that type === "newListener"! Before
9864 // adding it to the listeners, first emit "newListener".
9865 if (this._events.newListener)
9866 this.emit('newListener', type,
9867 isFunction(listener.listener) ?
9868 listener.listener : listener);
9869
9870 if (!this._events[type])
9871 // Optimize the case of one listener. Don't need the extra array object.
9872 this._events[type] = listener;
9873 else if (isObject(this._events[type]))
9874 // If we've already got an array, just append.
9875 this._events[type].push(listener);
9876 else
9877 // Adding the second element, need to change to array.
9878 this._events[type] = [this._events[type], listener];
8b095871 9879
9987f0c1
IC
9880 // Check for listener leak
9881 if (isObject(this._events[type]) && !this._events[type].warned) {
9882 if (!isUndefined(this._maxListeners)) {
9883 m = this._maxListeners;
9884 } else {
9885 m = EventEmitter.defaultMaxListeners;
8b095871 9886 }
8b095871 9887
9987f0c1
IC
9888 if (m && m > 0 && this._events[type].length > m) {
9889 this._events[type].warned = true;
9890 console.error('(node) warning: possible EventEmitter memory ' +
9891 'leak detected. %d listeners added. ' +
9892 'Use emitter.setMaxListeners() to increase limit.',
9893 this._events[type].length);
9894 if (typeof console.trace === 'function') {
9895 // not supported in IE 10
9896 console.trace();
9897 }
9898 }
8b095871 9899 }
8b095871 9900
9987f0c1
IC
9901 return this;
9902};
8b095871 9903
9987f0c1 9904EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8b095871 9905
9987f0c1
IC
9906EventEmitter.prototype.once = function(type, listener) {
9907 if (!isFunction(listener))
9908 throw TypeError('listener must be a function');
8b095871 9909
9987f0c1 9910 var fired = false;
8b095871 9911
9987f0c1
IC
9912 function g() {
9913 this.removeListener(type, g);
8b095871 9914
9987f0c1
IC
9915 if (!fired) {
9916 fired = true;
9917 listener.apply(this, arguments);
9918 }
9919 }
8b095871 9920
9987f0c1
IC
9921 g.listener = listener;
9922 this.on(type, g);
8b095871 9923
9987f0c1 9924 return this;
8b095871
IC
9925};
9926
9987f0c1
IC
9927// emits a 'removeListener' event iff the listener was removed
9928EventEmitter.prototype.removeListener = function(type, listener) {
9929 var list, position, length, i;
8b095871 9930
9987f0c1
IC
9931 if (!isFunction(listener))
9932 throw TypeError('listener must be a function');
8b095871 9933
9987f0c1
IC
9934 if (!this._events || !this._events[type])
9935 return this;
8b095871 9936
9987f0c1
IC
9937 list = this._events[type];
9938 length = list.length;
9939 position = -1;
8b095871 9940
9987f0c1
IC
9941 if (list === listener ||
9942 (isFunction(list.listener) && list.listener === listener)) {
9943 delete this._events[type];
9944 if (this._events.removeListener)
9945 this.emit('removeListener', type, listener);
8b095871 9946
9987f0c1
IC
9947 } else if (isObject(list)) {
9948 for (i = length; i-- > 0;) {
9949 if (list[i] === listener ||
9950 (list[i].listener && list[i].listener === listener)) {
9951 position = i;
9952 break;
9953 }
8b095871
IC
9954 }
9955
9987f0c1
IC
9956 if (position < 0)
9957 return this;
8b095871 9958
9987f0c1
IC
9959 if (list.length === 1) {
9960 list.length = 0;
9961 delete this._events[type];
9962 } else {
9963 list.splice(position, 1);
9964 }
8b095871 9965
9987f0c1
IC
9966 if (this._events.removeListener)
9967 this.emit('removeListener', type, listener);
9968 }
8b095871 9969
9987f0c1
IC
9970 return this;
9971};
8b095871 9972
9987f0c1
IC
9973EventEmitter.prototype.removeAllListeners = function(type) {
9974 var key, listeners;
8b095871 9975
9987f0c1
IC
9976 if (!this._events)
9977 return this;
8b095871 9978
9987f0c1
IC
9979 // not listening for removeListener, no need to emit
9980 if (!this._events.removeListener) {
9981 if (arguments.length === 0)
9982 this._events = {};
9983 else if (this._events[type])
9984 delete this._events[type];
9985 return this;
8b095871 9986 }
9987f0c1
IC
9987
9988 // emit removeListener for all listeners on all events
9989 if (arguments.length === 0) {
9990 for (key in this._events) {
9991 if (key === 'removeListener') continue;
9992 this.removeAllListeners(key);
9993 }
9994 this.removeAllListeners('removeListener');
9995 this._events = {};
9996 return this;
8b095871 9997 }
8b095871 9998
9987f0c1 9999 listeners = this._events[type];
8b095871 10000
9987f0c1
IC
10001 if (isFunction(listeners)) {
10002 this.removeListener(type, listeners);
10003 } else if (listeners) {
10004 // LIFO order
10005 while (listeners.length)
10006 this.removeListener(type, listeners[listeners.length - 1]);
8b095871 10007 }
9987f0c1 10008 delete this._events[type];
8b095871 10009
9987f0c1
IC
10010 return this;
10011};
8b095871 10012
9987f0c1
IC
10013EventEmitter.prototype.listeners = function(type) {
10014 var ret;
10015 if (!this._events || !this._events[type])
10016 ret = [];
10017 else if (isFunction(this._events[type]))
10018 ret = [this._events[type]];
10019 else
10020 ret = this._events[type].slice();
10021 return ret;
8b095871
IC
10022};
10023
9987f0c1
IC
10024EventEmitter.prototype.listenerCount = function(type) {
10025 if (this._events) {
10026 var evlistener = this._events[type];
8b095871 10027
9987f0c1
IC
10028 if (isFunction(evlistener))
10029 return 1;
10030 else if (evlistener)
10031 return evlistener.length;
8b095871 10032 }
9987f0c1 10033 return 0;
8b095871
IC
10034};
10035
9987f0c1
IC
10036EventEmitter.listenerCount = function(emitter, type) {
10037 return emitter.listenerCount(type);
10038};
8b095871 10039
9987f0c1
IC
10040function isFunction(arg) {
10041 return typeof arg === 'function';
10042}
8b095871 10043
9987f0c1
IC
10044function isNumber(arg) {
10045 return typeof arg === 'number';
8b095871
IC
10046}
10047
9987f0c1
IC
10048function isObject(arg) {
10049 return typeof arg === 'object' && arg !== null;
10050}
8b095871 10051
9987f0c1
IC
10052function isUndefined(arg) {
10053 return arg === void 0;
10054}
8b095871 10055
9987f0c1
IC
10056},{}],7:[function(require,module,exports){
10057exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10058 var e, m
10059 var eLen = nBytes * 8 - mLen - 1
10060 var eMax = (1 << eLen) - 1
10061 var eBias = eMax >> 1
10062 var nBits = -7
10063 var i = isLE ? (nBytes - 1) : 0
10064 var d = isLE ? -1 : 1
10065 var s = buffer[offset + i]
8b095871 10066
9987f0c1 10067 i += d
8b095871 10068
9987f0c1
IC
10069 e = s & ((1 << (-nBits)) - 1)
10070 s >>= (-nBits)
10071 nBits += eLen
10072 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10073
9987f0c1
IC
10074 m = e & ((1 << (-nBits)) - 1)
10075 e >>= (-nBits)
10076 nBits += mLen
10077 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10078
9987f0c1
IC
10079 if (e === 0) {
10080 e = 1 - eBias
10081 } else if (e === eMax) {
10082 return m ? NaN : ((s ? -1 : 1) * Infinity)
10083 } else {
10084 m = m + Math.pow(2, mLen)
10085 e = e - eBias
8b095871 10086 }
9987f0c1 10087 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8b095871
IC
10088}
10089
9987f0c1
IC
10090exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10091 var e, m, c
10092 var eLen = nBytes * 8 - mLen - 1
10093 var eMax = (1 << eLen) - 1
10094 var eBias = eMax >> 1
10095 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10096 var i = isLE ? 0 : (nBytes - 1)
10097 var d = isLE ? 1 : -1
10098 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8b095871 10099
9987f0c1 10100 value = Math.abs(value)
8b095871 10101
9987f0c1
IC
10102 if (isNaN(value) || value === Infinity) {
10103 m = isNaN(value) ? 1 : 0
10104 e = eMax
10105 } else {
10106 e = Math.floor(Math.log(value) / Math.LN2)
10107 if (value * (c = Math.pow(2, -e)) < 1) {
10108 e--
10109 c *= 2
10110 }
10111 if (e + eBias >= 1) {
10112 value += rt / c
10113 } else {
10114 value += rt * Math.pow(2, 1 - eBias)
10115 }
10116 if (value * c >= 2) {
10117 e++
10118 c /= 2
10119 }
8b095871 10120
9987f0c1
IC
10121 if (e + eBias >= eMax) {
10122 m = 0
10123 e = eMax
10124 } else if (e + eBias >= 1) {
10125 m = (value * c - 1) * Math.pow(2, mLen)
10126 e = e + eBias
10127 } else {
10128 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10129 e = 0
10130 }
8b095871 10131 }
8b095871 10132
9987f0c1
IC
10133 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10134
10135 e = (e << mLen) | m
10136 eLen += mLen
10137 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10138
10139 buffer[offset + i - d] |= s * 128
10140}
8b095871 10141
9987f0c1
IC
10142},{}],8:[function(require,module,exports){
10143if (typeof Object.create === 'function') {
10144 // implementation from standard node.js 'util' module
10145 module.exports = function inherits(ctor, superCtor) {
10146 ctor.super_ = superCtor
10147 ctor.prototype = Object.create(superCtor.prototype, {
10148 constructor: {
10149 value: ctor,
10150 enumerable: false,
10151 writable: true,
10152 configurable: true
10153 }
10154 });
10155 };
10156} else {
10157 // old school shim for old browsers
10158 module.exports = function inherits(ctor, superCtor) {
10159 ctor.super_ = superCtor
10160 var TempCtor = function () {}
10161 TempCtor.prototype = superCtor.prototype
10162 ctor.prototype = new TempCtor()
10163 ctor.prototype.constructor = ctor
10164 }
10165}
10166
10167},{}],9:[function(require,module,exports){
8b095871 10168/*!
9987f0c1 10169 * Determine if an object is a Buffer
8b095871
IC
10170 *
10171 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
10172 * @license MIT
10173 */
10174
9987f0c1
IC
10175// The _isBuffer check is for Safari 5-7 support, because it's missing
10176// Object.prototype.constructor. Remove this eventually
10177module.exports = function (obj) {
10178 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
10179}
8b095871 10180
9987f0c1
IC
10181function isBuffer (obj) {
10182 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8b095871
IC
10183}
10184
9987f0c1
IC
10185// For Node v0.10 support. Remove this eventually.
10186function isSlowBuffer (obj) {
10187 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
10188}
8b095871 10189
9987f0c1
IC
10190},{}],10:[function(require,module,exports){
10191var toString = {}.toString;
8b095871 10192
9987f0c1
IC
10193module.exports = Array.isArray || function (arr) {
10194 return toString.call(arr) == '[object Array]';
10195};
8b095871 10196
9987f0c1
IC
10197},{}],11:[function(require,module,exports){
10198(function (process){
10199'use strict';
8b095871 10200
9987f0c1
IC
10201if (!process.version ||
10202 process.version.indexOf('v0.') === 0 ||
10203 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
10204 module.exports = nextTick;
10205} else {
10206 module.exports = process.nextTick;
8b095871
IC
10207}
10208
9987f0c1
IC
10209function nextTick(fn, arg1, arg2, arg3) {
10210 if (typeof fn !== 'function') {
10211 throw new TypeError('"callback" argument must be a function');
10212 }
10213 var len = arguments.length;
10214 var args, i;
10215 switch (len) {
10216 case 0:
10217 case 1:
10218 return process.nextTick(fn);
10219 case 2:
10220 return process.nextTick(function afterTickOne() {
10221 fn.call(null, arg1);
10222 });
10223 case 3:
10224 return process.nextTick(function afterTickTwo() {
10225 fn.call(null, arg1, arg2);
10226 });
10227 case 4:
10228 return process.nextTick(function afterTickThree() {
10229 fn.call(null, arg1, arg2, arg3);
10230 });
10231 default:
10232 args = new Array(len - 1);
10233 i = 0;
10234 while (i < args.length) {
10235 args[i++] = arguments[i];
8b095871 10236 }
9987f0c1
IC
10237 return process.nextTick(function afterTick() {
10238 fn.apply(null, args);
10239 });
8b095871 10240 }
8b095871
IC
10241}
10242
9987f0c1
IC
10243}).call(this,require('_process'))
10244},{"_process":12}],12:[function(require,module,exports){
10245// shim for using process in browser
10246var process = module.exports = {};
8b095871 10247
9987f0c1
IC
10248// cached from whatever global is present so that test runners that stub it
10249// don't break things. But we need to wrap it in a try catch in case it is
10250// wrapped in strict mode code which doesn't define any globals. It's inside a
10251// function because try/catches deoptimize in certain engines.
8b095871 10252
9987f0c1
IC
10253var cachedSetTimeout;
10254var cachedClearTimeout;
8b095871 10255
9987f0c1
IC
10256function defaultSetTimout() {
10257 throw new Error('setTimeout has not been defined');
10258}
10259function defaultClearTimeout () {
10260 throw new Error('clearTimeout has not been defined');
10261}
10262(function () {
10263 try {
10264 if (typeof setTimeout === 'function') {
10265 cachedSetTimeout = setTimeout;
10266 } else {
10267 cachedSetTimeout = defaultSetTimout;
10268 }
10269 } catch (e) {
10270 cachedSetTimeout = defaultSetTimout;
10271 }
10272 try {
10273 if (typeof clearTimeout === 'function') {
10274 cachedClearTimeout = clearTimeout;
10275 } else {
10276 cachedClearTimeout = defaultClearTimeout;
10277 }
10278 } catch (e) {
10279 cachedClearTimeout = defaultClearTimeout;
8b095871 10280 }
9987f0c1
IC
10281} ())
10282function runTimeout(fun) {
10283 if (cachedSetTimeout === setTimeout) {
10284 //normal enviroments in sane situations
10285 return setTimeout(fun, 0);
10286 }
10287 // if setTimeout wasn't available but was latter defined
10288 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
10289 cachedSetTimeout = setTimeout;
10290 return setTimeout(fun, 0);
10291 }
10292 try {
10293 // when when somebody has screwed with setTimeout but no I.E. maddness
10294 return cachedSetTimeout(fun, 0);
10295 } catch(e){
10296 try {
10297 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10298 return cachedSetTimeout.call(null, fun, 0);
10299 } catch(e){
10300 // 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
10301 return cachedSetTimeout.call(this, fun, 0);
10302 }
8b095871 10303 }
8b095871 10304
8b095871 10305
8b095871 10306}
9987f0c1
IC
10307function runClearTimeout(marker) {
10308 if (cachedClearTimeout === clearTimeout) {
10309 //normal enviroments in sane situations
10310 return clearTimeout(marker);
10311 }
10312 // if clearTimeout wasn't available but was latter defined
10313 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
10314 cachedClearTimeout = clearTimeout;
10315 return clearTimeout(marker);
10316 }
10317 try {
10318 // when when somebody has screwed with setTimeout but no I.E. maddness
10319 return cachedClearTimeout(marker);
10320 } catch (e){
10321 try {
10322 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10323 return cachedClearTimeout.call(null, marker);
10324 } catch (e){
10325 // 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.
10326 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
10327 return cachedClearTimeout.call(this, marker);
10328 }
10329 }
8b095871 10330
8b095871 10331
8b095871 10332
8b095871 10333}
9987f0c1
IC
10334var queue = [];
10335var draining = false;
10336var currentQueue;
10337var queueIndex = -1;
8b095871 10338
9987f0c1
IC
10339function cleanUpNextTick() {
10340 if (!draining || !currentQueue) {
10341 return;
10342 }
10343 draining = false;
10344 if (currentQueue.length) {
10345 queue = currentQueue.concat(queue);
10346 } else {
10347 queueIndex = -1;
10348 }
10349 if (queue.length) {
10350 drainQueue();
10351 }
8b095871
IC
10352}
10353
9987f0c1
IC
10354function drainQueue() {
10355 if (draining) {
10356 return;
10357 }
10358 var timeout = runTimeout(cleanUpNextTick);
10359 draining = true;
8b095871 10360
9987f0c1
IC
10361 var len = queue.length;
10362 while(len) {
10363 currentQueue = queue;
10364 queue = [];
10365 while (++queueIndex < len) {
10366 if (currentQueue) {
10367 currentQueue[queueIndex].run();
10368 }
10369 }
10370 queueIndex = -1;
10371 len = queue.length;
10372 }
10373 currentQueue = null;
10374 draining = false;
10375 runClearTimeout(timeout);
8b095871
IC
10376}
10377
9987f0c1
IC
10378process.nextTick = function (fun) {
10379 var args = new Array(arguments.length - 1);
10380 if (arguments.length > 1) {
10381 for (var i = 1; i < arguments.length; i++) {
10382 args[i - 1] = arguments[i];
10383 }
10384 }
10385 queue.push(new Item(fun, args));
10386 if (queue.length === 1 && !draining) {
10387 runTimeout(drainQueue);
10388 }
10389};
8b095871 10390
9987f0c1
IC
10391// v8 likes predictible objects
10392function Item(fun, array) {
10393 this.fun = fun;
10394 this.array = array;
8b095871 10395}
9987f0c1
IC
10396Item.prototype.run = function () {
10397 this.fun.apply(null, this.array);
10398};
10399process.title = 'browser';
10400process.browser = true;
10401process.env = {};
10402process.argv = [];
10403process.version = ''; // empty string to avoid regexp issues
10404process.versions = {};
8b095871 10405
9987f0c1 10406function noop() {}
8b095871 10407
9987f0c1
IC
10408process.on = noop;
10409process.addListener = noop;
10410process.once = noop;
10411process.off = noop;
10412process.removeListener = noop;
10413process.removeAllListeners = noop;
10414process.emit = noop;
10415process.prependListener = noop;
10416process.prependOnceListener = noop;
8b095871 10417
9987f0c1 10418process.listeners = function (name) { return [] }
8b095871 10419
9987f0c1
IC
10420process.binding = function (name) {
10421 throw new Error('process.binding is not supported');
10422};
8b095871 10423
9987f0c1
IC
10424process.cwd = function () { return '/' };
10425process.chdir = function (dir) {
10426 throw new Error('process.chdir is not supported');
10427};
10428process.umask = function() { return 0; };
8b095871 10429
9987f0c1
IC
10430},{}],13:[function(require,module,exports){
10431module.exports = require('./lib/_stream_duplex.js');
8b095871 10432
9987f0c1
IC
10433},{"./lib/_stream_duplex.js":14}],14:[function(require,module,exports){
10434// Copyright Joyent, Inc. and other Node contributors.
10435//
10436// Permission is hereby granted, free of charge, to any person obtaining a
10437// copy of this software and associated documentation files (the
10438// "Software"), to deal in the Software without restriction, including
10439// without limitation the rights to use, copy, modify, merge, publish,
10440// distribute, sublicense, and/or sell copies of the Software, and to permit
10441// persons to whom the Software is furnished to do so, subject to the
10442// following conditions:
10443//
10444// The above copyright notice and this permission notice shall be included
10445// in all copies or substantial portions of the Software.
10446//
10447// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10448// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10449// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10450// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10451// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10452// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10453// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10454
9987f0c1
IC
10455// a duplex stream is just a stream that is both readable and writable.
10456// Since JS doesn't have multiple prototypal inheritance, this class
10457// prototypally inherits from Readable, and then parasitically from
10458// Writable.
8b095871 10459
9987f0c1 10460'use strict';
8b095871 10461
9987f0c1 10462/*<replacement>*/
8b095871 10463
9987f0c1
IC
10464var processNextTick = require('process-nextick-args');
10465/*</replacement>*/
8b095871 10466
9987f0c1
IC
10467/*<replacement>*/
10468var objectKeys = Object.keys || function (obj) {
10469 var keys = [];
10470 for (var key in obj) {
10471 keys.push(key);
10472 }return keys;
10473};
10474/*</replacement>*/
8b095871 10475
9987f0c1 10476module.exports = Duplex;
8b095871 10477
9987f0c1
IC
10478/*<replacement>*/
10479var util = require('core-util-is');
10480util.inherits = require('inherits');
10481/*</replacement>*/
8b095871 10482
9987f0c1
IC
10483var Readable = require('./_stream_readable');
10484var Writable = require('./_stream_writable');
8b095871 10485
9987f0c1 10486util.inherits(Duplex, Readable);
8b095871 10487
9987f0c1
IC
10488var keys = objectKeys(Writable.prototype);
10489for (var v = 0; v < keys.length; v++) {
10490 var method = keys[v];
10491 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
8b095871 10492}
8b095871 10493
9987f0c1
IC
10494function Duplex(options) {
10495 if (!(this instanceof Duplex)) return new Duplex(options);
8b095871 10496
9987f0c1
IC
10497 Readable.call(this, options);
10498 Writable.call(this, options);
8b095871 10499
9987f0c1 10500 if (options && options.readable === false) this.readable = false;
8b095871 10501
9987f0c1 10502 if (options && options.writable === false) this.writable = false;
8b095871 10503
9987f0c1
IC
10504 this.allowHalfOpen = true;
10505 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
8b095871 10506
9987f0c1 10507 this.once('end', onend);
8b095871
IC
10508}
10509
9987f0c1
IC
10510// the no-half-open enforcer
10511function onend() {
10512 // if we allow half-open state, or if the writable side ended,
10513 // then we're ok.
10514 if (this.allowHalfOpen || this._writableState.ended) return;
8b095871 10515
9987f0c1
IC
10516 // no more data can be written.
10517 // But allow more writes to happen in this tick.
10518 processNextTick(onEndNT, this);
8b095871
IC
10519}
10520
9987f0c1
IC
10521function onEndNT(self) {
10522 self.end();
8b095871
IC
10523}
10524
9987f0c1
IC
10525Object.defineProperty(Duplex.prototype, 'destroyed', {
10526 get: function () {
10527 if (this._readableState === undefined || this._writableState === undefined) {
10528 return false;
8b095871 10529 }
9987f0c1
IC
10530 return this._readableState.destroyed && this._writableState.destroyed;
10531 },
10532 set: function (value) {
10533 // we ignore the value if the stream
10534 // has not been initialized yet
10535 if (this._readableState === undefined || this._writableState === undefined) {
10536 return;
8b095871 10537 }
9987f0c1
IC
10538
10539 // backward compatibility, the user is explicitly
10540 // managing destroyed
10541 this._readableState.destroyed = value;
10542 this._writableState.destroyed = value;
8b095871 10543 }
9987f0c1 10544});
8b095871 10545
9987f0c1
IC
10546Duplex.prototype._destroy = function (err, cb) {
10547 this.push(null);
10548 this.end();
8b095871 10549
9987f0c1
IC
10550 processNextTick(cb, err);
10551};
8b095871 10552
9987f0c1
IC
10553function forEach(xs, f) {
10554 for (var i = 0, l = xs.length; i < l; i++) {
10555 f(xs[i], i);
10556 }
8b095871 10557}
9987f0c1
IC
10558},{"./_stream_readable":16,"./_stream_writable":18,"core-util-is":5,"inherits":8,"process-nextick-args":11}],15:[function(require,module,exports){
10559// Copyright Joyent, Inc. and other Node contributors.
10560//
10561// Permission is hereby granted, free of charge, to any person obtaining a
10562// copy of this software and associated documentation files (the
10563// "Software"), to deal in the Software without restriction, including
10564// without limitation the rights to use, copy, modify, merge, publish,
10565// distribute, sublicense, and/or sell copies of the Software, and to permit
10566// persons to whom the Software is furnished to do so, subject to the
10567// following conditions:
10568//
10569// The above copyright notice and this permission notice shall be included
10570// in all copies or substantial portions of the Software.
10571//
10572// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10573// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10574// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10575// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10576// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10577// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10578// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10579
9987f0c1
IC
10580// a passthrough stream.
10581// basically just the most minimal sort of Transform stream.
10582// Every written chunk gets output as-is.
8b095871 10583
9987f0c1 10584'use strict';
8b095871 10585
9987f0c1 10586module.exports = PassThrough;
8b095871 10587
9987f0c1 10588var Transform = require('./_stream_transform');
8b095871 10589
9987f0c1
IC
10590/*<replacement>*/
10591var util = require('core-util-is');
10592util.inherits = require('inherits');
10593/*</replacement>*/
8b095871 10594
9987f0c1 10595util.inherits(PassThrough, Transform);
8b095871 10596
9987f0c1
IC
10597function PassThrough(options) {
10598 if (!(this instanceof PassThrough)) return new PassThrough(options);
8b095871 10599
9987f0c1 10600 Transform.call(this, options);
8b095871
IC
10601}
10602
9987f0c1
IC
10603PassThrough.prototype._transform = function (chunk, encoding, cb) {
10604 cb(null, chunk);
10605};
10606},{"./_stream_transform":17,"core-util-is":5,"inherits":8}],16:[function(require,module,exports){
10607(function (process,global){
10608// Copyright Joyent, Inc. and other Node contributors.
10609//
10610// Permission is hereby granted, free of charge, to any person obtaining a
10611// copy of this software and associated documentation files (the
10612// "Software"), to deal in the Software without restriction, including
10613// without limitation the rights to use, copy, modify, merge, publish,
10614// distribute, sublicense, and/or sell copies of the Software, and to permit
10615// persons to whom the Software is furnished to do so, subject to the
10616// following conditions:
10617//
10618// The above copyright notice and this permission notice shall be included
10619// in all copies or substantial portions of the Software.
10620//
10621// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10622// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10623// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10624// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10625// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10626// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10627// USE OR OTHER DEALINGS IN THE SOFTWARE.
10628
10629'use strict';
8b095871 10630
9987f0c1 10631/*<replacement>*/
8b095871 10632
9987f0c1
IC
10633var processNextTick = require('process-nextick-args');
10634/*</replacement>*/
8b095871 10635
9987f0c1 10636module.exports = Readable;
8b095871 10637
9987f0c1
IC
10638/*<replacement>*/
10639var isArray = require('isarray');
10640/*</replacement>*/
8b095871 10641
9987f0c1
IC
10642/*<replacement>*/
10643var Duplex;
10644/*</replacement>*/
8b095871 10645
9987f0c1 10646Readable.ReadableState = ReadableState;
8b095871 10647
9987f0c1
IC
10648/*<replacement>*/
10649var EE = require('events').EventEmitter;
8b095871 10650
9987f0c1
IC
10651var EElistenerCount = function (emitter, type) {
10652 return emitter.listeners(type).length;
10653};
10654/*</replacement>*/
8b095871 10655
9987f0c1
IC
10656/*<replacement>*/
10657var Stream = require('./internal/streams/stream');
10658/*</replacement>*/
8b095871 10659
9987f0c1
IC
10660// TODO(bmeurer): Change this back to const once hole checks are
10661// properly optimized away early in Ignition+TurboFan.
10662/*<replacement>*/
10663var Buffer = require('safe-buffer').Buffer;
10664var OurUint8Array = global.Uint8Array || function () {};
10665function _uint8ArrayToBuffer(chunk) {
10666 return Buffer.from(chunk);
10667}
10668function _isUint8Array(obj) {
10669 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
8b095871 10670}
9987f0c1 10671/*</replacement>*/
8b095871 10672
9987f0c1
IC
10673/*<replacement>*/
10674var util = require('core-util-is');
10675util.inherits = require('inherits');
10676/*</replacement>*/
10677
10678/*<replacement>*/
10679var debugUtil = require('util');
10680var debug = void 0;
10681if (debugUtil && debugUtil.debuglog) {
10682 debug = debugUtil.debuglog('stream');
10683} else {
10684 debug = function () {};
8b095871 10685}
9987f0c1 10686/*</replacement>*/
8b095871 10687
9987f0c1
IC
10688var BufferList = require('./internal/streams/BufferList');
10689var destroyImpl = require('./internal/streams/destroy');
10690var StringDecoder;
10691
10692util.inherits(Readable, Stream);
10693
10694var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
10695
10696function prependListener(emitter, event, fn) {
10697 // Sadly this is not cacheable as some libraries bundle their own
10698 // event emitter implementation with them.
10699 if (typeof emitter.prependListener === 'function') {
10700 return emitter.prependListener(event, fn);
8b095871 10701 } else {
9987f0c1
IC
10702 // This is a hack to make sure that our error handler is attached before any
10703 // userland ones. NEVER DO THIS. This is here only because this code needs
10704 // to continue to work with older versions of Node.js that do not include
10705 // the prependListener() method. The goal is to eventually remove this hack.
10706 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]];
8b095871
IC
10707 }
10708}
10709
9987f0c1
IC
10710function ReadableState(options, stream) {
10711 Duplex = Duplex || require('./_stream_duplex');
8b095871 10712
9987f0c1 10713 options = options || {};
8b095871 10714
9987f0c1
IC
10715 // object stream flag. Used to make read(n) ignore n and to
10716 // make all the buffer merging and length checks go away
10717 this.objectMode = !!options.objectMode;
8b095871 10718
9987f0c1 10719 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8b095871 10720
9987f0c1
IC
10721 // the point at which it stops calling _read() to fill the buffer
10722 // Note: 0 is a valid value, means "don't call _read preemptively ever"
10723 var hwm = options.highWaterMark;
10724 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
10725 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 10726
9987f0c1
IC
10727 // cast to ints.
10728 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 10729
9987f0c1
IC
10730 // A linked list is used to store data chunks instead of an array because the
10731 // linked list can remove elements from the beginning faster than
10732 // array.shift()
10733 this.buffer = new BufferList();
10734 this.length = 0;
10735 this.pipes = null;
10736 this.pipesCount = 0;
10737 this.flowing = null;
10738 this.ended = false;
10739 this.endEmitted = false;
10740 this.reading = false;
8b095871 10741
9987f0c1
IC
10742 // a flag to be able to tell if the event 'readable'/'data' is emitted
10743 // immediately, or on a later tick. We set this to true at first, because
10744 // any actions that shouldn't happen until "later" should generally also
10745 // not happen before the first read call.
10746 this.sync = true;
8b095871 10747
9987f0c1
IC
10748 // whenever we return null, then we set a flag to say
10749 // that we're awaiting a 'readable' event emission.
10750 this.needReadable = false;
10751 this.emittedReadable = false;
10752 this.readableListening = false;
10753 this.resumeScheduled = false;
8b095871 10754
9987f0c1
IC
10755 // has it been destroyed
10756 this.destroyed = false;
8b095871 10757
9987f0c1
IC
10758 // Crypto is kind of old and crusty. Historically, its default string
10759 // encoding is 'binary' so we have to make this configurable.
10760 // Everything else in the universe uses 'utf8', though.
10761 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 10762
9987f0c1
IC
10763 // the number of writers that are awaiting a drain event in .pipe()s
10764 this.awaitDrain = 0;
8b095871 10765
9987f0c1
IC
10766 // if true, a maybeReadMore has been scheduled
10767 this.readingMore = false;
8b095871 10768
9987f0c1
IC
10769 this.decoder = null;
10770 this.encoding = null;
10771 if (options.encoding) {
10772 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10773 this.decoder = new StringDecoder(options.encoding);
10774 this.encoding = options.encoding;
8b095871 10775 }
8b095871
IC
10776}
10777
9987f0c1
IC
10778function Readable(options) {
10779 Duplex = Duplex || require('./_stream_duplex');
8b095871 10780
9987f0c1 10781 if (!(this instanceof Readable)) return new Readable(options);
8b095871 10782
9987f0c1 10783 this._readableState = new ReadableState(options, this);
8b095871 10784
9987f0c1
IC
10785 // legacy
10786 this.readable = true;
10787
10788 if (options) {
10789 if (typeof options.read === 'function') this._read = options.read;
10790
10791 if (typeof options.destroy === 'function') this._destroy = options.destroy;
8b095871
IC
10792 }
10793
9987f0c1
IC
10794 Stream.call(this);
10795}
8b095871 10796
9987f0c1
IC
10797Object.defineProperty(Readable.prototype, 'destroyed', {
10798 get: function () {
10799 if (this._readableState === undefined) {
10800 return false;
10801 }
10802 return this._readableState.destroyed;
10803 },
10804 set: function (value) {
10805 // we ignore the value if the stream
10806 // has not been initialized yet
10807 if (!this._readableState) {
10808 return;
8b095871 10809 }
9987f0c1
IC
10810
10811 // backward compatibility, the user is explicitly
10812 // managing destroyed
10813 this._readableState.destroyed = value;
8b095871 10814 }
9987f0c1 10815});
8b095871 10816
9987f0c1
IC
10817Readable.prototype.destroy = destroyImpl.destroy;
10818Readable.prototype._undestroy = destroyImpl.undestroy;
10819Readable.prototype._destroy = function (err, cb) {
10820 this.push(null);
10821 cb(err);
10822};
8b095871 10823
9987f0c1
IC
10824// Manually shove something into the read() buffer.
10825// This returns true if the highWaterMark has not been hit yet,
10826// similar to how Writable.write() returns true if you should
10827// write() some more.
10828Readable.prototype.push = function (chunk, encoding) {
10829 var state = this._readableState;
10830 var skipChunkCheck;
10831
10832 if (!state.objectMode) {
10833 if (typeof chunk === 'string') {
10834 encoding = encoding || state.defaultEncoding;
10835 if (encoding !== state.encoding) {
10836 chunk = Buffer.from(chunk, encoding);
10837 encoding = '';
10838 }
10839 skipChunkCheck = true;
10840 }
10841 } else {
10842 skipChunkCheck = true;
10843 }
8b095871 10844
9987f0c1
IC
10845 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
10846};
8b095871 10847
9987f0c1
IC
10848// Unshift should *always* be something directly out of read()
10849Readable.prototype.unshift = function (chunk) {
10850 return readableAddChunk(this, chunk, null, true, false);
10851};
8b095871 10852
9987f0c1
IC
10853function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
10854 var state = stream._readableState;
10855 if (chunk === null) {
10856 state.reading = false;
10857 onEofChunk(stream, state);
10858 } else {
10859 var er;
10860 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
10861 if (er) {
10862 stream.emit('error', er);
10863 } else if (state.objectMode || chunk && chunk.length > 0) {
10864 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
10865 chunk = _uint8ArrayToBuffer(chunk);
10866 }
10867
10868 if (addToFront) {
10869 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
10870 } else if (state.ended) {
10871 stream.emit('error', new Error('stream.push() after EOF'));
10872 } else {
10873 state.reading = false;
10874 if (state.decoder && !encoding) {
10875 chunk = state.decoder.write(chunk);
10876 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
10877 } else {
10878 addChunk(stream, state, chunk, false);
10879 }
10880 }
10881 } else if (!addToFront) {
10882 state.reading = false;
10883 }
8b095871
IC
10884 }
10885
9987f0c1 10886 return needMoreData(state);
8b095871
IC
10887}
10888
9987f0c1
IC
10889function addChunk(stream, state, chunk, addToFront) {
10890 if (state.flowing && state.length === 0 && !state.sync) {
10891 stream.emit('data', chunk);
10892 stream.read(0);
10893 } else {
10894 // update the buffer info.
10895 state.length += state.objectMode ? 1 : chunk.length;
10896 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
8b095871 10897
9987f0c1 10898 if (state.needReadable) emitReadable(stream);
8b095871 10899 }
9987f0c1 10900 maybeReadMore(stream, state);
8b095871
IC
10901}
10902
9987f0c1
IC
10903function chunkInvalid(state, chunk) {
10904 var er;
10905 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
10906 er = new TypeError('Invalid non-string/buffer chunk');
10907 }
10908 return er;
8b095871
IC
10909}
10910
9987f0c1
IC
10911// if it's past the high water mark, we can push in some more.
10912// Also, if we have no data yet, we can stand some
10913// more bytes. This is to work around cases where hwm=0,
10914// such as the repl. Also, if the push() triggered a
10915// readable event, and the user called read(largeNumber) such that
10916// needReadable was set, then we ought to push more, so that another
10917// 'readable' event will be triggered.
10918function needMoreData(state) {
10919 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8b095871
IC
10920}
10921
9987f0c1
IC
10922Readable.prototype.isPaused = function () {
10923 return this._readableState.flowing === false;
10924};
8b095871 10925
9987f0c1
IC
10926// backwards compatibility.
10927Readable.prototype.setEncoding = function (enc) {
10928 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10929 this._readableState.decoder = new StringDecoder(enc);
10930 this._readableState.encoding = enc;
10931 return this;
10932};
8b095871 10933
9987f0c1
IC
10934// Don't raise the hwm > 8MB
10935var MAX_HWM = 0x800000;
10936function computeNewHighWaterMark(n) {
10937 if (n >= MAX_HWM) {
10938 n = MAX_HWM;
10939 } else {
10940 // Get the next highest power of 2 to prevent increasing hwm excessively in
10941 // tiny amounts
10942 n--;
10943 n |= n >>> 1;
10944 n |= n >>> 2;
10945 n |= n >>> 4;
10946 n |= n >>> 8;
10947 n |= n >>> 16;
10948 n++;
10949 }
10950 return n;
8b095871
IC
10951}
10952
9987f0c1
IC
10953// This function is designed to be inlinable, so please take care when making
10954// changes to the function body.
10955function howMuchToRead(n, state) {
10956 if (n <= 0 || state.length === 0 && state.ended) return 0;
10957 if (state.objectMode) return 1;
10958 if (n !== n) {
10959 // Only flow one buffer at a time
10960 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
10961 }
10962 // If we're asking for more than the current hwm, then raise the hwm.
10963 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
10964 if (n <= state.length) return n;
10965 // Don't have enough
10966 if (!state.ended) {
10967 state.needReadable = true;
10968 return 0;
10969 }
10970 return state.length;
8b095871
IC
10971}
10972
9987f0c1
IC
10973// you can override either this method, or the async _read(n) below.
10974Readable.prototype.read = function (n) {
10975 debug('read', n);
10976 n = parseInt(n, 10);
10977 var state = this._readableState;
10978 var nOrig = n;
8b095871 10979
9987f0c1
IC
10980 if (n !== 0) state.emittedReadable = false;
10981
10982 // if we're doing read(0) to trigger a readable event, but we
10983 // already have a bunch of data in the buffer, then just trigger
10984 // the 'readable' event and move on.
10985 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
10986 debug('read: emitReadable', state.length, state.ended);
10987 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
10988 return null;
8b095871 10989 }
8b095871 10990
9987f0c1 10991 n = howMuchToRead(n, state);
8b095871 10992
9987f0c1
IC
10993 // if we've ended, and we're now clear, then finish it up.
10994 if (n === 0 && state.ended) {
10995 if (state.length === 0) endReadable(this);
10996 return null;
10997 }
8b095871 10998
9987f0c1
IC
10999 // All the actual chunk generation logic needs to be
11000 // *below* the call to _read. The reason is that in certain
11001 // synthetic stream cases, such as passthrough streams, _read
11002 // may be a completely synchronous operation which may change
11003 // the state of the read buffer, providing enough data when
11004 // before there was *not* enough.
11005 //
11006 // So, the steps are:
11007 // 1. Figure out what the state of things will be after we do
11008 // a read from the buffer.
11009 //
11010 // 2. If that resulting state will trigger a _read, then call _read.
11011 // Note that this may be asynchronous, or synchronous. Yes, it is
11012 // deeply ugly to write APIs this way, but that still doesn't mean
11013 // that the Readable class should behave improperly, as streams are
11014 // designed to be sync/async agnostic.
11015 // Take note if the _read call is sync or async (ie, if the read call
11016 // has returned yet), so that we know whether or not it's safe to emit
11017 // 'readable' etc.
11018 //
11019 // 3. Actually pull the requested chunks out of the buffer and return.
8b095871 11020
9987f0c1
IC
11021 // if we need a readable event, then we need to do some reading.
11022 var doRead = state.needReadable;
11023 debug('need readable', doRead);
8b095871 11024
9987f0c1
IC
11025 // if we currently have less than the highWaterMark, then also read some
11026 if (state.length === 0 || state.length - n < state.highWaterMark) {
11027 doRead = true;
11028 debug('length less than watermark', doRead);
11029 }
8b095871 11030
9987f0c1
IC
11031 // however, if we've ended, then there's no point, and if we're already
11032 // reading, then it's unnecessary.
11033 if (state.ended || state.reading) {
11034 doRead = false;
11035 debug('reading or ended', doRead);
11036 } else if (doRead) {
11037 debug('do read');
11038 state.reading = true;
11039 state.sync = true;
11040 // if the length is currently zero, then we *need* a readable event.
11041 if (state.length === 0) state.needReadable = true;
11042 // call internal read method
11043 this._read(state.highWaterMark);
11044 state.sync = false;
11045 // If _read pushed data synchronously, then `reading` will be false,
11046 // and we need to re-evaluate how much data we can return to the user.
11047 if (!state.reading) n = howMuchToRead(nOrig, state);
11048 }
8b095871 11049
9987f0c1
IC
11050 var ret;
11051 if (n > 0) ret = fromList(n, state);else ret = null;
8b095871 11052
9987f0c1
IC
11053 if (ret === null) {
11054 state.needReadable = true;
11055 n = 0;
11056 } else {
11057 state.length -= n;
11058 }
8b095871 11059
9987f0c1
IC
11060 if (state.length === 0) {
11061 // If we have nothing in the buffer, then we want to know
11062 // as soon as we *do* get something into the buffer.
11063 if (!state.ended) state.needReadable = true;
8b095871 11064
9987f0c1
IC
11065 // If we tried to read() past the EOF, then emit end on the next tick.
11066 if (nOrig !== n && state.ended) endReadable(this);
11067 }
8b095871 11068
9987f0c1 11069 if (ret !== null) this.emit('data', ret);
8b095871 11070
9987f0c1
IC
11071 return ret;
11072};
8b095871 11073
9987f0c1
IC
11074function onEofChunk(stream, state) {
11075 if (state.ended) return;
11076 if (state.decoder) {
11077 var chunk = state.decoder.end();
11078 if (chunk && chunk.length) {
11079 state.buffer.push(chunk);
11080 state.length += state.objectMode ? 1 : chunk.length;
11081 }
11082 }
11083 state.ended = true;
8b095871 11084
9987f0c1
IC
11085 // emit 'readable' now to make sure it gets picked up.
11086 emitReadable(stream);
8b095871
IC
11087}
11088
9987f0c1
IC
11089// Don't emit readable right away in sync mode, because this can trigger
11090// another read() call => stack overflow. This way, it might trigger
11091// a nextTick recursion warning, but that's not so bad.
11092function emitReadable(stream) {
11093 var state = stream._readableState;
11094 state.needReadable = false;
11095 if (!state.emittedReadable) {
11096 debug('emitReadable', state.flowing);
11097 state.emittedReadable = true;
11098 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
11099 }
8b095871
IC
11100}
11101
9987f0c1
IC
11102function emitReadable_(stream) {
11103 debug('emit readable');
11104 stream.emit('readable');
11105 flow(stream);
8b095871
IC
11106}
11107
9987f0c1
IC
11108// at this point, the user has presumably seen the 'readable' event,
11109// and called read() to consume some data. that may have triggered
11110// in turn another _read(n) call, in which case reading = true if
11111// it's in progress.
11112// However, if we're not ended, or reading, and the length < hwm,
11113// then go ahead and try to read some more preemptively.
11114function maybeReadMore(stream, state) {
11115 if (!state.readingMore) {
11116 state.readingMore = true;
11117 processNextTick(maybeReadMore_, stream, state);
11118 }
8b095871
IC
11119}
11120
9987f0c1
IC
11121function maybeReadMore_(stream, state) {
11122 var len = state.length;
11123 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
11124 debug('maybeReadMore read 0');
11125 stream.read(0);
11126 if (len === state.length)
11127 // didn't get any data, stop spinning.
11128 break;else len = state.length;
11129 }
11130 state.readingMore = false;
8b095871
IC
11131}
11132
9987f0c1
IC
11133// abstract method. to be overridden in specific implementation classes.
11134// call cb(er, data) where data is <= n in length.
11135// for virtual (non-string, non-buffer) streams, "length" is somewhat
11136// arbitrary, and perhaps not very meaningful.
11137Readable.prototype._read = function (n) {
11138 this.emit('error', new Error('_read() is not implemented'));
11139};
8b095871 11140
9987f0c1
IC
11141Readable.prototype.pipe = function (dest, pipeOpts) {
11142 var src = this;
11143 var state = this._readableState;
11144
11145 switch (state.pipesCount) {
11146 case 0:
11147 state.pipes = dest;
11148 break;
11149 case 1:
11150 state.pipes = [state.pipes, dest];
11151 break;
11152 default:
11153 state.pipes.push(dest);
11154 break;
8b095871 11155 }
9987f0c1
IC
11156 state.pipesCount += 1;
11157 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
8b095871 11158
9987f0c1 11159 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
8b095871 11160
9987f0c1
IC
11161 var endFn = doEnd ? onend : unpipe;
11162 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
8b095871 11163
9987f0c1
IC
11164 dest.on('unpipe', onunpipe);
11165 function onunpipe(readable, unpipeInfo) {
11166 debug('onunpipe');
11167 if (readable === src) {
11168 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
11169 unpipeInfo.hasUnpiped = true;
11170 cleanup();
11171 }
11172 }
8b095871
IC
11173 }
11174
9987f0c1
IC
11175 function onend() {
11176 debug('onend');
11177 dest.end();
11178 }
8b095871 11179
9987f0c1
IC
11180 // when the dest drains, it reduces the awaitDrain counter
11181 // on the source. This would be more elegant with a .once()
11182 // handler in flow(), but adding and removing repeatedly is
11183 // too slow.
11184 var ondrain = pipeOnDrain(src);
11185 dest.on('drain', ondrain);
8b095871 11186
9987f0c1
IC
11187 var cleanedUp = false;
11188 function cleanup() {
11189 debug('cleanup');
11190 // cleanup event handlers once the pipe is broken
11191 dest.removeListener('close', onclose);
11192 dest.removeListener('finish', onfinish);
11193 dest.removeListener('drain', ondrain);
11194 dest.removeListener('error', onerror);
11195 dest.removeListener('unpipe', onunpipe);
11196 src.removeListener('end', onend);
11197 src.removeListener('end', unpipe);
11198 src.removeListener('data', ondata);
8b095871 11199
9987f0c1
IC
11200 cleanedUp = true;
11201
11202 // if the reader is waiting for a drain event from this
11203 // specific writer, then it would cause it to never start
11204 // flowing again.
11205 // So, if this is awaiting a drain, then we just call it now.
11206 // If we don't know, then assume that we are waiting for one.
11207 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
8b095871 11208 }
8b095871 11209
9987f0c1
IC
11210 // If the user pushes more data while we're writing to dest then we'll end up
11211 // in ondata again. However, we only want to increase awaitDrain once because
11212 // dest will only emit one 'drain' event for the multiple writes.
11213 // => Introduce a guard on increasing awaitDrain.
11214 var increasedAwaitDrain = false;
11215 src.on('data', ondata);
11216 function ondata(chunk) {
11217 debug('ondata');
11218 increasedAwaitDrain = false;
11219 var ret = dest.write(chunk);
11220 if (false === ret && !increasedAwaitDrain) {
11221 // If the user unpiped during `dest.write()`, it is possible
11222 // to get stuck in a permanently paused state if that write
11223 // also returned false.
11224 // => Check whether `dest` is still a piping destination.
11225 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
11226 debug('false write response, pause', src._readableState.awaitDrain);
11227 src._readableState.awaitDrain++;
11228 increasedAwaitDrain = true;
11229 }
11230 src.pause();
11231 }
8b095871 11232 }
8b095871 11233
9987f0c1
IC
11234 // if the dest has an error, then stop piping into it.
11235 // however, don't suppress the throwing behavior for this.
11236 function onerror(er) {
11237 debug('onerror', er);
11238 unpipe();
11239 dest.removeListener('error', onerror);
11240 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
8b095871 11241 }
8b095871 11242
9987f0c1
IC
11243 // Make sure our error handler is attached before userland ones.
11244 prependListener(dest, 'error', onerror);
11245
11246 // Both close and finish should trigger unpipe, but only once.
11247 function onclose() {
11248 dest.removeListener('finish', onfinish);
11249 unpipe();
8b095871 11250 }
9987f0c1
IC
11251 dest.once('close', onclose);
11252 function onfinish() {
11253 debug('onfinish');
11254 dest.removeListener('close', onclose);
11255 unpipe();
11256 }
11257 dest.once('finish', onfinish);
8b095871 11258
9987f0c1
IC
11259 function unpipe() {
11260 debug('unpipe');
11261 src.unpipe(dest);
8b095871 11262 }
8b095871 11263
9987f0c1
IC
11264 // tell the dest that it's being piped to
11265 dest.emit('pipe', src);
8b095871 11266
9987f0c1
IC
11267 // start the flow if it hasn't been started already.
11268 if (!state.flowing) {
11269 debug('pipe resume');
11270 src.resume();
8b095871
IC
11271 }
11272
9987f0c1
IC
11273 return dest;
11274};
8b095871 11275
9987f0c1
IC
11276function pipeOnDrain(src) {
11277 return function () {
11278 var state = src._readableState;
11279 debug('pipeOnDrain', state.awaitDrain);
11280 if (state.awaitDrain) state.awaitDrain--;
11281 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
11282 state.flowing = true;
11283 flow(src);
11284 }
11285 };
8b095871
IC
11286}
11287
9987f0c1
IC
11288Readable.prototype.unpipe = function (dest) {
11289 var state = this._readableState;
11290 var unpipeInfo = { hasUnpiped: false };
8b095871 11291
9987f0c1
IC
11292 // if we're not piping anywhere, then do nothing.
11293 if (state.pipesCount === 0) return this;
8b095871 11294
9987f0c1
IC
11295 // just one destination. most common case.
11296 if (state.pipesCount === 1) {
11297 // passed in one, but it's not the right one.
11298 if (dest && dest !== state.pipes) return this;
11299
11300 if (!dest) dest = state.pipes;
11301
11302 // got a match.
11303 state.pipes = null;
11304 state.pipesCount = 0;
11305 state.flowing = false;
11306 if (dest) dest.emit('unpipe', this, unpipeInfo);
11307 return this;
8b095871
IC
11308 }
11309
9987f0c1 11310 // slow case. multiple pipe destinations.
8b095871 11311
9987f0c1
IC
11312 if (!dest) {
11313 // remove all.
11314 var dests = state.pipes;
11315 var len = state.pipesCount;
11316 state.pipes = null;
11317 state.pipesCount = 0;
11318 state.flowing = false;
8b095871 11319
9987f0c1
IC
11320 for (var i = 0; i < len; i++) {
11321 dests[i].emit('unpipe', this, unpipeInfo);
11322 }return this;
8b095871 11323 }
8b095871 11324
9987f0c1
IC
11325 // try to find the right one.
11326 var index = indexOf(state.pipes, dest);
11327 if (index === -1) return this;
8b095871 11328
9987f0c1
IC
11329 state.pipes.splice(index, 1);
11330 state.pipesCount -= 1;
11331 if (state.pipesCount === 1) state.pipes = state.pipes[0];
8b095871 11332
9987f0c1 11333 dest.emit('unpipe', this, unpipeInfo);
8b095871 11334
9987f0c1
IC
11335 return this;
11336};
8b095871 11337
9987f0c1
IC
11338// set up data events if they are asked for
11339// Ensure readable listeners eventually get something
11340Readable.prototype.on = function (ev, fn) {
11341 var res = Stream.prototype.on.call(this, ev, fn);
11342
11343 if (ev === 'data') {
11344 // Start flowing on next tick if stream isn't explicitly paused
11345 if (this._readableState.flowing !== false) this.resume();
11346 } else if (ev === 'readable') {
11347 var state = this._readableState;
11348 if (!state.endEmitted && !state.readableListening) {
11349 state.readableListening = state.needReadable = true;
11350 state.emittedReadable = false;
11351 if (!state.reading) {
11352 processNextTick(nReadingNextTick, this);
11353 } else if (state.length) {
11354 emitReadable(this);
11355 }
11356 }
8b095871 11357 }
8b095871 11358
9987f0c1
IC
11359 return res;
11360};
11361Readable.prototype.addListener = Readable.prototype.on;
8b095871 11362
9987f0c1
IC
11363function nReadingNextTick(self) {
11364 debug('readable nexttick read 0');
11365 self.read(0);
8b095871
IC
11366}
11367
9987f0c1
IC
11368// pause() and resume() are remnants of the legacy readable stream API
11369// If the user uses them, then switch into old mode.
11370Readable.prototype.resume = function () {
11371 var state = this._readableState;
11372 if (!state.flowing) {
11373 debug('resume');
11374 state.flowing = true;
11375 resume(this, state);
11376 }
11377 return this;
11378};
11379
11380function resume(stream, state) {
11381 if (!state.resumeScheduled) {
11382 state.resumeScheduled = true;
11383 processNextTick(resume_, stream, state);
8b095871 11384 }
8b095871
IC
11385}
11386
9987f0c1
IC
11387function resume_(stream, state) {
11388 if (!state.reading) {
11389 debug('resume read 0');
11390 stream.read(0);
11391 }
11392
11393 state.resumeScheduled = false;
11394 state.awaitDrain = 0;
11395 stream.emit('resume');
11396 flow(stream);
11397 if (state.flowing && !state.reading) stream.read(0);
8b095871
IC
11398}
11399
9987f0c1
IC
11400Readable.prototype.pause = function () {
11401 debug('call pause flowing=%j', this._readableState.flowing);
11402 if (false !== this._readableState.flowing) {
11403 debug('pause');
11404 this._readableState.flowing = false;
11405 this.emit('pause');
11406 }
11407 return this;
11408};
11409
11410function flow(stream) {
11411 var state = stream._readableState;
11412 debug('flow', state.flowing);
11413 while (state.flowing && stream.read() !== null) {}
8b095871
IC
11414}
11415
9987f0c1
IC
11416// wrap an old-style stream as the async data source.
11417// This is *not* part of the readable stream interface.
11418// It is an ugly unfortunate mess of history.
11419Readable.prototype.wrap = function (stream) {
11420 var state = this._readableState;
11421 var paused = false;
8b095871 11422
9987f0c1
IC
11423 var self = this;
11424 stream.on('end', function () {
11425 debug('wrapped end');
11426 if (state.decoder && !state.ended) {
11427 var chunk = state.decoder.end();
11428 if (chunk && chunk.length) self.push(chunk);
11429 }
8b095871 11430
9987f0c1
IC
11431 self.push(null);
11432 });
8b095871 11433
9987f0c1
IC
11434 stream.on('data', function (chunk) {
11435 debug('wrapped data');
11436 if (state.decoder) chunk = state.decoder.write(chunk);
8b095871 11437
9987f0c1
IC
11438 // don't skip over falsy values in objectMode
11439 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
8b095871 11440
9987f0c1
IC
11441 var ret = self.push(chunk);
11442 if (!ret) {
11443 paused = true;
11444 stream.pause();
8b095871 11445 }
9987f0c1
IC
11446 });
11447
11448 // proxy all the other methods.
11449 // important when wrapping filters and duplexes.
11450 for (var i in stream) {
11451 if (this[i] === undefined && typeof stream[i] === 'function') {
11452 this[i] = function (method) {
11453 return function () {
11454 return stream[method].apply(stream, arguments);
11455 };
11456 }(i);
8b095871 11457 }
8b095871
IC
11458 }
11459
9987f0c1
IC
11460 // proxy certain important events.
11461 for (var n = 0; n < kProxyEvents.length; n++) {
11462 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
11463 }
8b095871 11464
9987f0c1
IC
11465 // when we try to consume some more bytes, simply unpause the
11466 // underlying stream.
11467 self._read = function (n) {
11468 debug('wrapped _read', n);
11469 if (paused) {
11470 paused = false;
11471 stream.resume();
11472 }
11473 };
8b095871 11474
9987f0c1
IC
11475 return self;
11476};
8b095871 11477
9987f0c1
IC
11478// exposed for testing purposes only.
11479Readable._fromList = fromList;
8b095871 11480
9987f0c1
IC
11481// Pluck off n bytes from an array of buffers.
11482// Length is the combined lengths of all the buffers in the list.
11483// This function is designed to be inlinable, so please take care when making
11484// changes to the function body.
11485function fromList(n, state) {
11486 // nothing buffered
11487 if (state.length === 0) return null;
8b095871 11488
9987f0c1
IC
11489 var ret;
11490 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
11491 // read it all, truncate the list
11492 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);
11493 state.buffer.clear();
8b095871 11494 } else {
9987f0c1
IC
11495 // read part of list
11496 ret = fromListPartial(n, state.buffer, state.decoder);
8b095871
IC
11497 }
11498
9987f0c1 11499 return ret;
8b095871
IC
11500}
11501
9987f0c1
IC
11502// Extracts only enough buffered data to satisfy the amount requested.
11503// This function is designed to be inlinable, so please take care when making
11504// changes to the function body.
11505function fromListPartial(n, list, hasStrings) {
11506 var ret;
11507 if (n < list.head.data.length) {
11508 // slice is the same for buffers and strings
11509 ret = list.head.data.slice(0, n);
11510 list.head.data = list.head.data.slice(n);
11511 } else if (n === list.head.data.length) {
11512 // first chunk is a perfect match
11513 ret = list.shift();
8b095871 11514 } else {
9987f0c1
IC
11515 // result spans more than one buffer
11516 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
8b095871 11517 }
9987f0c1 11518 return ret;
8b095871
IC
11519}
11520
9987f0c1
IC
11521// Copies a specified amount of characters from the list of buffered data
11522// chunks.
11523// This function is designed to be inlinable, so please take care when making
11524// changes to the function body.
11525function copyFromBufferString(n, list) {
11526 var p = list.head;
11527 var c = 1;
11528 var ret = p.data;
11529 n -= ret.length;
11530 while (p = p.next) {
11531 var str = p.data;
11532 var nb = n > str.length ? str.length : n;
11533 if (nb === str.length) ret += str;else ret += str.slice(0, n);
11534 n -= nb;
11535 if (n === 0) {
11536 if (nb === str.length) {
11537 ++c;
11538 if (p.next) list.head = p.next;else list.head = list.tail = null;
11539 } else {
11540 list.head = p;
11541 p.data = str.slice(nb);
11542 }
11543 break;
11544 }
11545 ++c;
8b095871 11546 }
9987f0c1
IC
11547 list.length -= c;
11548 return ret;
8b095871
IC
11549}
11550
9987f0c1
IC
11551// Copies a specified amount of bytes from the list of buffered data chunks.
11552// This function is designed to be inlinable, so please take care when making
11553// changes to the function body.
11554function copyFromBuffer(n, list) {
11555 var ret = Buffer.allocUnsafe(n);
11556 var p = list.head;
11557 var c = 1;
11558 p.data.copy(ret);
11559 n -= p.data.length;
11560 while (p = p.next) {
11561 var buf = p.data;
11562 var nb = n > buf.length ? buf.length : n;
11563 buf.copy(ret, ret.length - n, 0, nb);
11564 n -= nb;
11565 if (n === 0) {
11566 if (nb === buf.length) {
11567 ++c;
11568 if (p.next) list.head = p.next;else list.head = list.tail = null;
11569 } else {
11570 list.head = p;
11571 p.data = buf.slice(nb);
8b095871 11572 }
9987f0c1 11573 break;
8b095871 11574 }
9987f0c1 11575 ++c;
8b095871 11576 }
9987f0c1
IC
11577 list.length -= c;
11578 return ret;
8b095871
IC
11579}
11580
9987f0c1
IC
11581function endReadable(stream) {
11582 var state = stream._readableState;
8b095871 11583
9987f0c1
IC
11584 // If we get here before consuming all the bytes, then that is a
11585 // bug in node. Should never happen.
11586 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
8b095871 11587
9987f0c1
IC
11588 if (!state.endEmitted) {
11589 state.ended = true;
11590 processNextTick(endReadableNT, state, stream);
8b095871 11591 }
9987f0c1 11592}
8b095871 11593
9987f0c1
IC
11594function endReadableNT(state, stream) {
11595 // Check that we didn't get one last unshift.
11596 if (!state.endEmitted && state.length === 0) {
11597 state.endEmitted = true;
11598 stream.readable = false;
11599 stream.emit('end');
11600 }
8b095871
IC
11601}
11602
9987f0c1
IC
11603function forEach(xs, f) {
11604 for (var i = 0, l = xs.length; i < l; i++) {
11605 f(xs[i], i);
11606 }
8b095871
IC
11607}
11608
9987f0c1
IC
11609function indexOf(xs, x) {
11610 for (var i = 0, l = xs.length; i < l; i++) {
11611 if (xs[i] === x) return i;
8b095871 11612 }
9987f0c1 11613 return -1;
8b095871 11614}
9987f0c1
IC
11615}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
11616},{"./_stream_duplex":14,"./internal/streams/BufferList":19,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"events":6,"inherits":8,"isarray":10,"process-nextick-args":11,"safe-buffer":26,"string_decoder/":28,"util":3}],17:[function(require,module,exports){
11617// Copyright Joyent, Inc. and other Node contributors.
11618//
11619// Permission is hereby granted, free of charge, to any person obtaining a
11620// copy of this software and associated documentation files (the
11621// "Software"), to deal in the Software without restriction, including
11622// without limitation the rights to use, copy, modify, merge, publish,
11623// distribute, sublicense, and/or sell copies of the Software, and to permit
11624// persons to whom the Software is furnished to do so, subject to the
11625// following conditions:
11626//
11627// The above copyright notice and this permission notice shall be included
11628// in all copies or substantial portions of the Software.
11629//
11630// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11631// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11632// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11633// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11634// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11635// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11636// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 11637
9987f0c1
IC
11638// a transform stream is a readable/writable stream where you do
11639// something with the data. Sometimes it's called a "filter",
11640// but that's not a great name for it, since that implies a thing where
11641// some bits pass through, and others are simply ignored. (That would
11642// be a valid example of a transform, of course.)
11643//
11644// While the output is causally related to the input, it's not a
11645// necessarily symmetric or synchronous transformation. For example,
11646// a zlib stream might take multiple plain-text writes(), and then
11647// emit a single compressed chunk some time in the future.
11648//
11649// Here's how this works:
11650//
11651// The Transform stream has all the aspects of the readable and writable
11652// stream classes. When you write(chunk), that calls _write(chunk,cb)
11653// internally, and returns false if there's a lot of pending writes
11654// buffered up. When you call read(), that calls _read(n) until
11655// there's enough pending readable data buffered up.
11656//
11657// In a transform stream, the written data is placed in a buffer. When
11658// _read(n) is called, it transforms the queued up data, calling the
11659// buffered _write cb's as it consumes chunks. If consuming a single
11660// written chunk would result in multiple output chunks, then the first
11661// outputted bit calls the readcb, and subsequent chunks just go into
11662// the read buffer, and will cause it to emit 'readable' if necessary.
11663//
11664// This way, back-pressure is actually determined by the reading side,
11665// since _read has to be called to start processing a new chunk. However,
11666// a pathological inflate type of transform can cause excessive buffering
11667// here. For example, imagine a stream where every byte of input is
11668// interpreted as an integer from 0-255, and then results in that many
11669// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
11670// 1kb of data being output. In this case, you could write a very small
11671// amount of input, and end up with a very large amount of output. In
11672// such a pathological inflating mechanism, there'd be no way to tell
11673// the system to stop doing the transform. A single 4MB write could
11674// cause the system to run out of memory.
11675//
11676// However, even in such a pathological case, only a single written chunk
11677// would be consumed, and then the rest would wait (un-transformed) until
11678// the results of the previous transformed chunk were consumed.
8b095871 11679
9987f0c1 11680'use strict';
8b095871 11681
9987f0c1 11682module.exports = Transform;
8b095871 11683
9987f0c1 11684var Duplex = require('./_stream_duplex');
8b095871 11685
9987f0c1
IC
11686/*<replacement>*/
11687var util = require('core-util-is');
11688util.inherits = require('inherits');
11689/*</replacement>*/
8b095871 11690
9987f0c1 11691util.inherits(Transform, Duplex);
8b095871 11692
9987f0c1
IC
11693function TransformState(stream) {
11694 this.afterTransform = function (er, data) {
11695 return afterTransform(stream, er, data);
11696 };
8b095871 11697
9987f0c1
IC
11698 this.needTransform = false;
11699 this.transforming = false;
11700 this.writecb = null;
11701 this.writechunk = null;
11702 this.writeencoding = null;
11703}
8b095871 11704
9987f0c1
IC
11705function afterTransform(stream, er, data) {
11706 var ts = stream._transformState;
11707 ts.transforming = false;
8b095871 11708
9987f0c1 11709 var cb = ts.writecb;
8b095871 11710
9987f0c1
IC
11711 if (!cb) {
11712 return stream.emit('error', new Error('write callback called multiple times'));
11713 }
8b095871 11714
9987f0c1
IC
11715 ts.writechunk = null;
11716 ts.writecb = null;
8b095871 11717
9987f0c1 11718 if (data !== null && data !== undefined) stream.push(data);
8b095871 11719
9987f0c1 11720 cb(er);
8b095871 11721
9987f0c1
IC
11722 var rs = stream._readableState;
11723 rs.reading = false;
11724 if (rs.needReadable || rs.length < rs.highWaterMark) {
11725 stream._read(rs.highWaterMark);
11726 }
11727}
8b095871 11728
9987f0c1
IC
11729function Transform(options) {
11730 if (!(this instanceof Transform)) return new Transform(options);
8b095871 11731
9987f0c1 11732 Duplex.call(this, options);
8b095871 11733
9987f0c1 11734 this._transformState = new TransformState(this);
8b095871 11735
9987f0c1 11736 var stream = this;
8b095871 11737
9987f0c1
IC
11738 // start out asking for a readable event once data is transformed.
11739 this._readableState.needReadable = true;
8b095871 11740
9987f0c1
IC
11741 // we have implemented the _read method, and done the other things
11742 // that Readable wants before the first _read call, so unset the
11743 // sync guard flag.
11744 this._readableState.sync = false;
8b095871 11745
9987f0c1
IC
11746 if (options) {
11747 if (typeof options.transform === 'function') this._transform = options.transform;
8b095871 11748
9987f0c1 11749 if (typeof options.flush === 'function') this._flush = options.flush;
8b095871 11750 }
8b095871 11751
9987f0c1
IC
11752 // When the writable side finishes, then flush out anything remaining.
11753 this.once('prefinish', function () {
11754 if (typeof this._flush === 'function') this._flush(function (er, data) {
11755 done(stream, er, data);
11756 });else done(stream);
11757 });
11758}
8b095871 11759
9987f0c1
IC
11760Transform.prototype.push = function (chunk, encoding) {
11761 this._transformState.needTransform = false;
11762 return Duplex.prototype.push.call(this, chunk, encoding);
11763};
8b095871 11764
9987f0c1
IC
11765// This is the part where you do stuff!
11766// override this function in implementation classes.
11767// 'chunk' is an input chunk.
11768//
11769// Call `push(newChunk)` to pass along transformed output
11770// to the readable side. You may call 'push' zero or more times.
11771//
11772// Call `cb(err)` when you are done with this chunk. If you pass
11773// an error, then that'll put the hurt on the whole operation. If you
11774// never call cb(), then you'll never get another chunk.
11775Transform.prototype._transform = function (chunk, encoding, cb) {
11776 throw new Error('_transform() is not implemented');
11777};
8b095871 11778
9987f0c1
IC
11779Transform.prototype._write = function (chunk, encoding, cb) {
11780 var ts = this._transformState;
11781 ts.writecb = cb;
11782 ts.writechunk = chunk;
11783 ts.writeencoding = encoding;
11784 if (!ts.transforming) {
11785 var rs = this._readableState;
11786 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
8b095871 11787 }
9987f0c1 11788};
8b095871 11789
9987f0c1
IC
11790// Doesn't matter what the args are here.
11791// _transform does all the work.
11792// That we got here means that the readable side wants more data.
11793Transform.prototype._read = function (n) {
11794 var ts = this._transformState;
8b095871 11795
9987f0c1
IC
11796 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
11797 ts.transforming = true;
11798 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11799 } else {
11800 // mark that we need a transform, so that any data that comes in
11801 // will get processed, now that we've asked for it.
11802 ts.needTransform = true;
11803 }
11804};
8b095871 11805
9987f0c1
IC
11806Transform.prototype._destroy = function (err, cb) {
11807 var _this = this;
8b095871 11808
9987f0c1
IC
11809 Duplex.prototype._destroy.call(this, err, function (err2) {
11810 cb(err2);
11811 _this.emit('close');
11812 });
11813};
8b095871 11814
9987f0c1
IC
11815function done(stream, er, data) {
11816 if (er) return stream.emit('error', er);
8b095871 11817
9987f0c1 11818 if (data !== null && data !== undefined) stream.push(data);
8b095871 11819
9987f0c1
IC
11820 // if there's nothing in the write buffer, then that means
11821 // that nothing more will ever be provided
11822 var ws = stream._writableState;
11823 var ts = stream._transformState;
8b095871 11824
9987f0c1 11825 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
8b095871 11826
9987f0c1
IC
11827 if (ts.transforming) throw new Error('Calling transform done when still transforming');
11828
11829 return stream.push(null);
11830}
11831},{"./_stream_duplex":14,"core-util-is":5,"inherits":8}],18:[function(require,module,exports){
11832(function (process,global){
8b095871
IC
11833// Copyright Joyent, Inc. and other Node contributors.
11834//
11835// Permission is hereby granted, free of charge, to any person obtaining a
11836// copy of this software and associated documentation files (the
11837// "Software"), to deal in the Software without restriction, including
11838// without limitation the rights to use, copy, modify, merge, publish,
11839// distribute, sublicense, and/or sell copies of the Software, and to permit
11840// persons to whom the Software is furnished to do so, subject to the
11841// following conditions:
11842//
11843// The above copyright notice and this permission notice shall be included
11844// in all copies or substantial portions of the Software.
11845//
11846// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11847// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11848// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11849// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11850// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11851// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11852// USE OR OTHER DEALINGS IN THE SOFTWARE.
11853
9987f0c1
IC
11854// A bit simpler than readable streams.
11855// Implement an async ._write(chunk, encoding, cb), and it'll handle all
11856// the drain event emission and buffering.
11857
11858'use strict';
11859
11860/*<replacement>*/
11861
11862var processNextTick = require('process-nextick-args');
11863/*</replacement>*/
11864
11865module.exports = Writable;
11866
11867/* <replacement> */
11868function WriteReq(chunk, encoding, cb) {
11869 this.chunk = chunk;
11870 this.encoding = encoding;
11871 this.callback = cb;
11872 this.next = null;
8b095871 11873}
8b095871 11874
9987f0c1
IC
11875// It seems a linked list but it is not
11876// there will be only 2 of these for each stream
11877function CorkedRequest(state) {
11878 var _this = this;
8b095871 11879
9987f0c1
IC
11880 this.next = null;
11881 this.entry = null;
11882 this.finish = function () {
11883 onCorkedFinish(_this, state);
11884 };
11885}
11886/* </replacement> */
8b095871 11887
9987f0c1
IC
11888/*<replacement>*/
11889var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
11890/*</replacement>*/
8b095871 11891
9987f0c1
IC
11892/*<replacement>*/
11893var Duplex;
11894/*</replacement>*/
11895
11896Writable.WritableState = WritableState;
11897
11898/*<replacement>*/
11899var util = require('core-util-is');
11900util.inherits = require('inherits');
11901/*</replacement>*/
11902
11903/*<replacement>*/
11904var internalUtil = {
11905 deprecate: require('util-deprecate')
8b095871 11906};
9987f0c1 11907/*</replacement>*/
8b095871 11908
9987f0c1
IC
11909/*<replacement>*/
11910var Stream = require('./internal/streams/stream');
11911/*</replacement>*/
8b095871 11912
9987f0c1
IC
11913/*<replacement>*/
11914var Buffer = require('safe-buffer').Buffer;
11915var OurUint8Array = global.Uint8Array || function () {};
11916function _uint8ArrayToBuffer(chunk) {
11917 return Buffer.from(chunk);
11918}
11919function _isUint8Array(obj) {
11920 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
11921}
11922/*</replacement>*/
8b095871 11923
9987f0c1 11924var destroyImpl = require('./internal/streams/destroy');
8b095871 11925
9987f0c1 11926util.inherits(Writable, Stream);
8b095871 11927
9987f0c1 11928function nop() {}
8b095871 11929
9987f0c1
IC
11930function WritableState(options, stream) {
11931 Duplex = Duplex || require('./_stream_duplex');
8b095871 11932
9987f0c1 11933 options = options || {};
8b095871 11934
9987f0c1
IC
11935 // object stream flag to indicate whether or not this stream
11936 // contains buffers or objects.
11937 this.objectMode = !!options.objectMode;
8b095871 11938
9987f0c1 11939 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
8b095871 11940
9987f0c1
IC
11941 // the point at which write() starts returning false
11942 // Note: 0 is a valid value, means that we always return false if
11943 // the entire buffer is not flushed immediately on write()
11944 var hwm = options.highWaterMark;
11945 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
11946 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 11947
9987f0c1
IC
11948 // cast to ints.
11949 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 11950
9987f0c1
IC
11951 // if _final has been called
11952 this.finalCalled = false;
8b095871 11953
9987f0c1
IC
11954 // drain event flag.
11955 this.needDrain = false;
11956 // at the start of calling end()
11957 this.ending = false;
11958 // when end() has been called, and returned
11959 this.ended = false;
11960 // when 'finish' is emitted
11961 this.finished = false;
8b095871 11962
9987f0c1
IC
11963 // has it been destroyed
11964 this.destroyed = false;
8b095871 11965
9987f0c1
IC
11966 // should we decode strings into buffers before passing to _write?
11967 // this is here so that some node-core streams can optimize string
11968 // handling at a lower level.
11969 var noDecode = options.decodeStrings === false;
11970 this.decodeStrings = !noDecode;
8b095871 11971
9987f0c1
IC
11972 // Crypto is kind of old and crusty. Historically, its default string
11973 // encoding is 'binary' so we have to make this configurable.
11974 // Everything else in the universe uses 'utf8', though.
11975 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 11976
9987f0c1
IC
11977 // not an actual buffer we keep track of, but a measurement
11978 // of how much we're waiting to get pushed to some underlying
11979 // socket or file.
11980 this.length = 0;
8b095871 11981
9987f0c1
IC
11982 // a flag to see when we're in the middle of a write.
11983 this.writing = false;
8b095871 11984
9987f0c1
IC
11985 // when true all writes will be buffered until .uncork() call
11986 this.corked = 0;
8b095871 11987
9987f0c1
IC
11988 // a flag to be able to tell if the onwrite cb is called immediately,
11989 // or on a later tick. We set this to true at first, because any
11990 // actions that shouldn't happen until "later" should generally also
11991 // not happen before the first write call.
11992 this.sync = true;
8b095871 11993
9987f0c1
IC
11994 // a flag to know if we're processing previously buffered items, which
11995 // may call the _write() callback in the same tick, so that we don't
11996 // end up in an overlapped onwrite situation.
11997 this.bufferProcessing = false;
8b095871 11998
9987f0c1
IC
11999 // the callback that's passed to _write(chunk,cb)
12000 this.onwrite = function (er) {
12001 onwrite(stream, er);
12002 };
8b095871 12003
9987f0c1
IC
12004 // the callback that the user supplies to write(chunk,encoding,cb)
12005 this.writecb = null;
8b095871 12006
9987f0c1
IC
12007 // the amount that is being written when _write is called.
12008 this.writelen = 0;
8b095871 12009
9987f0c1
IC
12010 this.bufferedRequest = null;
12011 this.lastBufferedRequest = null;
8b095871 12012
9987f0c1
IC
12013 // number of pending user-supplied write callbacks
12014 // this must be 0 before 'finish' can be emitted
12015 this.pendingcb = 0;
8b095871 12016
9987f0c1
IC
12017 // emit prefinish if the only thing we're waiting for is _write cbs
12018 // This is relevant for synchronous Transform streams
12019 this.prefinished = false;
8b095871 12020
9987f0c1
IC
12021 // True if the error was already emitted and should not be thrown again
12022 this.errorEmitted = false;
8b095871 12023
9987f0c1
IC
12024 // count buffered requests
12025 this.bufferedRequestCount = 0;
8b095871 12026
9987f0c1
IC
12027 // allocate the first CorkedRequest, there is always
12028 // one allocated and free to use, and we maintain at most two
12029 this.corkedRequestsFree = new CorkedRequest(this);
12030}
8b095871 12031
9987f0c1
IC
12032WritableState.prototype.getBuffer = function getBuffer() {
12033 var current = this.bufferedRequest;
12034 var out = [];
12035 while (current) {
12036 out.push(current);
12037 current = current.next;
12038 }
12039 return out;
12040};
12041
12042(function () {
12043 try {
12044 Object.defineProperty(WritableState.prototype, 'buffer', {
12045 get: internalUtil.deprecate(function () {
12046 return this.getBuffer();
12047 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
12048 });
12049 } catch (_) {}
12050})();
12051
12052// Test _writableState for inheritance to account for Duplex streams,
12053// whose prototype chain only points to Readable.
12054var realHasInstance;
12055if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
12056 realHasInstance = Function.prototype[Symbol.hasInstance];
12057 Object.defineProperty(Writable, Symbol.hasInstance, {
12058 value: function (object) {
12059 if (realHasInstance.call(this, object)) return true;
12060
12061 return object && object._writableState instanceof WritableState;
8b095871 12062 }
9987f0c1
IC
12063 });
12064} else {
12065 realHasInstance = function (object) {
12066 return object instanceof this;
12067 };
12068}
8b095871 12069
9987f0c1
IC
12070function Writable(options) {
12071 Duplex = Duplex || require('./_stream_duplex');
12072
12073 // Writable ctor is applied to Duplexes, too.
12074 // `realHasInstance` is necessary because using plain `instanceof`
12075 // would return false, as no `_writableState` property is attached.
12076
12077 // Trying to use the custom `instanceof` for Writable here will also break the
12078 // Node.js LazyTransform implementation, which has a non-trivial getter for
12079 // `_writableState` that would lead to infinite recursion.
12080 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
12081 return new Writable(options);
8b095871
IC
12082 }
12083
9987f0c1
IC
12084 this._writableState = new WritableState(options, this);
12085
12086 // legacy.
12087 this.writable = true;
12088
12089 if (options) {
12090 if (typeof options.write === 'function') this._write = options.write;
12091
12092 if (typeof options.writev === 'function') this._writev = options.writev;
12093
12094 if (typeof options.destroy === 'function') this._destroy = options.destroy;
12095
12096 if (typeof options.final === 'function') this._final = options.final;
12097 }
12098
12099 Stream.call(this);
12100}
12101
12102// Otherwise people can pipe Writable streams, which is just wrong.
12103Writable.prototype.pipe = function () {
12104 this.emit('error', new Error('Cannot pipe, not readable'));
8b095871
IC
12105};
12106
9987f0c1
IC
12107function writeAfterEnd(stream, cb) {
12108 var er = new Error('write after end');
12109 // TODO: defer error events consistently everywhere, not just the cb
12110 stream.emit('error', er);
12111 processNextTick(cb, er);
12112}
8b095871 12113
9987f0c1
IC
12114// Checks that a user-supplied chunk is valid, especially for the particular
12115// mode the stream is in. Currently this means that `null` is never accepted
12116// and undefined/non-string values are only allowed in object mode.
12117function validChunk(stream, state, chunk, cb) {
12118 var valid = true;
12119 var er = false;
8b095871 12120
9987f0c1
IC
12121 if (chunk === null) {
12122 er = new TypeError('May not write null values to stream');
12123 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
12124 er = new TypeError('Invalid non-string/buffer chunk');
12125 }
12126 if (er) {
12127 stream.emit('error', er);
12128 processNextTick(cb, er);
12129 valid = false;
8b095871 12130 }
9987f0c1
IC
12131 return valid;
12132}
8b095871 12133
9987f0c1
IC
12134Writable.prototype.write = function (chunk, encoding, cb) {
12135 var state = this._writableState;
12136 var ret = false;
12137 var isBuf = _isUint8Array(chunk) && !state.objectMode;
12138
12139 if (isBuf && !Buffer.isBuffer(chunk)) {
12140 chunk = _uint8ArrayToBuffer(chunk);
8b095871
IC
12141 }
12142
9987f0c1
IC
12143 if (typeof encoding === 'function') {
12144 cb = encoding;
12145 encoding = null;
12146 }
8b095871 12147
9987f0c1
IC
12148 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
12149
12150 if (typeof cb !== 'function') cb = nop;
12151
12152 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
12153 state.pendingcb++;
12154 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
8b095871 12155 }
8b095871 12156
9987f0c1 12157 return ret;
8b095871
IC
12158};
12159
9987f0c1
IC
12160Writable.prototype.cork = function () {
12161 var state = this._writableState;
12162
12163 state.corked++;
8b095871
IC
12164};
12165
9987f0c1
IC
12166Writable.prototype.uncork = function () {
12167 var state = this._writableState;
12168
12169 if (state.corked) {
12170 state.corked--;
12171
12172 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
12173 }
8b095871
IC
12174};
12175
9987f0c1
IC
12176Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
12177 // node::ParseEncoding() requires lower case.
12178 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
12179 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);
12180 this._writableState.defaultEncoding = encoding;
12181 return this;
12182};
8b095871 12183
9987f0c1
IC
12184function decodeChunk(state, chunk, encoding) {
12185 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
12186 chunk = Buffer.from(chunk, encoding);
12187 }
12188 return chunk;
8b095871
IC
12189}
12190
9987f0c1
IC
12191// if we're already writing something, then just put this
12192// in the queue, and wait our turn. Otherwise, call _write
12193// If we return false, then we need a drain event, so set that flag.
12194function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
12195 if (!isBuf) {
12196 var newChunk = decodeChunk(state, chunk, encoding);
12197 if (chunk !== newChunk) {
12198 isBuf = true;
12199 encoding = 'buffer';
12200 chunk = newChunk;
12201 }
12202 }
12203 var len = state.objectMode ? 1 : chunk.length;
8b095871 12204
9987f0c1 12205 state.length += len;
8b095871 12206
9987f0c1
IC
12207 var ret = state.length < state.highWaterMark;
12208 // we must ensure that previous needDrain will not be reset to false.
12209 if (!ret) state.needDrain = true;
12210
12211 if (state.writing || state.corked) {
12212 var last = state.lastBufferedRequest;
12213 state.lastBufferedRequest = {
12214 chunk: chunk,
12215 encoding: encoding,
12216 isBuf: isBuf,
12217 callback: cb,
12218 next: null
12219 };
12220 if (last) {
12221 last.next = state.lastBufferedRequest;
12222 } else {
12223 state.bufferedRequest = state.lastBufferedRequest;
12224 }
12225 state.bufferedRequestCount += 1;
12226 } else {
12227 doWrite(stream, state, false, len, chunk, encoding, cb);
8b095871 12228 }
9987f0c1
IC
12229
12230 return ret;
8b095871
IC
12231}
12232
9987f0c1
IC
12233function doWrite(stream, state, writev, len, chunk, encoding, cb) {
12234 state.writelen = len;
12235 state.writecb = cb;
12236 state.writing = true;
12237 state.sync = true;
12238 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
12239 state.sync = false;
12240}
8b095871 12241
9987f0c1
IC
12242function onwriteError(stream, state, sync, er, cb) {
12243 --state.pendingcb;
8b095871 12244
9987f0c1
IC
12245 if (sync) {
12246 // defer the callback if we are being called synchronously
12247 // to avoid piling up things on the stack
12248 processNextTick(cb, er);
12249 // this can emit finish, and it will always happen
12250 // after error
12251 processNextTick(finishMaybe, stream, state);
12252 stream._writableState.errorEmitted = true;
12253 stream.emit('error', er);
12254 } else {
12255 // the caller expect this to happen before if
12256 // it is async
12257 cb(er);
12258 stream._writableState.errorEmitted = true;
12259 stream.emit('error', er);
12260 // this can emit finish, but finish must
12261 // always follow error
12262 finishMaybe(stream, state);
12263 }
12264}
8b095871 12265
9987f0c1
IC
12266function onwriteStateUpdate(state) {
12267 state.writing = false;
12268 state.writecb = null;
12269 state.length -= state.writelen;
12270 state.writelen = 0;
8b095871
IC
12271}
12272
9987f0c1
IC
12273function onwrite(stream, er) {
12274 var state = stream._writableState;
12275 var sync = state.sync;
12276 var cb = state.writecb;
8b095871 12277
9987f0c1 12278 onwriteStateUpdate(state);
8b095871 12279
9987f0c1
IC
12280 if (er) onwriteError(stream, state, sync, er, cb);else {
12281 // Check if we're actually ready to finish, but don't emit yet
12282 var finished = needFinish(state);
12283
12284 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
12285 clearBuffer(stream, state);
8b095871 12286 }
9987f0c1
IC
12287
12288 if (sync) {
12289 /*<replacement>*/
12290 asyncWrite(afterWrite, stream, state, finished, cb);
12291 /*</replacement>*/
12292 } else {
12293 afterWrite(stream, state, finished, cb);
8b095871 12294 }
9987f0c1
IC
12295 }
12296}
8b095871 12297
9987f0c1
IC
12298function afterWrite(stream, state, finished, cb) {
12299 if (!finished) onwriteDrain(stream, state);
12300 state.pendingcb--;
12301 cb();
12302 finishMaybe(stream, state);
8b095871 12303}
8b095871 12304
9987f0c1
IC
12305// Must force callback to be called on nextTick, so that we don't
12306// emit 'drain' before the write() consumer gets the 'false' return
12307// value, and has a chance to attach a 'drain' listener.
12308function onwriteDrain(stream, state) {
12309 if (state.length === 0 && state.needDrain) {
12310 state.needDrain = false;
12311 stream.emit('drain');
12312 }
12313}
8b095871 12314
9987f0c1
IC
12315// if there's something in the buffer waiting, then process it
12316function clearBuffer(stream, state) {
12317 state.bufferProcessing = true;
12318 var entry = state.bufferedRequest;
8b095871 12319
9987f0c1
IC
12320 if (stream._writev && entry && entry.next) {
12321 // Fast case, write everything using _writev()
12322 var l = state.bufferedRequestCount;
12323 var buffer = new Array(l);
12324 var holder = state.corkedRequestsFree;
12325 holder.entry = entry;
8b095871 12326
9987f0c1
IC
12327 var count = 0;
12328 var allBuffers = true;
12329 while (entry) {
12330 buffer[count] = entry;
12331 if (!entry.isBuf) allBuffers = false;
12332 entry = entry.next;
12333 count += 1;
12334 }
12335 buffer.allBuffers = allBuffers;
8b095871 12336
9987f0c1 12337 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
8b095871 12338
9987f0c1
IC
12339 // doWrite is almost always async, defer these to save a bit of time
12340 // as the hot path ends with doWrite
12341 state.pendingcb++;
12342 state.lastBufferedRequest = null;
12343 if (holder.next) {
12344 state.corkedRequestsFree = holder.next;
12345 holder.next = null;
12346 } else {
12347 state.corkedRequestsFree = new CorkedRequest(state);
12348 }
12349 } else {
12350 // Slow case, write chunks one-by-one
12351 while (entry) {
12352 var chunk = entry.chunk;
12353 var encoding = entry.encoding;
12354 var cb = entry.callback;
12355 var len = state.objectMode ? 1 : chunk.length;
8b095871 12356
9987f0c1
IC
12357 doWrite(stream, state, false, len, chunk, encoding, cb);
12358 entry = entry.next;
12359 // if we didn't call the onwrite immediately, then
12360 // it means that we need to wait until it does.
12361 // also, that means that the chunk and cb are currently
12362 // being processed, so move the buffer counter past them.
12363 if (state.writing) {
12364 break;
12365 }
12366 }
8b095871 12367
9987f0c1
IC
12368 if (entry === null) state.lastBufferedRequest = null;
12369 }
8b095871 12370
9987f0c1
IC
12371 state.bufferedRequestCount = 0;
12372 state.bufferedRequest = entry;
12373 state.bufferProcessing = false;
8b095871 12374}
8b095871 12375
9987f0c1
IC
12376Writable.prototype._write = function (chunk, encoding, cb) {
12377 cb(new Error('_write() is not implemented'));
12378};
8b095871 12379
9987f0c1 12380Writable.prototype._writev = null;
8b095871 12381
9987f0c1
IC
12382Writable.prototype.end = function (chunk, encoding, cb) {
12383 var state = this._writableState;
8b095871 12384
9987f0c1
IC
12385 if (typeof chunk === 'function') {
12386 cb = chunk;
12387 chunk = null;
12388 encoding = null;
12389 } else if (typeof encoding === 'function') {
12390 cb = encoding;
12391 encoding = null;
12392 }
8b095871 12393
9987f0c1 12394 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
8b095871 12395
9987f0c1
IC
12396 // .end() fully uncorks
12397 if (state.corked) {
12398 state.corked = 1;
12399 this.uncork();
12400 }
8b095871 12401
9987f0c1
IC
12402 // ignore unnecessary end() calls.
12403 if (!state.ending && !state.finished) endWritable(this, state, cb);
12404};
8b095871 12405
9987f0c1
IC
12406function needFinish(state) {
12407 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
12408}
12409function callFinal(stream, state) {
12410 stream._final(function (err) {
12411 state.pendingcb--;
12412 if (err) {
12413 stream.emit('error', err);
12414 }
12415 state.prefinished = true;
12416 stream.emit('prefinish');
12417 finishMaybe(stream, state);
12418 });
12419}
12420function prefinish(stream, state) {
12421 if (!state.prefinished && !state.finalCalled) {
12422 if (typeof stream._final === 'function') {
12423 state.pendingcb++;
12424 state.finalCalled = true;
12425 processNextTick(callFinal, stream, state);
12426 } else {
12427 state.prefinished = true;
12428 stream.emit('prefinish');
12429 }
12430 }
8b095871
IC
12431}
12432
9987f0c1
IC
12433function finishMaybe(stream, state) {
12434 var need = needFinish(state);
12435 if (need) {
12436 prefinish(stream, state);
12437 if (state.pendingcb === 0) {
12438 state.finished = true;
12439 stream.emit('finish');
12440 }
12441 }
12442 return need;
8b095871
IC
12443}
12444
9987f0c1
IC
12445function endWritable(stream, state, cb) {
12446 state.ending = true;
12447 finishMaybe(stream, state);
12448 if (cb) {
12449 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
8b095871 12450 }
9987f0c1
IC
12451 state.ended = true;
12452 stream.writable = false;
8b095871
IC
12453}
12454
9987f0c1
IC
12455function onCorkedFinish(corkReq, state, err) {
12456 var entry = corkReq.entry;
12457 corkReq.entry = null;
12458 while (entry) {
12459 var cb = entry.callback;
12460 state.pendingcb--;
12461 cb(err);
12462 entry = entry.next;
12463 }
12464 if (state.corkedRequestsFree) {
12465 state.corkedRequestsFree.next = corkReq;
12466 } else {
12467 state.corkedRequestsFree = corkReq;
12468 }
12469}
8b095871 12470
9987f0c1
IC
12471Object.defineProperty(Writable.prototype, 'destroyed', {
12472 get: function () {
12473 if (this._writableState === undefined) {
12474 return false;
12475 }
12476 return this._writableState.destroyed;
12477 },
12478 set: function (value) {
12479 // we ignore the value if the stream
12480 // has not been initialized yet
12481 if (!this._writableState) {
12482 return;
12483 }
8b095871 12484
9987f0c1
IC
12485 // backward compatibility, the user is explicitly
12486 // managing destroyed
12487 this._writableState.destroyed = value;
12488 }
12489});
8b095871 12490
9987f0c1
IC
12491Writable.prototype.destroy = destroyImpl.destroy;
12492Writable.prototype._undestroy = destroyImpl.undestroy;
12493Writable.prototype._destroy = function (err, cb) {
12494 this.end();
12495 cb(err);
12496};
12497}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12498},{"./_stream_duplex":14,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"inherits":8,"process-nextick-args":11,"safe-buffer":26,"util-deprecate":29}],19:[function(require,module,exports){
12499'use strict';
8b095871
IC
12500
12501/*<replacement>*/
8b095871 12502
9987f0c1 12503function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8b095871 12504
9987f0c1
IC
12505var Buffer = require('safe-buffer').Buffer;
12506/*</replacement>*/
8b095871 12507
9987f0c1
IC
12508function copyBuffer(src, target, offset) {
12509 src.copy(target, offset);
8b095871
IC
12510}
12511
9987f0c1
IC
12512module.exports = function () {
12513 function BufferList() {
12514 _classCallCheck(this, BufferList);
8b095871 12515
9987f0c1
IC
12516 this.head = null;
12517 this.tail = null;
12518 this.length = 0;
12519 }
8b095871 12520
9987f0c1
IC
12521 BufferList.prototype.push = function push(v) {
12522 var entry = { data: v, next: null };
12523 if (this.length > 0) this.tail.next = entry;else this.head = entry;
12524 this.tail = entry;
12525 ++this.length;
12526 };
8b095871 12527
9987f0c1
IC
12528 BufferList.prototype.unshift = function unshift(v) {
12529 var entry = { data: v, next: this.head };
12530 if (this.length === 0) this.tail = entry;
12531 this.head = entry;
12532 ++this.length;
12533 };
8b095871 12534
9987f0c1
IC
12535 BufferList.prototype.shift = function shift() {
12536 if (this.length === 0) return;
12537 var ret = this.head.data;
12538 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
12539 --this.length;
12540 return ret;
12541 };
8b095871 12542
9987f0c1
IC
12543 BufferList.prototype.clear = function clear() {
12544 this.head = this.tail = null;
12545 this.length = 0;
12546 };
8b095871 12547
9987f0c1
IC
12548 BufferList.prototype.join = function join(s) {
12549 if (this.length === 0) return '';
12550 var p = this.head;
12551 var ret = '' + p.data;
12552 while (p = p.next) {
12553 ret += s + p.data;
12554 }return ret;
12555 };
8b095871 12556
9987f0c1
IC
12557 BufferList.prototype.concat = function concat(n) {
12558 if (this.length === 0) return Buffer.alloc(0);
12559 if (this.length === 1) return this.head.data;
12560 var ret = Buffer.allocUnsafe(n >>> 0);
12561 var p = this.head;
12562 var i = 0;
12563 while (p) {
12564 copyBuffer(p.data, ret, i);
12565 i += p.data.length;
12566 p = p.next;
12567 }
12568 return ret;
12569 };
8b095871 12570
9987f0c1
IC
12571 return BufferList;
12572}();
12573},{"safe-buffer":26}],20:[function(require,module,exports){
12574'use strict';
8b095871
IC
12575
12576/*<replacement>*/
9987f0c1
IC
12577
12578var processNextTick = require('process-nextick-args');
8b095871
IC
12579/*</replacement>*/
12580
9987f0c1
IC
12581// undocumented cb() API, needed for core, not for public API
12582function destroy(err, cb) {
12583 var _this = this;
8b095871 12584
9987f0c1
IC
12585 var readableDestroyed = this._readableState && this._readableState.destroyed;
12586 var writableDestroyed = this._writableState && this._writableState.destroyed;
8b095871 12587
9987f0c1
IC
12588 if (readableDestroyed || writableDestroyed) {
12589 if (cb) {
12590 cb(err);
12591 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
12592 processNextTick(emitErrorNT, this, err);
12593 }
12594 return;
12595 }
8b095871 12596
9987f0c1
IC
12597 // we set destroyed to true before firing error callbacks in order
12598 // to make it re-entrance safe in case destroy() is called within callbacks
8b095871 12599
9987f0c1
IC
12600 if (this._readableState) {
12601 this._readableState.destroyed = true;
12602 }
8b095871 12603
9987f0c1
IC
12604 // if this is a duplex stream mark the writable part as destroyed as well
12605 if (this._writableState) {
12606 this._writableState.destroyed = true;
12607 }
8b095871 12608
9987f0c1
IC
12609 this._destroy(err || null, function (err) {
12610 if (!cb && err) {
12611 processNextTick(emitErrorNT, _this, err);
12612 if (_this._writableState) {
12613 _this._writableState.errorEmitted = true;
12614 }
12615 } else if (cb) {
12616 cb(err);
12617 }
12618 });
12619}
8b095871 12620
9987f0c1
IC
12621function undestroy() {
12622 if (this._readableState) {
12623 this._readableState.destroyed = false;
12624 this._readableState.reading = false;
12625 this._readableState.ended = false;
12626 this._readableState.endEmitted = false;
12627 }
8b095871 12628
9987f0c1
IC
12629 if (this._writableState) {
12630 this._writableState.destroyed = false;
12631 this._writableState.ended = false;
12632 this._writableState.ending = false;
12633 this._writableState.finished = false;
12634 this._writableState.errorEmitted = false;
12635 }
12636}
8b095871 12637
9987f0c1
IC
12638function emitErrorNT(self, err) {
12639 self.emit('error', err);
12640}
8b095871 12641
9987f0c1
IC
12642module.exports = {
12643 destroy: destroy,
12644 undestroy: undestroy
12645};
12646},{"process-nextick-args":11}],21:[function(require,module,exports){
12647module.exports = require('events').EventEmitter;
8b095871 12648
9987f0c1
IC
12649},{"events":6}],22:[function(require,module,exports){
12650module.exports = require('./readable').PassThrough
8b095871 12651
9987f0c1
IC
12652},{"./readable":23}],23:[function(require,module,exports){
12653exports = module.exports = require('./lib/_stream_readable.js');
12654exports.Stream = exports;
12655exports.Readable = exports;
12656exports.Writable = require('./lib/_stream_writable.js');
12657exports.Duplex = require('./lib/_stream_duplex.js');
12658exports.Transform = require('./lib/_stream_transform.js');
12659exports.PassThrough = require('./lib/_stream_passthrough.js');
8b095871 12660
9987f0c1
IC
12661},{"./lib/_stream_duplex.js":14,"./lib/_stream_passthrough.js":15,"./lib/_stream_readable.js":16,"./lib/_stream_transform.js":17,"./lib/_stream_writable.js":18}],24:[function(require,module,exports){
12662module.exports = require('./readable').Transform
8b095871 12663
9987f0c1
IC
12664},{"./readable":23}],25:[function(require,module,exports){
12665module.exports = require('./lib/_stream_writable.js');
8b095871 12666
9987f0c1
IC
12667},{"./lib/_stream_writable.js":18}],26:[function(require,module,exports){
12668/* eslint-disable node/no-deprecated-api */
12669var buffer = require('buffer')
12670var Buffer = buffer.Buffer
8b095871 12671
9987f0c1
IC
12672// alternative to using Object.keys for old browsers
12673function copyProps (src, dst) {
12674 for (var key in src) {
12675 dst[key] = src[key]
12676 }
12677}
12678if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
12679 module.exports = buffer
12680} else {
12681 // Copy properties from require('buffer')
12682 copyProps(buffer, exports)
12683 exports.Buffer = SafeBuffer
12684}
8b095871 12685
9987f0c1
IC
12686function SafeBuffer (arg, encodingOrOffset, length) {
12687 return Buffer(arg, encodingOrOffset, length)
12688}
8b095871 12689
9987f0c1
IC
12690// Copy static methods from Buffer
12691copyProps(Buffer, SafeBuffer)
8b095871 12692
9987f0c1
IC
12693SafeBuffer.from = function (arg, encodingOrOffset, length) {
12694 if (typeof arg === 'number') {
12695 throw new TypeError('Argument must not be a number')
8b095871 12696 }
9987f0c1 12697 return Buffer(arg, encodingOrOffset, length)
8b095871
IC
12698}
12699
9987f0c1
IC
12700SafeBuffer.alloc = function (size, fill, encoding) {
12701 if (typeof size !== 'number') {
12702 throw new TypeError('Argument must be a number')
12703 }
12704 var buf = Buffer(size)
12705 if (fill !== undefined) {
12706 if (typeof encoding === 'string') {
12707 buf.fill(fill, encoding)
12708 } else {
12709 buf.fill(fill)
12710 }
12711 } else {
12712 buf.fill(0)
12713 }
12714 return buf
12715}
8b095871 12716
9987f0c1
IC
12717SafeBuffer.allocUnsafe = function (size) {
12718 if (typeof size !== 'number') {
12719 throw new TypeError('Argument must be a number')
12720 }
12721 return Buffer(size)
12722}
8b095871 12723
9987f0c1
IC
12724SafeBuffer.allocUnsafeSlow = function (size) {
12725 if (typeof size !== 'number') {
12726 throw new TypeError('Argument must be a number')
12727 }
12728 return buffer.SlowBuffer(size)
12729}
12730
12731},{"buffer":4}],27:[function(require,module,exports){
12732// Copyright Joyent, Inc. and other Node contributors.
12733//
12734// Permission is hereby granted, free of charge, to any person obtaining a
12735// copy of this software and associated documentation files (the
12736// "Software"), to deal in the Software without restriction, including
12737// without limitation the rights to use, copy, modify, merge, publish,
12738// distribute, sublicense, and/or sell copies of the Software, and to permit
12739// persons to whom the Software is furnished to do so, subject to the
12740// following conditions:
12741//
12742// The above copyright notice and this permission notice shall be included
12743// in all copies or substantial portions of the Software.
12744//
12745// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12746// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12747// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12748// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12749// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12750// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12751// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 12752
9987f0c1 12753module.exports = Stream;
8b095871 12754
9987f0c1
IC
12755var EE = require('events').EventEmitter;
12756var inherits = require('inherits');
8b095871 12757
9987f0c1
IC
12758inherits(Stream, EE);
12759Stream.Readable = require('readable-stream/readable.js');
12760Stream.Writable = require('readable-stream/writable.js');
12761Stream.Duplex = require('readable-stream/duplex.js');
12762Stream.Transform = require('readable-stream/transform.js');
12763Stream.PassThrough = require('readable-stream/passthrough.js');
8b095871 12764
9987f0c1
IC
12765// Backwards-compat with node 0.4.x
12766Stream.Stream = Stream;
8b095871 12767
8b095871 12768
8b095871 12769
9987f0c1
IC
12770// old-style streams. Note that the pipe method (the only relevant
12771// part of this class) is overridden in the Readable class.
8b095871 12772
9987f0c1
IC
12773function Stream() {
12774 EE.call(this);
12775}
8b095871 12776
9987f0c1
IC
12777Stream.prototype.pipe = function(dest, options) {
12778 var source = this;
8b095871 12779
9987f0c1
IC
12780 function ondata(chunk) {
12781 if (dest.writable) {
12782 if (false === dest.write(chunk) && source.pause) {
12783 source.pause();
8b095871 12784 }
8b095871 12785 }
8b095871
IC
12786 }
12787
9987f0c1 12788 source.on('data', ondata);
8b095871 12789
9987f0c1
IC
12790 function ondrain() {
12791 if (source.readable && source.resume) {
12792 source.resume();
12793 }
12794 }
8b095871 12795
9987f0c1 12796 dest.on('drain', ondrain);
8b095871 12797
9987f0c1
IC
12798 // If the 'end' option is not supplied, dest.end() will be called when
12799 // source gets the 'end' or 'close' events. Only dest.end() once.
12800 if (!dest._isStdio && (!options || options.end !== false)) {
12801 source.on('end', onend);
12802 source.on('close', onclose);
12803 }
8b095871 12804
9987f0c1
IC
12805 var didOnEnd = false;
12806 function onend() {
12807 if (didOnEnd) return;
12808 didOnEnd = true;
8b095871 12809
9987f0c1 12810 dest.end();
8b095871 12811 }
8b095871 12812
8b095871 12813
9987f0c1
IC
12814 function onclose() {
12815 if (didOnEnd) return;
12816 didOnEnd = true;
8b095871 12817
9987f0c1 12818 if (typeof dest.destroy === 'function') dest.destroy();
8b095871
IC
12819 }
12820
9987f0c1
IC
12821 // don't leave dangling pipes when there are errors.
12822 function onerror(er) {
12823 cleanup();
12824 if (EE.listenerCount(this, 'error') === 0) {
12825 throw er; // Unhandled stream error in pipe.
12826 }
8b095871
IC
12827 }
12828
9987f0c1
IC
12829 source.on('error', onerror);
12830 dest.on('error', onerror);
8b095871 12831
9987f0c1
IC
12832 // remove all the event listeners that were added.
12833 function cleanup() {
12834 source.removeListener('data', ondata);
12835 dest.removeListener('drain', ondrain);
8b095871 12836
9987f0c1
IC
12837 source.removeListener('end', onend);
12838 source.removeListener('close', onclose);
8b095871 12839
9987f0c1
IC
12840 source.removeListener('error', onerror);
12841 dest.removeListener('error', onerror);
8b095871 12842
9987f0c1
IC
12843 source.removeListener('end', cleanup);
12844 source.removeListener('close', cleanup);
8b095871 12845
9987f0c1 12846 dest.removeListener('close', cleanup);
8b095871
IC
12847 }
12848
9987f0c1
IC
12849 source.on('end', cleanup);
12850 source.on('close', cleanup);
8b095871 12851
9987f0c1 12852 dest.on('close', cleanup);
8b095871 12853
9987f0c1 12854 dest.emit('pipe', source);
8b095871 12855
9987f0c1
IC
12856 // Allow for unix-like usage: A.pipe(B).pipe(C)
12857 return dest;
12858};
8b095871 12859
9987f0c1
IC
12860},{"events":6,"inherits":8,"readable-stream/duplex.js":13,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],28:[function(require,module,exports){
12861'use strict';
8b095871 12862
9987f0c1 12863var Buffer = require('safe-buffer').Buffer;
8b095871 12864
9987f0c1
IC
12865var isEncoding = Buffer.isEncoding || function (encoding) {
12866 encoding = '' + encoding;
12867 switch (encoding && encoding.toLowerCase()) {
12868 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':
12869 return true;
12870 default:
12871 return false;
12872 }
12873};
8b095871 12874
9987f0c1
IC
12875function _normalizeEncoding(enc) {
12876 if (!enc) return 'utf8';
12877 var retried;
12878 while (true) {
12879 switch (enc) {
12880 case 'utf8':
12881 case 'utf-8':
12882 return 'utf8';
12883 case 'ucs2':
12884 case 'ucs-2':
12885 case 'utf16le':
12886 case 'utf-16le':
12887 return 'utf16le';
12888 case 'latin1':
12889 case 'binary':
12890 return 'latin1';
12891 case 'base64':
12892 case 'ascii':
12893 case 'hex':
12894 return enc;
12895 default:
12896 if (retried) return; // undefined
12897 enc = ('' + enc).toLowerCase();
12898 retried = true;
12899 }
8b095871 12900 }
9987f0c1 12901};
8b095871 12902
9987f0c1
IC
12903// Do not cache `Buffer.isEncoding` when checking encoding names as some
12904// modules monkey-patch it to support additional encodings
12905function normalizeEncoding(enc) {
12906 var nenc = _normalizeEncoding(enc);
12907 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
12908 return nenc || enc;
12909}
8b095871 12910
9987f0c1
IC
12911// StringDecoder provides an interface for efficiently splitting a series of
12912// buffers into a series of JS strings without breaking apart multi-byte
12913// characters.
12914exports.StringDecoder = StringDecoder;
12915function StringDecoder(encoding) {
12916 this.encoding = normalizeEncoding(encoding);
12917 var nb;
12918 switch (this.encoding) {
12919 case 'utf16le':
12920 this.text = utf16Text;
12921 this.end = utf16End;
12922 nb = 4;
12923 break;
12924 case 'utf8':
12925 this.fillLast = utf8FillLast;
12926 nb = 4;
12927 break;
12928 case 'base64':
12929 this.text = base64Text;
12930 this.end = base64End;
12931 nb = 3;
12932 break;
12933 default:
12934 this.write = simpleWrite;
12935 this.end = simpleEnd;
12936 return;
12937 }
12938 this.lastNeed = 0;
12939 this.lastTotal = 0;
12940 this.lastChar = Buffer.allocUnsafe(nb);
12941}
8b095871 12942
9987f0c1
IC
12943StringDecoder.prototype.write = function (buf) {
12944 if (buf.length === 0) return '';
12945 var r;
12946 var i;
12947 if (this.lastNeed) {
12948 r = this.fillLast(buf);
12949 if (r === undefined) return '';
12950 i = this.lastNeed;
12951 this.lastNeed = 0;
12952 } else {
12953 i = 0;
12954 }
12955 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
12956 return r || '';
12957};
8b095871 12958
9987f0c1 12959StringDecoder.prototype.end = utf8End;
8b095871 12960
9987f0c1
IC
12961// Returns only complete characters in a Buffer
12962StringDecoder.prototype.text = utf8Text;
8b095871 12963
9987f0c1
IC
12964// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
12965StringDecoder.prototype.fillLast = function (buf) {
12966 if (this.lastNeed <= buf.length) {
12967 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
12968 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 12969 }
9987f0c1
IC
12970 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
12971 this.lastNeed -= buf.length;
12972};
8b095871 12973
9987f0c1
IC
12974// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
12975// continuation byte.
12976function utf8CheckByte(byte) {
12977 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
12978 return -1;
12979}
8b095871 12980
9987f0c1
IC
12981// Checks at most 3 bytes at the end of a Buffer in order to detect an
12982// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
12983// needed to complete the UTF-8 character (if applicable) are returned.
12984function utf8CheckIncomplete(self, buf, i) {
12985 var j = buf.length - 1;
12986 if (j < i) return 0;
12987 var nb = utf8CheckByte(buf[j]);
12988 if (nb >= 0) {
12989 if (nb > 0) self.lastNeed = nb - 1;
12990 return nb;
12991 }
12992 if (--j < i) return 0;
12993 nb = utf8CheckByte(buf[j]);
12994 if (nb >= 0) {
12995 if (nb > 0) self.lastNeed = nb - 2;
12996 return nb;
12997 }
12998 if (--j < i) return 0;
12999 nb = utf8CheckByte(buf[j]);
13000 if (nb >= 0) {
13001 if (nb > 0) {
13002 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
8b095871 13003 }
9987f0c1 13004 return nb;
8b095871 13005 }
9987f0c1
IC
13006 return 0;
13007}
8b095871 13008
9987f0c1
IC
13009// Validates as many continuation bytes for a multi-byte UTF-8 character as
13010// needed or are available. If we see a non-continuation byte where we expect
13011// one, we "replace" the validated continuation bytes we've seen so far with
13012// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
13013// behavior. The continuation byte check is included three times in the case
13014// where all of the continuation bytes for a character exist in the same buffer.
13015// It is also done this way as a slight performance increase instead of using a
13016// loop.
13017function utf8CheckExtraBytes(self, buf, p) {
13018 if ((buf[0] & 0xC0) !== 0x80) {
13019 self.lastNeed = 0;
13020 return '\ufffd'.repeat(p);
13021 }
13022 if (self.lastNeed > 1 && buf.length > 1) {
13023 if ((buf[1] & 0xC0) !== 0x80) {
13024 self.lastNeed = 1;
13025 return '\ufffd'.repeat(p + 1);
13026 }
13027 if (self.lastNeed > 2 && buf.length > 2) {
13028 if ((buf[2] & 0xC0) !== 0x80) {
13029 self.lastNeed = 2;
13030 return '\ufffd'.repeat(p + 2);
13031 }
13032 }
13033 }
8b095871
IC
13034}
13035
9987f0c1
IC
13036// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
13037function utf8FillLast(buf) {
13038 var p = this.lastTotal - this.lastNeed;
13039 var r = utf8CheckExtraBytes(this, buf, p);
13040 if (r !== undefined) return r;
13041 if (this.lastNeed <= buf.length) {
13042 buf.copy(this.lastChar, p, 0, this.lastNeed);
13043 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 13044 }
9987f0c1
IC
13045 buf.copy(this.lastChar, p, 0, buf.length);
13046 this.lastNeed -= buf.length;
8b095871
IC
13047}
13048
9987f0c1
IC
13049// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
13050// partial character, the character's bytes are buffered until the required
13051// number of bytes are available.
13052function utf8Text(buf, i) {
13053 var total = utf8CheckIncomplete(this, buf, i);
13054 if (!this.lastNeed) return buf.toString('utf8', i);
13055 this.lastTotal = total;
13056 var end = buf.length - (total - this.lastNeed);
13057 buf.copy(this.lastChar, 0, end);
13058 return buf.toString('utf8', i, end);
8b095871
IC
13059}
13060
9987f0c1
IC
13061// For UTF-8, a replacement character for each buffered byte of a (partial)
13062// character needs to be added to the output.
13063function utf8End(buf) {
13064 var r = buf && buf.length ? this.write(buf) : '';
13065 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
13066 return r;
13067}
8b095871 13068
9987f0c1
IC
13069// UTF-16LE typically needs two bytes per character, but even if we have an even
13070// number of bytes available, we need to check if we end on a leading/high
13071// surrogate. In that case, we need to wait for the next two bytes in order to
13072// decode the last character properly.
13073function utf16Text(buf, i) {
13074 if ((buf.length - i) % 2 === 0) {
13075 var r = buf.toString('utf16le', i);
13076 if (r) {
13077 var c = r.charCodeAt(r.length - 1);
13078 if (c >= 0xD800 && c <= 0xDBFF) {
13079 this.lastNeed = 2;
13080 this.lastTotal = 4;
13081 this.lastChar[0] = buf[buf.length - 2];
13082 this.lastChar[1] = buf[buf.length - 1];
13083 return r.slice(0, -1);
13084 }
13085 }
13086 return r;
8b095871 13087 }
9987f0c1
IC
13088 this.lastNeed = 1;
13089 this.lastTotal = 2;
13090 this.lastChar[0] = buf[buf.length - 1];
13091 return buf.toString('utf16le', i, buf.length - 1);
8b095871
IC
13092}
13093
9987f0c1
IC
13094// For UTF-16LE we do not explicitly append special replacement characters if we
13095// end on a partial character, we simply let v8 handle that.
13096function utf16End(buf) {
13097 var r = buf && buf.length ? this.write(buf) : '';
13098 if (this.lastNeed) {
13099 var end = this.lastTotal - this.lastNeed;
13100 return r + this.lastChar.toString('utf16le', 0, end);
8b095871 13101 }
9987f0c1 13102 return r;
8b095871
IC
13103}
13104
9987f0c1
IC
13105function base64Text(buf, i) {
13106 var n = (buf.length - i) % 3;
13107 if (n === 0) return buf.toString('base64', i);
13108 this.lastNeed = 3 - n;
13109 this.lastTotal = 3;
13110 if (n === 1) {
13111 this.lastChar[0] = buf[buf.length - 1];
13112 } else {
13113 this.lastChar[0] = buf[buf.length - 2];
13114 this.lastChar[1] = buf[buf.length - 1];
13115 }
13116 return buf.toString('base64', i, buf.length - n);
13117}
8b095871 13118
9987f0c1
IC
13119function base64End(buf) {
13120 var r = buf && buf.length ? this.write(buf) : '';
13121 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
13122 return r;
13123}
8b095871 13124
9987f0c1
IC
13125// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
13126function simpleWrite(buf) {
13127 return buf.toString(this.encoding);
13128}
8b095871 13129
9987f0c1
IC
13130function simpleEnd(buf) {
13131 return buf && buf.length ? this.write(buf) : '';
13132}
13133},{"safe-buffer":26}],29:[function(require,module,exports){
13134(function (global){
8b095871 13135
9987f0c1
IC
13136/**
13137 * Module exports.
13138 */
8b095871 13139
9987f0c1
IC
13140module.exports = deprecate;
13141
13142/**
13143 * Mark that a method should not be used.
13144 * Returns a modified function which warns once by default.
13145 *
13146 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
13147 *
13148 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
13149 * will throw an Error when invoked.
13150 *
13151 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
13152 * will invoke `console.trace()` instead of `console.error()`.
13153 *
13154 * @param {Function} fn - the function to deprecate
13155 * @param {String} msg - the string to print to the console when `fn` is invoked
13156 * @returns {Function} a new "deprecated" version of `fn`
13157 * @api public
13158 */
13159
13160function deprecate (fn, msg) {
13161 if (config('noDeprecation')) {
13162 return fn;
8b095871
IC
13163 }
13164
9987f0c1
IC
13165 var warned = false;
13166 function deprecated() {
13167 if (!warned) {
13168 if (config('throwDeprecation')) {
13169 throw new Error(msg);
13170 } else if (config('traceDeprecation')) {
13171 console.trace(msg);
13172 } else {
13173 console.warn(msg);
13174 }
13175 warned = true;
13176 }
13177 return fn.apply(this, arguments);
8b095871
IC
13178 }
13179
9987f0c1
IC
13180 return deprecated;
13181}
8b095871 13182
9987f0c1
IC
13183/**
13184 * Checks `localStorage` for boolean values for the given `name`.
13185 *
13186 * @param {String} name
13187 * @returns {Boolean}
13188 * @api private
13189 */
8b095871 13190
9987f0c1
IC
13191function config (name) {
13192 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
13193 try {
13194 if (!global.localStorage) return false;
13195 } catch (_) {
13196 return false;
8b095871 13197 }
9987f0c1
IC
13198 var val = global.localStorage[name];
13199 if (null == val) return false;
13200 return String(val).toLowerCase() === 'true';
13201}
8b095871 13202
9987f0c1
IC
13203}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13204},{}],30:[function(require,module,exports){
13205arguments[4][8][0].apply(exports,arguments)
13206},{"dup":8}],31:[function(require,module,exports){
13207module.exports = function isBuffer(arg) {
13208 return arg && typeof arg === 'object'
13209 && typeof arg.copy === 'function'
13210 && typeof arg.fill === 'function'
13211 && typeof arg.readUInt8 === 'function';
13212}
13213},{}],32:[function(require,module,exports){
13214(function (process,global){
13215// Copyright Joyent, Inc. and other Node contributors.
13216//
13217// Permission is hereby granted, free of charge, to any person obtaining a
13218// copy of this software and associated documentation files (the
13219// "Software"), to deal in the Software without restriction, including
13220// without limitation the rights to use, copy, modify, merge, publish,
13221// distribute, sublicense, and/or sell copies of the Software, and to permit
13222// persons to whom the Software is furnished to do so, subject to the
13223// following conditions:
13224//
13225// The above copyright notice and this permission notice shall be included
13226// in all copies or substantial portions of the Software.
13227//
13228// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13229// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13230// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13231// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13232// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13233// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13234// USE OR OTHER DEALINGS IN THE SOFTWARE.
13235
13236var formatRegExp = /%[sdj%]/g;
13237exports.format = function(f) {
13238 if (!isString(f)) {
13239 var objects = [];
13240 for (var i = 0; i < arguments.length; i++) {
13241 objects.push(inspect(arguments[i]));
8b095871 13242 }
9987f0c1 13243 return objects.join(' ');
8b095871
IC
13244 }
13245
9987f0c1
IC
13246 var i = 1;
13247 var args = arguments;
13248 var len = args.length;
13249 var str = String(f).replace(formatRegExp, function(x) {
13250 if (x === '%%') return '%';
13251 if (i >= len) return x;
13252 switch (x) {
13253 case '%s': return String(args[i++]);
13254 case '%d': return Number(args[i++]);
13255 case '%j':
13256 try {
13257 return JSON.stringify(args[i++]);
13258 } catch (_) {
13259 return '[Circular]';
13260 }
13261 default:
13262 return x;
13263 }
13264 });
13265 for (var x = args[i]; i < len; x = args[++i]) {
13266 if (isNull(x) || !isObject(x)) {
13267 str += ' ' + x;
13268 } else {
13269 str += ' ' + inspect(x);
13270 }
13271 }
13272 return str;
13273};
8b095871
IC
13274
13275
9987f0c1
IC
13276// Mark that a method should not be used.
13277// Returns a modified function which warns once by default.
13278// If --no-deprecation is set, then it is a no-op.
13279exports.deprecate = function(fn, msg) {
13280 // Allow for deprecating things in the process of starting up.
13281 if (isUndefined(global.process)) {
13282 return function() {
13283 return exports.deprecate(fn, msg).apply(this, arguments);
13284 };
8b095871 13285 }
8b095871 13286
9987f0c1
IC
13287 if (process.noDeprecation === true) {
13288 return fn;
8b095871
IC
13289 }
13290
9987f0c1
IC
13291 var warned = false;
13292 function deprecated() {
13293 if (!warned) {
13294 if (process.throwDeprecation) {
13295 throw new Error(msg);
13296 } else if (process.traceDeprecation) {
13297 console.trace(msg);
13298 } else {
13299 console.error(msg);
13300 }
13301 warned = true;
13302 }
13303 return fn.apply(this, arguments);
8b095871
IC
13304 }
13305
9987f0c1 13306 return deprecated;
8b095871
IC
13307};
13308
8b095871 13309
9987f0c1
IC
13310var debugs = {};
13311var debugEnviron;
13312exports.debuglog = function(set) {
13313 if (isUndefined(debugEnviron))
13314 debugEnviron = process.env.NODE_DEBUG || '';
13315 set = set.toUpperCase();
13316 if (!debugs[set]) {
13317 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13318 var pid = process.pid;
13319 debugs[set] = function() {
13320 var msg = exports.format.apply(exports, arguments);
13321 console.error('%s %d: %s', set, pid, msg);
13322 };
13323 } else {
13324 debugs[set] = function() {};
13325 }
13326 }
13327 return debugs[set];
13328};
8b095871 13329
8b095871 13330
9987f0c1
IC
13331/**
13332 * Echos the value of a value. Trys to print the value out
13333 * in the best way possible given the different types.
13334 *
13335 * @param {Object} obj The object to print out.
13336 * @param {Object} opts Optional options object that alters the output.
13337 */
13338/* legacy: obj, showHidden, depth, colors*/
13339function inspect(obj, opts) {
13340 // default options
13341 var ctx = {
13342 seen: [],
13343 stylize: stylizeNoColor
13344 };
13345 // legacy...
13346 if (arguments.length >= 3) ctx.depth = arguments[2];
13347 if (arguments.length >= 4) ctx.colors = arguments[3];
13348 if (isBoolean(opts)) {
13349 // legacy...
13350 ctx.showHidden = opts;
13351 } else if (opts) {
13352 // got an "options" object
13353 exports._extend(ctx, opts);
13354 }
13355 // set default options
13356 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13357 if (isUndefined(ctx.depth)) ctx.depth = 2;
13358 if (isUndefined(ctx.colors)) ctx.colors = false;
13359 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13360 if (ctx.colors) ctx.stylize = stylizeWithColor;
13361 return formatValue(ctx, obj, ctx.depth);
13362}
13363exports.inspect = inspect;
8b095871 13364
8b095871 13365
9987f0c1
IC
13366// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13367inspect.colors = {
13368 'bold' : [1, 22],
13369 'italic' : [3, 23],
13370 'underline' : [4, 24],
13371 'inverse' : [7, 27],
13372 'white' : [37, 39],
13373 'grey' : [90, 39],
13374 'black' : [30, 39],
13375 'blue' : [34, 39],
13376 'cyan' : [36, 39],
13377 'green' : [32, 39],
13378 'magenta' : [35, 39],
13379 'red' : [31, 39],
13380 'yellow' : [33, 39]
13381};
8b095871 13382
9987f0c1
IC
13383// Don't use 'blue' not visible on cmd.exe
13384inspect.styles = {
13385 'special': 'cyan',
13386 'number': 'yellow',
13387 'boolean': 'yellow',
13388 'undefined': 'grey',
13389 'null': 'bold',
13390 'string': 'green',
13391 'date': 'magenta',
13392 // "name": intentionally not styling
13393 'regexp': 'red'
13394};
8b095871 13395
8b095871 13396
9987f0c1
IC
13397function stylizeWithColor(str, styleType) {
13398 var style = inspect.styles[styleType];
8b095871 13399
9987f0c1
IC
13400 if (style) {
13401 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13402 '\u001b[' + inspect.colors[style][1] + 'm';
13403 } else {
13404 return str;
8b095871 13405 }
9987f0c1 13406}
8b095871 13407
8b095871 13408
9987f0c1
IC
13409function stylizeNoColor(str, styleType) {
13410 return str;
13411}
8b095871 13412
8b095871 13413
9987f0c1
IC
13414function arrayToHash(array) {
13415 var hash = {};
8b095871 13416
9987f0c1
IC
13417 array.forEach(function(val, idx) {
13418 hash[val] = true;
13419 });
8b095871 13420
9987f0c1
IC
13421 return hash;
13422}
8b095871 13423
8b095871 13424
9987f0c1
IC
13425function formatValue(ctx, value, recurseTimes) {
13426 // Provide a hook for user-specified inspect functions.
13427 // Check that value is an object with an inspect function on it
13428 if (ctx.customInspect &&
13429 value &&
13430 isFunction(value.inspect) &&
13431 // Filter out the util module, it's inspect function is special
13432 value.inspect !== exports.inspect &&
13433 // Also filter out any prototype objects using the circular check.
13434 !(value.constructor && value.constructor.prototype === value)) {
13435 var ret = value.inspect(recurseTimes, ctx);
13436 if (!isString(ret)) {
13437 ret = formatValue(ctx, ret, recurseTimes);
8b095871 13438 }
9987f0c1 13439 return ret;
8b095871 13440 }
8b095871 13441
9987f0c1
IC
13442 // Primitive types cannot have properties
13443 var primitive = formatPrimitive(ctx, value);
13444 if (primitive) {
13445 return primitive;
8b095871 13446 }
8b095871 13447
9987f0c1
IC
13448 // Look up the keys of the object.
13449 var keys = Object.keys(value);
13450 var visibleKeys = arrayToHash(keys);
8b095871 13451
9987f0c1
IC
13452 if (ctx.showHidden) {
13453 keys = Object.getOwnPropertyNames(value);
8b095871 13454 }
8b095871 13455
9987f0c1
IC
13456 // IE doesn't make error fields non-enumerable
13457 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13458 if (isError(value)
13459 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13460 return formatError(value);
8b095871 13461 }
8b095871 13462
9987f0c1
IC
13463 // Some type of object without properties can be shortcutted.
13464 if (keys.length === 0) {
13465 if (isFunction(value)) {
13466 var name = value.name ? ': ' + value.name : '';
13467 return ctx.stylize('[Function' + name + ']', 'special');
8b095871 13468 }
9987f0c1
IC
13469 if (isRegExp(value)) {
13470 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13471 }
9987f0c1
IC
13472 if (isDate(value)) {
13473 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13474 }
13475 if (isError(value)) {
13476 return formatError(value);
8b095871
IC
13477 }
13478 }
13479
9987f0c1 13480 var base = '', array = false, braces = ['{', '}'];
8b095871 13481
9987f0c1
IC
13482 // Make Array say that they are Array
13483 if (isArray(value)) {
13484 array = true;
13485 braces = ['[', ']'];
13486 }
8b095871 13487
9987f0c1
IC
13488 // Make functions say that they are functions
13489 if (isFunction(value)) {
13490 var n = value.name ? ': ' + value.name : '';
13491 base = ' [Function' + n + ']';
13492 }
8b095871 13493
9987f0c1
IC
13494 // Make RegExps say that they are RegExps
13495 if (isRegExp(value)) {
13496 base = ' ' + RegExp.prototype.toString.call(value);
13497 }
8b095871 13498
9987f0c1
IC
13499 // Make dates with properties first say the date
13500 if (isDate(value)) {
13501 base = ' ' + Date.prototype.toUTCString.call(value);
13502 }
8b095871 13503
9987f0c1
IC
13504 // Make error with message first say the error
13505 if (isError(value)) {
13506 base = ' ' + formatError(value);
13507 }
8b095871 13508
9987f0c1
IC
13509 if (keys.length === 0 && (!array || value.length == 0)) {
13510 return braces[0] + base + braces[1];
13511 }
8b095871 13512
9987f0c1
IC
13513 if (recurseTimes < 0) {
13514 if (isRegExp(value)) {
13515 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13516 } else {
9987f0c1
IC
13517 return ctx.stylize('[Object]', 'special');
13518 }
13519 }
8b095871 13520
9987f0c1 13521 ctx.seen.push(value);
8b095871 13522
9987f0c1
IC
13523 var output;
13524 if (array) {
13525 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
13526 } else {
13527 output = keys.map(function(key) {
13528 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
13529 });
8b095871
IC
13530 }
13531
9987f0c1 13532 ctx.seen.pop();
8b095871 13533
9987f0c1
IC
13534 return reduceToSingleString(output, base, braces);
13535}
8b095871 13536
8b095871 13537
9987f0c1
IC
13538function formatPrimitive(ctx, value) {
13539 if (isUndefined(value))
13540 return ctx.stylize('undefined', 'undefined');
13541 if (isString(value)) {
13542 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
13543 .replace(/'/g, "\\'")
13544 .replace(/\\"/g, '"') + '\'';
13545 return ctx.stylize(simple, 'string');
8b095871 13546 }
9987f0c1
IC
13547 if (isNumber(value))
13548 return ctx.stylize('' + value, 'number');
13549 if (isBoolean(value))
13550 return ctx.stylize('' + value, 'boolean');
13551 // For some reason typeof null is "object", so special case here.
13552 if (isNull(value))
13553 return ctx.stylize('null', 'null');
8b095871
IC
13554}
13555
9987f0c1
IC
13556
13557function formatError(value) {
13558 return '[' + Error.prototype.toString.call(value) + ']';
8b095871
IC
13559}
13560
9987f0c1
IC
13561
13562function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
13563 var output = [];
13564 for (var i = 0, l = value.length; i < l; ++i) {
13565 if (hasOwnProperty(value, String(i))) {
13566 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13567 String(i), true));
13568 } else {
13569 output.push('');
13570 }
8b095871 13571 }
9987f0c1
IC
13572 keys.forEach(function(key) {
13573 if (!key.match(/^\d+$/)) {
13574 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13575 key, true));
13576 }
13577 });
13578 return output;
8b095871
IC
13579}
13580
8b095871 13581
9987f0c1
IC
13582function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
13583 var name, str, desc;
13584 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
13585 if (desc.get) {
13586 if (desc.set) {
13587 str = ctx.stylize('[Getter/Setter]', 'special');
13588 } else {
13589 str = ctx.stylize('[Getter]', 'special');
13590 }
13591 } else {
13592 if (desc.set) {
13593 str = ctx.stylize('[Setter]', 'special');
13594 }
13595 }
13596 if (!hasOwnProperty(visibleKeys, key)) {
13597 name = '[' + key + ']';
13598 }
13599 if (!str) {
13600 if (ctx.seen.indexOf(desc.value) < 0) {
13601 if (isNull(recurseTimes)) {
13602 str = formatValue(ctx, desc.value, null);
13603 } else {
13604 str = formatValue(ctx, desc.value, recurseTimes - 1);
13605 }
13606 if (str.indexOf('\n') > -1) {
13607 if (array) {
13608 str = str.split('\n').map(function(line) {
13609 return ' ' + line;
13610 }).join('\n').substr(2);
13611 } else {
13612 str = '\n' + str.split('\n').map(function(line) {
13613 return ' ' + line;
13614 }).join('\n');
13615 }
13616 }
13617 } else {
13618 str = ctx.stylize('[Circular]', 'special');
13619 }
13620 }
13621 if (isUndefined(name)) {
13622 if (array && key.match(/^\d+$/)) {
13623 return str;
13624 }
13625 name = JSON.stringify('' + key);
13626 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
13627 name = name.substr(1, name.length - 2);
13628 name = ctx.stylize(name, 'name');
13629 } else {
13630 name = name.replace(/'/g, "\\'")
13631 .replace(/\\"/g, '"')
13632 .replace(/(^"|"$)/g, "'");
13633 name = ctx.stylize(name, 'string');
13634 }
13635 }
8b095871 13636
9987f0c1
IC
13637 return name + ': ' + str;
13638}
8b095871 13639
8b095871 13640
9987f0c1
IC
13641function reduceToSingleString(output, base, braces) {
13642 var numLinesEst = 0;
13643 var length = output.reduce(function(prev, cur) {
13644 numLinesEst++;
13645 if (cur.indexOf('\n') >= 0) numLinesEst++;
13646 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
13647 }, 0);
8b095871 13648
9987f0c1
IC
13649 if (length > 60) {
13650 return braces[0] +
13651 (base === '' ? '' : base + '\n ') +
13652 ' ' +
13653 output.join(',\n ') +
13654 ' ' +
13655 braces[1];
13656 }
8b095871 13657
9987f0c1
IC
13658 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
13659}
8b095871 13660
8b095871 13661
9987f0c1
IC
13662// NOTE: These type checking functions intentionally don't use `instanceof`
13663// because it is fragile and can be easily faked with `Object.create()`.
13664function isArray(ar) {
13665 return Array.isArray(ar);
8b095871 13666}
9987f0c1 13667exports.isArray = isArray;
8b095871 13668
9987f0c1
IC
13669function isBoolean(arg) {
13670 return typeof arg === 'boolean';
13671}
13672exports.isBoolean = isBoolean;
8b095871 13673
9987f0c1
IC
13674function isNull(arg) {
13675 return arg === null;
13676}
13677exports.isNull = isNull;
8b095871 13678
9987f0c1
IC
13679function isNullOrUndefined(arg) {
13680 return arg == null;
13681}
13682exports.isNullOrUndefined = isNullOrUndefined;
8b095871 13683
9987f0c1
IC
13684function isNumber(arg) {
13685 return typeof arg === 'number';
13686}
13687exports.isNumber = isNumber;
8b095871 13688
9987f0c1
IC
13689function isString(arg) {
13690 return typeof arg === 'string';
13691}
13692exports.isString = isString;
8b095871 13693
9987f0c1
IC
13694function isSymbol(arg) {
13695 return typeof arg === 'symbol';
13696}
13697exports.isSymbol = isSymbol;
8b095871 13698
9987f0c1
IC
13699function isUndefined(arg) {
13700 return arg === void 0;
8b095871 13701}
9987f0c1 13702exports.isUndefined = isUndefined;
8b095871 13703
9987f0c1
IC
13704function isRegExp(re) {
13705 return isObject(re) && objectToString(re) === '[object RegExp]';
13706}
13707exports.isRegExp = isRegExp;
8b095871 13708
9987f0c1
IC
13709function isObject(arg) {
13710 return typeof arg === 'object' && arg !== null;
13711}
13712exports.isObject = isObject;
8b095871 13713
9987f0c1
IC
13714function isDate(d) {
13715 return isObject(d) && objectToString(d) === '[object Date]';
13716}
13717exports.isDate = isDate;
8b095871 13718
9987f0c1
IC
13719function isError(e) {
13720 return isObject(e) &&
13721 (objectToString(e) === '[object Error]' || e instanceof Error);
13722}
13723exports.isError = isError;
8b095871 13724
9987f0c1
IC
13725function isFunction(arg) {
13726 return typeof arg === 'function';
13727}
13728exports.isFunction = isFunction;
8b095871 13729
9987f0c1
IC
13730function isPrimitive(arg) {
13731 return arg === null ||
13732 typeof arg === 'boolean' ||
13733 typeof arg === 'number' ||
13734 typeof arg === 'string' ||
13735 typeof arg === 'symbol' || // ES6 symbol
13736 typeof arg === 'undefined';
13737}
13738exports.isPrimitive = isPrimitive;
8b095871 13739
9987f0c1 13740exports.isBuffer = require('./support/isBuffer');
8b095871 13741
9987f0c1
IC
13742function objectToString(o) {
13743 return Object.prototype.toString.call(o);
8b095871
IC
13744}
13745
8b095871 13746
9987f0c1
IC
13747function pad(n) {
13748 return n < 10 ? '0' + n.toString(10) : n.toString(10);
13749}
8b095871 13750
8b095871 13751
9987f0c1
IC
13752var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
13753 'Oct', 'Nov', 'Dec'];
8b095871 13754
9987f0c1
IC
13755// 26 Feb 16:19:34
13756function timestamp() {
13757 var d = new Date();
13758 var time = [pad(d.getHours()),
13759 pad(d.getMinutes()),
13760 pad(d.getSeconds())].join(':');
13761 return [d.getDate(), months[d.getMonth()], time].join(' ');
13762}
13763
13764
13765// log is just a thin wrapper to console.log that prepends a timestamp
13766exports.log = function() {
13767 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
8b095871
IC
13768};
13769
13770
9987f0c1
IC
13771/**
13772 * Inherit the prototype methods from one constructor into another.
13773 *
13774 * The Function.prototype.inherits from lang.js rewritten as a standalone
13775 * function (not on Function.prototype). NOTE: If this file is to be loaded
13776 * during bootstrapping this function needs to be rewritten using some native
13777 * functions as prototype setup using normal JavaScript does not work as
13778 * expected during bootstrapping (see mirror.js in r114903).
13779 *
13780 * @param {function} ctor Constructor function which needs to inherit the
13781 * prototype.
13782 * @param {function} superCtor Constructor function to inherit prototype from.
13783 */
13784exports.inherits = require('inherits');
8b095871 13785
9987f0c1
IC
13786exports._extend = function(origin, add) {
13787 // Don't do anything if add isn't an object
13788 if (!add || !isObject(add)) return origin;
8b095871 13789
9987f0c1
IC
13790 var keys = Object.keys(add);
13791 var i = keys.length;
13792 while (i--) {
13793 origin[keys[i]] = add[keys[i]];
13794 }
13795 return origin;
13796};
8b095871 13797
9987f0c1
IC
13798function hasOwnProperty(obj, prop) {
13799 return Object.prototype.hasOwnProperty.call(obj, prop);
13800}
8b095871 13801
9987f0c1
IC
13802}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13803},{"./support/isBuffer":31,"_process":12,"inherits":30}],33:[function(require,module,exports){
13804module.exports = {
13805 base58: require('bs58'),
13806 bitcoin: require('bitcoinjs-lib'),
13807 ecurve: require('ecurve'),
13808 BigInteger: require('bigi')
8b095871
IC
13809}
13810
9987f0c1
IC
13811},{"bigi":37,"bitcoinjs-lib":50,"bs58":79,"ecurve":89}],34:[function(require,module,exports){
13812// base-x encoding
13813// Forked from https://github.com/cryptocoinjs/bs58
13814// Originally written by Mike Hearn for BitcoinJ
13815// Copyright (c) 2011 Google Inc
13816// Ported to JavaScript by Stefan Thomas
13817// Merged Buffer refactorings from base58-native by Stephen Pair
13818// Copyright (c) 2013 BitPay Inc
8b095871 13819
9987f0c1 13820var Buffer = require('safe-buffer').Buffer
8b095871 13821
9987f0c1
IC
13822module.exports = function base (ALPHABET) {
13823 var ALPHABET_MAP = {}
13824 var BASE = ALPHABET.length
13825 var LEADER = ALPHABET.charAt(0)
8b095871 13826
9987f0c1
IC
13827 // pre-compute lookup table
13828 for (var z = 0; z < ALPHABET.length; z++) {
13829 var x = ALPHABET.charAt(z)
8b095871 13830
9987f0c1
IC
13831 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13832 ALPHABET_MAP[x] = z
13833 }
8b095871 13834
9987f0c1
IC
13835 function encode (source) {
13836 if (source.length === 0) return ''
8b095871 13837
9987f0c1
IC
13838 var digits = [0]
13839 for (var i = 0; i < source.length; ++i) {
13840 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13841 carry += digits[j] << 8
13842 digits[j] = carry % BASE
13843 carry = (carry / BASE) | 0
13844 }
8b095871 13845
9987f0c1
IC
13846 while (carry > 0) {
13847 digits.push(carry % BASE)
13848 carry = (carry / BASE) | 0
13849 }
13850 }
8b095871 13851
9987f0c1 13852 var string = ''
8b095871 13853
9987f0c1
IC
13854 // deal with leading zeros
13855 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13856 // convert digits to a string
13857 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
8b095871 13858
9987f0c1
IC
13859 return string
13860 }
8b095871 13861
9987f0c1
IC
13862 function decodeUnsafe (string) {
13863 if (string.length === 0) return Buffer.allocUnsafe(0)
8b095871 13864
9987f0c1
IC
13865 var bytes = [0]
13866 for (var i = 0; i < string.length; i++) {
13867 var value = ALPHABET_MAP[string[i]]
13868 if (value === undefined) return
8b095871 13869
9987f0c1
IC
13870 for (var j = 0, carry = value; j < bytes.length; ++j) {
13871 carry += bytes[j] * BASE
13872 bytes[j] = carry & 0xff
13873 carry >>= 8
13874 }
8b095871 13875
9987f0c1
IC
13876 while (carry > 0) {
13877 bytes.push(carry & 0xff)
13878 carry >>= 8
13879 }
13880 }
8b095871 13881
9987f0c1
IC
13882 // deal with leading zeros
13883 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13884 bytes.push(0)
13885 }
8b095871 13886
9987f0c1
IC
13887 return Buffer.from(bytes.reverse())
13888 }
8b095871 13889
9987f0c1
IC
13890 function decode (string) {
13891 var buffer = decodeUnsafe(string)
13892 if (buffer) return buffer
8b095871 13893
9987f0c1
IC
13894 throw new Error('Non-base' + BASE + ' character')
13895 }
8b095871 13896
9987f0c1
IC
13897 return {
13898 encode: encode,
13899 decodeUnsafe: decodeUnsafe,
13900 decode: decode
13901 }
13902}
8b095871 13903
9987f0c1
IC
13904},{"safe-buffer":98}],35:[function(require,module,exports){
13905// (public) Constructor
13906function BigInteger(a, b, c) {
13907 if (!(this instanceof BigInteger))
13908 return new BigInteger(a, b, c)
8b095871 13909
9987f0c1
IC
13910 if (a != null) {
13911 if ("number" == typeof a) this.fromNumber(a, b, c)
13912 else if (b == null && "string" != typeof a) this.fromString(a, 256)
13913 else this.fromString(a, b)
13914 }
13915}
8b095871 13916
9987f0c1 13917var proto = BigInteger.prototype
8b095871 13918
9987f0c1
IC
13919// duck-typed isBigInteger
13920proto.__bigi = require('../package.json').version
13921BigInteger.isBigInteger = function (obj, check_ver) {
13922 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
13923}
8b095871 13924
9987f0c1
IC
13925// Bits per digit
13926var dbits
8b095871 13927
9987f0c1
IC
13928// am: Compute w_j += (x*this_i), propagate carries,
13929// c is initial carry, returns final carry.
13930// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
13931// We need to select the fastest one that works in this environment.
8b095871 13932
9987f0c1
IC
13933// am1: use a single mult and divide to get the high bits,
13934// max digit bits should be 26 because
13935// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
13936function am1(i, x, w, j, c, n) {
13937 while (--n >= 0) {
13938 var v = x * this[i++] + w[j] + c
13939 c = Math.floor(v / 0x4000000)
13940 w[j++] = v & 0x3ffffff
13941 }
13942 return c
13943}
13944// am2 avoids a big mult-and-extract completely.
13945// Max digit bits should be <= 30 because we do bitwise ops
13946// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
13947function am2(i, x, w, j, c, n) {
13948 var xl = x & 0x7fff,
13949 xh = x >> 15
13950 while (--n >= 0) {
13951 var l = this[i] & 0x7fff
13952 var h = this[i++] >> 15
13953 var m = xh * l + h * xl
13954 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
13955 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
13956 w[j++] = l & 0x3fffffff
13957 }
13958 return c
13959}
13960// Alternately, set max digit bits to 28 since some
13961// browsers slow down when dealing with 32-bit numbers.
13962function am3(i, x, w, j, c, n) {
13963 var xl = x & 0x3fff,
13964 xh = x >> 14
13965 while (--n >= 0) {
13966 var l = this[i] & 0x3fff
13967 var h = this[i++] >> 14
13968 var m = xh * l + h * xl
13969 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
13970 c = (l >> 28) + (m >> 14) + xh * h
13971 w[j++] = l & 0xfffffff
13972 }
13973 return c
13974}
8b095871 13975
9987f0c1
IC
13976// wtf?
13977BigInteger.prototype.am = am1
13978dbits = 26
8b095871 13979
9987f0c1
IC
13980BigInteger.prototype.DB = dbits
13981BigInteger.prototype.DM = ((1 << dbits) - 1)
13982var DV = BigInteger.prototype.DV = (1 << dbits)
8b095871 13983
9987f0c1
IC
13984var BI_FP = 52
13985BigInteger.prototype.FV = Math.pow(2, BI_FP)
13986BigInteger.prototype.F1 = BI_FP - dbits
13987BigInteger.prototype.F2 = 2 * dbits - BI_FP
8b095871 13988
9987f0c1
IC
13989// Digit conversions
13990var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
13991var BI_RC = new Array()
13992var rr, vv
13993rr = "0".charCodeAt(0)
13994for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
13995rr = "a".charCodeAt(0)
13996for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
13997rr = "A".charCodeAt(0)
13998for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
8b095871 13999
9987f0c1
IC
14000function int2char(n) {
14001 return BI_RM.charAt(n)
14002}
8b095871 14003
9987f0c1
IC
14004function intAt(s, i) {
14005 var c = BI_RC[s.charCodeAt(i)]
14006 return (c == null) ? -1 : c
14007}
8b095871 14008
9987f0c1
IC
14009// (protected) copy this to r
14010function bnpCopyTo(r) {
14011 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
14012 r.t = this.t
14013 r.s = this.s
14014}
8b095871 14015
9987f0c1
IC
14016// (protected) set from integer value x, -DV <= x < DV
14017function bnpFromInt(x) {
14018 this.t = 1
14019 this.s = (x < 0) ? -1 : 0
14020 if (x > 0) this[0] = x
14021 else if (x < -1) this[0] = x + DV
14022 else this.t = 0
14023}
8b095871 14024
9987f0c1
IC
14025// return bigint initialized to value
14026function nbv(i) {
14027 var r = new BigInteger()
14028 r.fromInt(i)
14029 return r
8b095871
IC
14030}
14031
9987f0c1
IC
14032// (protected) set from string and radix
14033function bnpFromString(s, b) {
14034 var self = this
8b095871 14035
9987f0c1
IC
14036 var k
14037 if (b == 16) k = 4
14038 else if (b == 8) k = 3
14039 else if (b == 256) k = 8; // byte array
14040 else if (b == 2) k = 1
14041 else if (b == 32) k = 5
14042 else if (b == 4) k = 2
14043 else {
14044 self.fromRadix(s, b)
14045 return
14046 }
14047 self.t = 0
14048 self.s = 0
14049 var i = s.length,
14050 mi = false,
14051 sh = 0
14052 while (--i >= 0) {
14053 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
14054 if (x < 0) {
14055 if (s.charAt(i) == "-") mi = true
14056 continue
14057 }
14058 mi = false
14059 if (sh == 0)
14060 self[self.t++] = x
14061 else if (sh + k > self.DB) {
14062 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
14063 self[self.t++] = (x >> (self.DB - sh))
14064 } else
14065 self[self.t - 1] |= x << sh
14066 sh += k
14067 if (sh >= self.DB) sh -= self.DB
14068 }
14069 if (k == 8 && (s[0] & 0x80) != 0) {
14070 self.s = -1
14071 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
14072 }
14073 self.clamp()
14074 if (mi) BigInteger.ZERO.subTo(self, self)
14075}
8b095871 14076
9987f0c1
IC
14077// (protected) clamp off excess high words
14078function bnpClamp() {
14079 var c = this.s & this.DM
14080 while (this.t > 0 && this[this.t - 1] == c)--this.t
8b095871
IC
14081}
14082
9987f0c1
IC
14083// (public) return string representation in given radix
14084function bnToString(b) {
14085 var self = this
14086 if (self.s < 0) return "-" + self.negate()
14087 .toString(b)
14088 var k
14089 if (b == 16) k = 4
14090 else if (b == 8) k = 3
14091 else if (b == 2) k = 1
14092 else if (b == 32) k = 5
14093 else if (b == 4) k = 2
14094 else return self.toRadix(b)
14095 var km = (1 << k) - 1,
14096 d, m = false,
14097 r = "",
14098 i = self.t
14099 var p = self.DB - (i * self.DB) % k
14100 if (i-- > 0) {
14101 if (p < self.DB && (d = self[i] >> p) > 0) {
14102 m = true
14103 r = int2char(d)
14104 }
14105 while (i >= 0) {
14106 if (p < k) {
14107 d = (self[i] & ((1 << p) - 1)) << (k - p)
14108 d |= self[--i] >> (p += self.DB - k)
14109 } else {
14110 d = (self[i] >> (p -= k)) & km
14111 if (p <= 0) {
14112 p += self.DB
14113 --i
14114 }
14115 }
14116 if (d > 0) m = true
14117 if (m) r += int2char(d)
14118 }
8b095871 14119 }
9987f0c1 14120 return m ? r : "0"
8b095871
IC
14121}
14122
9987f0c1
IC
14123// (public) -this
14124function bnNegate() {
14125 var r = new BigInteger()
14126 BigInteger.ZERO.subTo(this, r)
14127 return r
14128}
8b095871 14129
9987f0c1
IC
14130// (public) |this|
14131function bnAbs() {
14132 return (this.s < 0) ? this.negate() : this
14133}
8b095871 14134
9987f0c1
IC
14135// (public) return + if this > a, - if this < a, 0 if equal
14136function bnCompareTo(a) {
14137 var r = this.s - a.s
14138 if (r != 0) return r
14139 var i = this.t
14140 r = i - a.t
14141 if (r != 0) return (this.s < 0) ? -r : r
14142 while (--i >= 0)
14143 if ((r = this[i] - a[i]) != 0) return r
14144 return 0
14145}
8b095871 14146
9987f0c1
IC
14147// returns bit length of the integer x
14148function nbits(x) {
14149 var r = 1,
14150 t
14151 if ((t = x >>> 16) != 0) {
14152 x = t
14153 r += 16
14154 }
14155 if ((t = x >> 8) != 0) {
14156 x = t
14157 r += 8
14158 }
14159 if ((t = x >> 4) != 0) {
14160 x = t
14161 r += 4
14162 }
14163 if ((t = x >> 2) != 0) {
14164 x = t
14165 r += 2
14166 }
14167 if ((t = x >> 1) != 0) {
14168 x = t
14169 r += 1
8b095871 14170 }
9987f0c1
IC
14171 return r
14172}
8b095871 14173
9987f0c1
IC
14174// (public) return the number of bits in "this"
14175function bnBitLength() {
14176 if (this.t <= 0) return 0
14177 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
14178}
8b095871 14179
9987f0c1
IC
14180// (public) return the number of bytes in "this"
14181function bnByteLength() {
14182 return this.bitLength() >> 3
14183}
8b095871 14184
9987f0c1
IC
14185// (protected) r = this << n*DB
14186function bnpDLShiftTo(n, r) {
14187 var i
14188 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
14189 for (i = n - 1; i >= 0; --i) r[i] = 0
14190 r.t = this.t + n
14191 r.s = this.s
14192}
8b095871 14193
9987f0c1
IC
14194// (protected) r = this >> n*DB
14195function bnpDRShiftTo(n, r) {
14196 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
14197 r.t = Math.max(this.t - n, 0)
14198 r.s = this.s
14199}
8b095871 14200
9987f0c1
IC
14201// (protected) r = this << n
14202function bnpLShiftTo(n, r) {
14203 var self = this
14204 var bs = n % self.DB
14205 var cbs = self.DB - bs
14206 var bm = (1 << cbs) - 1
14207 var ds = Math.floor(n / self.DB),
14208 c = (self.s << bs) & self.DM,
14209 i
14210 for (i = self.t - 1; i >= 0; --i) {
14211 r[i + ds + 1] = (self[i] >> cbs) | c
14212 c = (self[i] & bm) << bs
14213 }
14214 for (i = ds - 1; i >= 0; --i) r[i] = 0
14215 r[ds] = c
14216 r.t = self.t + ds + 1
14217 r.s = self.s
14218 r.clamp()
14219}
8b095871 14220
9987f0c1
IC
14221// (protected) r = this >> n
14222function bnpRShiftTo(n, r) {
14223 var self = this
14224 r.s = self.s
14225 var ds = Math.floor(n / self.DB)
14226 if (ds >= self.t) {
14227 r.t = 0
14228 return
8b095871 14229 }
9987f0c1
IC
14230 var bs = n % self.DB
14231 var cbs = self.DB - bs
14232 var bm = (1 << bs) - 1
14233 r[0] = self[ds] >> bs
14234 for (var i = ds + 1; i < self.t; ++i) {
14235 r[i - ds - 1] |= (self[i] & bm) << cbs
14236 r[i - ds] = self[i] >> bs
14237 }
14238 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
14239 r.t = self.t - ds
14240 r.clamp()
14241}
8b095871 14242
9987f0c1
IC
14243// (protected) r = this - a
14244function bnpSubTo(a, r) {
14245 var self = this
14246 var i = 0,
14247 c = 0,
14248 m = Math.min(a.t, self.t)
14249 while (i < m) {
14250 c += self[i] - a[i]
14251 r[i++] = c & self.DM
14252 c >>= self.DB
8b095871 14253 }
9987f0c1
IC
14254 if (a.t < self.t) {
14255 c -= a.s
14256 while (i < self.t) {
14257 c += self[i]
14258 r[i++] = c & self.DM
14259 c >>= self.DB
14260 }
14261 c += self.s
14262 } else {
14263 c += self.s
14264 while (i < a.t) {
14265 c -= a[i]
14266 r[i++] = c & self.DM
14267 c >>= self.DB
14268 }
14269 c -= a.s
14270 }
14271 r.s = (c < 0) ? -1 : 0
14272 if (c < -1) r[i++] = self.DV + c
14273 else if (c > 0) r[i++] = c
14274 r.t = i
14275 r.clamp()
8b095871
IC
14276}
14277
9987f0c1
IC
14278// (protected) r = this * a, r != this,a (HAC 14.12)
14279// "this" should be the larger one if appropriate.
14280function bnpMultiplyTo(a, r) {
14281 var x = this.abs(),
14282 y = a.abs()
14283 var i = x.t
14284 r.t = i + y.t
14285 while (--i >= 0) r[i] = 0
14286 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
14287 r.s = 0
14288 r.clamp()
14289 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
14290}
8b095871 14291
9987f0c1
IC
14292// (protected) r = this^2, r != this (HAC 14.16)
14293function bnpSquareTo(r) {
14294 var x = this.abs()
14295 var i = r.t = 2 * x.t
14296 while (--i >= 0) r[i] = 0
14297 for (i = 0; i < x.t - 1; ++i) {
14298 var c = x.am(i, x[i], r, 2 * i, 0, 1)
14299 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
14300 r[i + x.t] -= x.DV
14301 r[i + x.t + 1] = 1
14302 }
14303 }
14304 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
14305 r.s = 0
14306 r.clamp()
14307}
8b095871 14308
9987f0c1
IC
14309// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
14310// r != q, this != m. q or r may be null.
14311function bnpDivRemTo(m, q, r) {
14312 var self = this
14313 var pm = m.abs()
14314 if (pm.t <= 0) return
14315 var pt = self.abs()
14316 if (pt.t < pm.t) {
14317 if (q != null) q.fromInt(0)
14318 if (r != null) self.copyTo(r)
14319 return
14320 }
14321 if (r == null) r = new BigInteger()
14322 var y = new BigInteger(),
14323 ts = self.s,
14324 ms = m.s
14325 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
14326 if (nsh > 0) {
14327 pm.lShiftTo(nsh, y)
14328 pt.lShiftTo(nsh, r)
14329 } else {
14330 pm.copyTo(y)
14331 pt.copyTo(r)
14332 }
14333 var ys = y.t
14334 var y0 = y[ys - 1]
14335 if (y0 == 0) return
14336 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
14337 var d1 = self.FV / yt,
14338 d2 = (1 << self.F1) / yt,
14339 e = 1 << self.F2
14340 var i = r.t,
14341 j = i - ys,
14342 t = (q == null) ? new BigInteger() : q
14343 y.dlShiftTo(j, t)
14344 if (r.compareTo(t) >= 0) {
14345 r[r.t++] = 1
14346 r.subTo(t, r)
14347 }
14348 BigInteger.ONE.dlShiftTo(ys, t)
14349 t.subTo(y, y); // "negative" y so we can replace sub with am later
14350 while (y.t < ys) y[y.t++] = 0
14351 while (--j >= 0) {
14352 // Estimate quotient digit
14353 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
14354 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
14355 y.dlShiftTo(j, t)
14356 r.subTo(t, r)
14357 while (r[i] < --qd) r.subTo(t, r)
14358 }
14359 }
14360 if (q != null) {
14361 r.drShiftTo(ys, q)
14362 if (ts != ms) BigInteger.ZERO.subTo(q, q)
14363 }
14364 r.t = ys
14365 r.clamp()
14366 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
14367 if (ts < 0) BigInteger.ZERO.subTo(r, r)
14368}
8b095871 14369
9987f0c1
IC
14370// (public) this mod a
14371function bnMod(a) {
14372 var r = new BigInteger()
14373 this.abs()
14374 .divRemTo(a, null, r)
14375 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
14376 return r
14377}
8b095871 14378
9987f0c1
IC
14379// Modular reduction using "classic" algorithm
14380function Classic(m) {
14381 this.m = m
8b095871
IC
14382}
14383
9987f0c1
IC
14384function cConvert(x) {
14385 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
14386 else return x
8b095871
IC
14387}
14388
9987f0c1
IC
14389function cRevert(x) {
14390 return x
14391}
8b095871 14392
9987f0c1
IC
14393function cReduce(x) {
14394 x.divRemTo(this.m, null, x)
8b095871
IC
14395}
14396
9987f0c1
IC
14397function cMulTo(x, y, r) {
14398 x.multiplyTo(y, r)
14399 this.reduce(r)
8b095871
IC
14400}
14401
9987f0c1
IC
14402function cSqrTo(x, r) {
14403 x.squareTo(r)
14404 this.reduce(r)
14405}
8b095871 14406
9987f0c1
IC
14407Classic.prototype.convert = cConvert
14408Classic.prototype.revert = cRevert
14409Classic.prototype.reduce = cReduce
14410Classic.prototype.mulTo = cMulTo
14411Classic.prototype.sqrTo = cSqrTo
8b095871 14412
9987f0c1
IC
14413// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
14414// justification:
14415// xy == 1 (mod m)
14416// xy = 1+km
14417// xy(2-xy) = (1+km)(1-km)
14418// x[y(2-xy)] = 1-k^2m^2
14419// x[y(2-xy)] == 1 (mod m^2)
14420// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
14421// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
14422// JS multiply "overflows" differently from C/C++, so care is needed here.
14423function bnpInvDigit() {
14424 if (this.t < 1) return 0
14425 var x = this[0]
14426 if ((x & 1) == 0) return 0
14427 var y = x & 3; // y == 1/x mod 2^2
14428 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
14429 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
14430 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
14431 // last step - calculate inverse mod DV directly
14432 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
14433 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
14434 // we really want the negative inverse, and -DV < y < DV
14435 return (y > 0) ? this.DV - y : -y
14436}
8b095871 14437
9987f0c1
IC
14438// Montgomery reduction
14439function Montgomery(m) {
14440 this.m = m
14441 this.mp = m.invDigit()
14442 this.mpl = this.mp & 0x7fff
14443 this.mph = this.mp >> 15
14444 this.um = (1 << (m.DB - 15)) - 1
14445 this.mt2 = 2 * m.t
14446}
8b095871 14447
9987f0c1
IC
14448// xR mod m
14449function montConvert(x) {
14450 var r = new BigInteger()
14451 x.abs()
14452 .dlShiftTo(this.m.t, r)
14453 r.divRemTo(this.m, null, r)
14454 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
14455 return r
8b095871
IC
14456}
14457
9987f0c1
IC
14458// x/R mod m
14459function montRevert(x) {
14460 var r = new BigInteger()
14461 x.copyTo(r)
14462 this.reduce(r)
14463 return r
8b095871
IC
14464}
14465
9987f0c1
IC
14466// x = x/R mod m (HAC 14.32)
14467function montReduce(x) {
14468 while (x.t <= this.mt2) // pad x so am has enough room later
14469 x[x.t++] = 0
14470 for (var i = 0; i < this.m.t; ++i) {
14471 // faster way of calculating u0 = x[i]*mp mod DV
14472 var j = x[i] & 0x7fff
14473 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
14474 // use am to combine the multiply-shift-add into one call
14475 j = i + this.m.t
14476 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
14477 // propagate carry
14478 while (x[j] >= x.DV) {
14479 x[j] -= x.DV
14480 x[++j]++
14481 }
8b095871 14482 }
9987f0c1
IC
14483 x.clamp()
14484 x.drShiftTo(this.m.t, x)
14485 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
8b095871
IC
14486}
14487
9987f0c1
IC
14488// r = "x^2/R mod m"; x != r
14489function montSqrTo(x, r) {
14490 x.squareTo(r)
14491 this.reduce(r)
14492}
8b095871 14493
9987f0c1
IC
14494// r = "xy/R mod m"; x,y != r
14495function montMulTo(x, y, r) {
14496 x.multiplyTo(y, r)
14497 this.reduce(r)
14498}
8b095871 14499
9987f0c1
IC
14500Montgomery.prototype.convert = montConvert
14501Montgomery.prototype.revert = montRevert
14502Montgomery.prototype.reduce = montReduce
14503Montgomery.prototype.mulTo = montMulTo
14504Montgomery.prototype.sqrTo = montSqrTo
8b095871 14505
9987f0c1
IC
14506// (protected) true iff this is even
14507function bnpIsEven() {
14508 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
14509}
8b095871 14510
9987f0c1
IC
14511// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
14512function bnpExp(e, z) {
14513 if (e > 0xffffffff || e < 1) return BigInteger.ONE
14514 var r = new BigInteger(),
14515 r2 = new BigInteger(),
14516 g = z.convert(this),
14517 i = nbits(e) - 1
14518 g.copyTo(r)
14519 while (--i >= 0) {
14520 z.sqrTo(r, r2)
14521 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
14522 else {
14523 var t = r
14524 r = r2
14525 r2 = t
8b095871 14526 }
8b095871 14527 }
9987f0c1 14528 return z.revert(r)
8b095871
IC
14529}
14530
9987f0c1
IC
14531// (public) this^e % m, 0 <= e < 2^32
14532function bnModPowInt(e, m) {
14533 var z
14534 if (e < 256 || m.isEven()) z = new Classic(m)
14535 else z = new Montgomery(m)
14536 return this.exp(e, z)
14537}
8b095871 14538
9987f0c1
IC
14539// protected
14540proto.copyTo = bnpCopyTo
14541proto.fromInt = bnpFromInt
14542proto.fromString = bnpFromString
14543proto.clamp = bnpClamp
14544proto.dlShiftTo = bnpDLShiftTo
14545proto.drShiftTo = bnpDRShiftTo
14546proto.lShiftTo = bnpLShiftTo
14547proto.rShiftTo = bnpRShiftTo
14548proto.subTo = bnpSubTo
14549proto.multiplyTo = bnpMultiplyTo
14550proto.squareTo = bnpSquareTo
14551proto.divRemTo = bnpDivRemTo
14552proto.invDigit = bnpInvDigit
14553proto.isEven = bnpIsEven
14554proto.exp = bnpExp
8b095871 14555
9987f0c1
IC
14556// public
14557proto.toString = bnToString
14558proto.negate = bnNegate
14559proto.abs = bnAbs
14560proto.compareTo = bnCompareTo
14561proto.bitLength = bnBitLength
14562proto.byteLength = bnByteLength
14563proto.mod = bnMod
14564proto.modPowInt = bnModPowInt
8b095871 14565
9987f0c1
IC
14566// (public)
14567function bnClone() {
14568 var r = new BigInteger()
14569 this.copyTo(r)
14570 return r
14571}
8b095871 14572
9987f0c1
IC
14573// (public) return value as integer
14574function bnIntValue() {
14575 if (this.s < 0) {
14576 if (this.t == 1) return this[0] - this.DV
14577 else if (this.t == 0) return -1
14578 } else if (this.t == 1) return this[0]
14579 else if (this.t == 0) return 0
14580 // assumes 16 < DB < 32
14581 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
14582}
8b095871 14583
9987f0c1
IC
14584// (public) return value as byte
14585function bnByteValue() {
14586 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
14587}
8b095871 14588
9987f0c1
IC
14589// (public) return value as short (assumes DB>=16)
14590function bnShortValue() {
14591 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
14592}
8b095871 14593
9987f0c1
IC
14594// (protected) return x s.t. r^x < DV
14595function bnpChunkSize(r) {
14596 return Math.floor(Math.LN2 * this.DB / Math.log(r))
8b095871
IC
14597}
14598
9987f0c1
IC
14599// (public) 0 if this == 0, 1 if this > 0
14600function bnSigNum() {
14601 if (this.s < 0) return -1
14602 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
14603 else return 1
8b095871
IC
14604}
14605
9987f0c1
IC
14606// (protected) convert to radix string
14607function bnpToRadix(b) {
14608 if (b == null) b = 10
14609 if (this.signum() == 0 || b < 2 || b > 36) return "0"
14610 var cs = this.chunkSize(b)
14611 var a = Math.pow(b, cs)
14612 var d = nbv(a),
14613 y = new BigInteger(),
14614 z = new BigInteger(),
14615 r = ""
14616 this.divRemTo(d, y, z)
14617 while (y.signum() > 0) {
14618 r = (a + z.intValue())
14619 .toString(b)
14620 .substr(1) + r
14621 y.divRemTo(d, y, z)
8b095871 14622 }
9987f0c1
IC
14623 return z.intValue()
14624 .toString(b) + r
8b095871
IC
14625}
14626
9987f0c1
IC
14627// (protected) convert from radix string
14628function bnpFromRadix(s, b) {
14629 var self = this
14630 self.fromInt(0)
14631 if (b == null) b = 10
14632 var cs = self.chunkSize(b)
14633 var d = Math.pow(b, cs),
14634 mi = false,
14635 j = 0,
14636 w = 0
14637 for (var i = 0; i < s.length; ++i) {
14638 var x = intAt(s, i)
14639 if (x < 0) {
14640 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
14641 continue
14642 }
14643 w = b * w + x
14644 if (++j >= cs) {
14645 self.dMultiply(d)
14646 self.dAddOffset(w, 0)
14647 j = 0
14648 w = 0
14649 }
8b095871 14650 }
9987f0c1
IC
14651 if (j > 0) {
14652 self.dMultiply(Math.pow(b, j))
14653 self.dAddOffset(w, 0)
14654 }
14655 if (mi) BigInteger.ZERO.subTo(self, self)
8b095871
IC
14656}
14657
9987f0c1
IC
14658// (protected) alternate constructor
14659function bnpFromNumber(a, b, c) {
14660 var self = this
14661 if ("number" == typeof b) {
14662 // new BigInteger(int,int,RNG)
14663 if (a < 2) self.fromInt(1)
14664 else {
14665 self.fromNumber(a, c)
14666 if (!self.testBit(a - 1)) // force MSB set
14667 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
14668 if (self.isEven()) self.dAddOffset(1, 0); // force odd
14669 while (!self.isProbablePrime(b)) {
14670 self.dAddOffset(2, 0)
14671 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
14672 }
14673 }
14674 } else {
14675 // new BigInteger(int,RNG)
14676 var x = new Array(),
14677 t = a & 7
14678 x.length = (a >> 3) + 1
14679 b.nextBytes(x)
14680 if (t > 0) x[0] &= ((1 << t) - 1)
14681 else x[0] = 0
14682 self.fromString(x, 256)
14683 }
8b095871 14684}
8b095871 14685
9987f0c1
IC
14686// (public) convert to bigendian byte array
14687function bnToByteArray() {
14688 var self = this
14689 var i = self.t,
14690 r = new Array()
14691 r[0] = self.s
14692 var p = self.DB - (i * self.DB) % 8,
14693 d, k = 0
14694 if (i-- > 0) {
14695 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
14696 r[k++] = d | (self.s << (self.DB - p))
14697 while (i >= 0) {
14698 if (p < 8) {
14699 d = (self[i] & ((1 << p) - 1)) << (8 - p)
14700 d |= self[--i] >> (p += self.DB - 8)
14701 } else {
14702 d = (self[i] >> (p -= 8)) & 0xff
14703 if (p <= 0) {
14704 p += self.DB
14705 --i
14706 }
14707 }
14708 if ((d & 0x80) != 0) d |= -256
14709 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
14710 if (k > 0 || d != self.s) r[k++] = d
14711 }
14712 }
14713 return r
8b095871 14714}
8b095871 14715
9987f0c1
IC
14716function bnEquals(a) {
14717 return (this.compareTo(a) == 0)
8b095871 14718}
8b095871 14719
9987f0c1
IC
14720function bnMin(a) {
14721 return (this.compareTo(a) < 0) ? this : a
8b095871 14722}
8b095871 14723
9987f0c1
IC
14724function bnMax(a) {
14725 return (this.compareTo(a) > 0) ? this : a
8b095871 14726}
8b095871 14727
9987f0c1
IC
14728// (protected) r = this op a (bitwise)
14729function bnpBitwiseTo(a, op, r) {
14730 var self = this
14731 var i, f, m = Math.min(a.t, self.t)
14732 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
14733 if (a.t < self.t) {
14734 f = a.s & self.DM
14735 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
14736 r.t = self.t
14737 } else {
14738 f = self.s & self.DM
14739 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
14740 r.t = a.t
14741 }
14742 r.s = op(self.s, a.s)
14743 r.clamp()
8b095871 14744}
8b095871 14745
9987f0c1
IC
14746// (public) this & a
14747function op_and(x, y) {
14748 return x & y
8b095871 14749}
8b095871 14750
9987f0c1
IC
14751function bnAnd(a) {
14752 var r = new BigInteger()
14753 this.bitwiseTo(a, op_and, r)
14754 return r
8b095871 14755}
8b095871 14756
9987f0c1
IC
14757// (public) this | a
14758function op_or(x, y) {
14759 return x | y
8b095871 14760}
8b095871 14761
9987f0c1
IC
14762function bnOr(a) {
14763 var r = new BigInteger()
14764 this.bitwiseTo(a, op_or, r)
14765 return r
8b095871 14766}
8b095871 14767
9987f0c1
IC
14768// (public) this ^ a
14769function op_xor(x, y) {
14770 return x ^ y
8b095871 14771}
8b095871 14772
9987f0c1
IC
14773function bnXor(a) {
14774 var r = new BigInteger()
14775 this.bitwiseTo(a, op_xor, r)
14776 return r
8b095871 14777}
8b095871 14778
9987f0c1
IC
14779// (public) this & ~a
14780function op_andnot(x, y) {
14781 return x & ~y
8b095871 14782}
8b095871 14783
9987f0c1
IC
14784function bnAndNot(a) {
14785 var r = new BigInteger()
14786 this.bitwiseTo(a, op_andnot, r)
14787 return r
8b095871 14788}
8b095871 14789
9987f0c1
IC
14790// (public) ~this
14791function bnNot() {
14792 var r = new BigInteger()
14793 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
14794 r.t = this.t
14795 r.s = ~this.s
14796 return r
8b095871 14797}
8b095871 14798
9987f0c1
IC
14799// (public) this << n
14800function bnShiftLeft(n) {
14801 var r = new BigInteger()
14802 if (n < 0) this.rShiftTo(-n, r)
14803 else this.lShiftTo(n, r)
14804 return r
8b095871 14805}
8b095871 14806
9987f0c1
IC
14807// (public) this >> n
14808function bnShiftRight(n) {
14809 var r = new BigInteger()
14810 if (n < 0) this.lShiftTo(-n, r)
14811 else this.rShiftTo(n, r)
14812 return r
8b095871
IC
14813}
14814
9987f0c1
IC
14815// return index of lowest 1-bit in x, x < 2^31
14816function lbit(x) {
14817 if (x == 0) return -1
14818 var r = 0
14819 if ((x & 0xffff) == 0) {
14820 x >>= 16
14821 r += 16
8b095871 14822 }
9987f0c1
IC
14823 if ((x & 0xff) == 0) {
14824 x >>= 8
14825 r += 8
8b095871 14826 }
9987f0c1
IC
14827 if ((x & 0xf) == 0) {
14828 x >>= 4
14829 r += 4
8b095871 14830 }
9987f0c1
IC
14831 if ((x & 3) == 0) {
14832 x >>= 2
14833 r += 2
14834 }
14835 if ((x & 1) == 0)++r
14836 return r
14837}
8b095871 14838
9987f0c1
IC
14839// (public) returns index of lowest 1-bit (or -1 if none)
14840function bnGetLowestSetBit() {
14841 for (var i = 0; i < this.t; ++i)
14842 if (this[i] != 0) return i * this.DB + lbit(this[i])
14843 if (this.s < 0) return this.t * this.DB
14844 return -1
14845}
8b095871 14846
9987f0c1
IC
14847// return number of 1 bits in x
14848function cbit(x) {
14849 var r = 0
14850 while (x != 0) {
14851 x &= x - 1
14852 ++r
8b095871 14853 }
9987f0c1
IC
14854 return r
14855}
8b095871 14856
9987f0c1
IC
14857// (public) return number of set bits
14858function bnBitCount() {
14859 var r = 0,
14860 x = this.s & this.DM
14861 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
14862 return r
14863}
8b095871 14864
9987f0c1
IC
14865// (public) true iff nth bit is set
14866function bnTestBit(n) {
14867 var j = Math.floor(n / this.DB)
14868 if (j >= this.t) return (this.s != 0)
14869 return ((this[j] & (1 << (n % this.DB))) != 0)
14870}
8b095871 14871
9987f0c1
IC
14872// (protected) this op (1<<n)
14873function bnpChangeBit(n, op) {
14874 var r = BigInteger.ONE.shiftLeft(n)
14875 this.bitwiseTo(r, op, r)
14876 return r
14877}
8b095871 14878
9987f0c1
IC
14879// (public) this | (1<<n)
14880function bnSetBit(n) {
14881 return this.changeBit(n, op_or)
14882}
8b095871 14883
9987f0c1
IC
14884// (public) this & ~(1<<n)
14885function bnClearBit(n) {
14886 return this.changeBit(n, op_andnot)
14887}
8b095871 14888
9987f0c1
IC
14889// (public) this ^ (1<<n)
14890function bnFlipBit(n) {
14891 return this.changeBit(n, op_xor)
14892}
8b095871 14893
9987f0c1
IC
14894// (protected) r = this + a
14895function bnpAddTo(a, r) {
14896 var self = this
8b095871 14897
9987f0c1
IC
14898 var i = 0,
14899 c = 0,
14900 m = Math.min(a.t, self.t)
14901 while (i < m) {
14902 c += self[i] + a[i]
14903 r[i++] = c & self.DM
14904 c >>= self.DB
14905 }
14906 if (a.t < self.t) {
14907 c += a.s
14908 while (i < self.t) {
14909 c += self[i]
14910 r[i++] = c & self.DM
14911 c >>= self.DB
14912 }
14913 c += self.s
14914 } else {
14915 c += self.s
14916 while (i < a.t) {
14917 c += a[i]
14918 r[i++] = c & self.DM
14919 c >>= self.DB
14920 }
14921 c += a.s
14922 }
14923 r.s = (c < 0) ? -1 : 0
14924 if (c > 0) r[i++] = c
14925 else if (c < -1) r[i++] = self.DV + c
14926 r.t = i
14927 r.clamp()
14928}
8b095871 14929
9987f0c1
IC
14930// (public) this + a
14931function bnAdd(a) {
14932 var r = new BigInteger()
14933 this.addTo(a, r)
14934 return r
14935}
8b095871 14936
9987f0c1
IC
14937// (public) this - a
14938function bnSubtract(a) {
14939 var r = new BigInteger()
14940 this.subTo(a, r)
14941 return r
14942}
8b095871 14943
9987f0c1
IC
14944// (public) this * a
14945function bnMultiply(a) {
14946 var r = new BigInteger()
14947 this.multiplyTo(a, r)
14948 return r
14949}
8b095871 14950
9987f0c1
IC
14951// (public) this^2
14952function bnSquare() {
14953 var r = new BigInteger()
14954 this.squareTo(r)
14955 return r
14956}
8b095871 14957
9987f0c1
IC
14958// (public) this / a
14959function bnDivide(a) {
14960 var r = new BigInteger()
14961 this.divRemTo(a, r, null)
14962 return r
14963}
8b095871 14964
9987f0c1
IC
14965// (public) this % a
14966function bnRemainder(a) {
14967 var r = new BigInteger()
14968 this.divRemTo(a, null, r)
14969 return r
14970}
8b095871 14971
9987f0c1
IC
14972// (public) [this/a,this%a]
14973function bnDivideAndRemainder(a) {
14974 var q = new BigInteger(),
14975 r = new BigInteger()
14976 this.divRemTo(a, q, r)
14977 return new Array(q, r)
14978}
8b095871 14979
9987f0c1
IC
14980// (protected) this *= n, this >= 0, 1 < n < DV
14981function bnpDMultiply(n) {
14982 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
14983 ++this.t
14984 this.clamp()
8b095871
IC
14985}
14986
9987f0c1
IC
14987// (protected) this += n << w words, this >= 0
14988function bnpDAddOffset(n, w) {
14989 if (n == 0) return
14990 while (this.t <= w) this[this.t++] = 0
14991 this[w] += n
14992 while (this[w] >= this.DV) {
14993 this[w] -= this.DV
14994 if (++w >= this.t) this[this.t++] = 0
14995 ++this[w]
8b095871 14996 }
9987f0c1 14997}
8b095871 14998
9987f0c1
IC
14999// A "null" reducer
15000function NullExp() {}
8b095871 15001
9987f0c1
IC
15002function nNop(x) {
15003 return x
15004}
8b095871 15005
9987f0c1
IC
15006function nMulTo(x, y, r) {
15007 x.multiplyTo(y, r)
15008}
8b095871 15009
9987f0c1
IC
15010function nSqrTo(x, r) {
15011 x.squareTo(r)
15012}
8b095871 15013
9987f0c1
IC
15014NullExp.prototype.convert = nNop
15015NullExp.prototype.revert = nNop
15016NullExp.prototype.mulTo = nMulTo
15017NullExp.prototype.sqrTo = nSqrTo
8b095871 15018
9987f0c1
IC
15019// (public) this^e
15020function bnPow(e) {
15021 return this.exp(e, new NullExp())
15022}
8b095871 15023
9987f0c1
IC
15024// (protected) r = lower n words of "this * a", a.t <= n
15025// "this" should be the larger one if appropriate.
15026function bnpMultiplyLowerTo(a, n, r) {
15027 var i = Math.min(this.t + a.t, n)
15028 r.s = 0; // assumes a,this >= 0
15029 r.t = i
15030 while (i > 0) r[--i] = 0
15031 var j
15032 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
15033 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
15034 r.clamp()
15035}
8b095871 15036
9987f0c1
IC
15037// (protected) r = "this * a" without lower n words, n > 0
15038// "this" should be the larger one if appropriate.
15039function bnpMultiplyUpperTo(a, n, r) {
15040 --n
15041 var i = r.t = this.t + a.t - n
15042 r.s = 0; // assumes a,this >= 0
15043 while (--i >= 0) r[i] = 0
15044 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
15045 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
15046 r.clamp()
15047 r.drShiftTo(1, r)
15048}
8b095871 15049
9987f0c1
IC
15050// Barrett modular reduction
15051function Barrett(m) {
15052 // setup Barrett
15053 this.r2 = new BigInteger()
15054 this.q3 = new BigInteger()
15055 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
15056 this.mu = this.r2.divide(m)
15057 this.m = m
15058}
8b095871 15059
9987f0c1
IC
15060function barrettConvert(x) {
15061 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
15062 else if (x.compareTo(this.m) < 0) return x
15063 else {
15064 var r = new BigInteger()
15065 x.copyTo(r)
15066 this.reduce(r)
15067 return r
8b095871 15068 }
9987f0c1 15069}
8b095871 15070
9987f0c1
IC
15071function barrettRevert(x) {
15072 return x
15073}
8b095871 15074
9987f0c1
IC
15075// x = x mod m (HAC 14.42)
15076function barrettReduce(x) {
15077 var self = this
15078 x.drShiftTo(self.m.t - 1, self.r2)
15079 if (x.t > self.m.t + 1) {
15080 x.t = self.m.t + 1
15081 x.clamp()
8b095871 15082 }
9987f0c1
IC
15083 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
15084 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
15085 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
15086 x.subTo(self.r2, x)
15087 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
15088}
8b095871 15089
9987f0c1
IC
15090// r = x^2 mod m; x != r
15091function barrettSqrTo(x, r) {
15092 x.squareTo(r)
15093 this.reduce(r)
15094}
8b095871 15095
9987f0c1
IC
15096// r = x*y mod m; x,y != r
15097function barrettMulTo(x, y, r) {
15098 x.multiplyTo(y, r)
15099 this.reduce(r)
15100}
8b095871 15101
9987f0c1
IC
15102Barrett.prototype.convert = barrettConvert
15103Barrett.prototype.revert = barrettRevert
15104Barrett.prototype.reduce = barrettReduce
15105Barrett.prototype.mulTo = barrettMulTo
15106Barrett.prototype.sqrTo = barrettSqrTo
8b095871 15107
9987f0c1
IC
15108// (public) this^e % m (HAC 14.85)
15109function bnModPow(e, m) {
15110 var i = e.bitLength(),
15111 k, r = nbv(1),
15112 z
15113 if (i <= 0) return r
15114 else if (i < 18) k = 1
15115 else if (i < 48) k = 3
15116 else if (i < 144) k = 4
15117 else if (i < 768) k = 5
15118 else k = 6
15119 if (i < 8)
15120 z = new Classic(m)
15121 else if (m.isEven())
15122 z = new Barrett(m)
15123 else
15124 z = new Montgomery(m)
8b095871 15125
9987f0c1
IC
15126 // precomputation
15127 var g = new Array(),
15128 n = 3,
15129 k1 = k - 1,
15130 km = (1 << k) - 1
15131 g[1] = z.convert(this)
15132 if (k > 1) {
15133 var g2 = new BigInteger()
15134 z.sqrTo(g[1], g2)
15135 while (n <= km) {
15136 g[n] = new BigInteger()
15137 z.mulTo(g2, g[n - 2], g[n])
15138 n += 2
8b095871 15139 }
9987f0c1 15140 }
8b095871 15141
9987f0c1
IC
15142 var j = e.t - 1,
15143 w, is1 = true,
15144 r2 = new BigInteger(),
15145 t
15146 i = nbits(e[j]) - 1
15147 while (j >= 0) {
15148 if (i >= k1) w = (e[j] >> (i - k1)) & km
15149 else {
15150 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
15151 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8b095871
IC
15152 }
15153
9987f0c1
IC
15154 n = k
15155 while ((w & 1) == 0) {
15156 w >>= 1
15157 --n
15158 }
15159 if ((i -= n) < 0) {
15160 i += this.DB
15161 --j
15162 }
15163 if (is1) { // ret == 1, don't bother squaring or multiplying it
15164 g[w].copyTo(r)
15165 is1 = false
15166 } else {
15167 while (n > 1) {
15168 z.sqrTo(r, r2)
15169 z.sqrTo(r2, r)
15170 n -= 2
15171 }
15172 if (n > 0) z.sqrTo(r, r2)
15173 else {
15174 t = r
15175 r = r2
15176 r2 = t
15177 }
15178 z.mulTo(r2, g[w], r)
8b095871 15179 }
8b095871 15180
9987f0c1
IC
15181 while (j >= 0 && (e[j] & (1 << i)) == 0) {
15182 z.sqrTo(r, r2)
15183 t = r
15184 r = r2
15185 r2 = t
15186 if (--i < 0) {
15187 i = this.DB - 1
15188 --j
15189 }
15190 }
15191 }
15192 return z.revert(r)
8b095871
IC
15193}
15194
9987f0c1
IC
15195// (public) gcd(this,a) (HAC 14.54)
15196function bnGCD(a) {
15197 var x = (this.s < 0) ? this.negate() : this.clone()
15198 var y = (a.s < 0) ? a.negate() : a.clone()
15199 if (x.compareTo(y) < 0) {
15200 var t = x
15201 x = y
15202 y = t
15203 }
15204 var i = x.getLowestSetBit(),
15205 g = y.getLowestSetBit()
15206 if (g < 0) return x
15207 if (i < g) g = i
15208 if (g > 0) {
15209 x.rShiftTo(g, x)
15210 y.rShiftTo(g, y)
15211 }
15212 while (x.signum() > 0) {
15213 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
15214 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
15215 if (x.compareTo(y) >= 0) {
15216 x.subTo(y, x)
15217 x.rShiftTo(1, x)
15218 } else {
15219 y.subTo(x, y)
15220 y.rShiftTo(1, y)
15221 }
15222 }
15223 if (g > 0) y.lShiftTo(g, y)
15224 return y
8b095871
IC
15225}
15226
9987f0c1
IC
15227// (protected) this % n, n < 2^26
15228function bnpModInt(n) {
15229 if (n <= 0) return 0
15230 var d = this.DV % n,
15231 r = (this.s < 0) ? n - 1 : 0
15232 if (this.t > 0)
15233 if (d == 0) r = this[0] % n
15234 else
15235 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
15236 return r
8b095871 15237}
8b095871 15238
9987f0c1
IC
15239// (public) 1/this % m (HAC 14.61)
15240function bnModInverse(m) {
15241 var ac = m.isEven()
15242 if (this.signum() === 0) throw new Error('division by zero')
15243 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
15244 var u = m.clone(),
15245 v = this.clone()
15246 var a = nbv(1),
15247 b = nbv(0),
15248 c = nbv(0),
15249 d = nbv(1)
15250 while (u.signum() != 0) {
15251 while (u.isEven()) {
15252 u.rShiftTo(1, u)
15253 if (ac) {
15254 if (!a.isEven() || !b.isEven()) {
15255 a.addTo(this, a)
15256 b.subTo(m, b)
15257 }
15258 a.rShiftTo(1, a)
15259 } else if (!b.isEven()) b.subTo(m, b)
15260 b.rShiftTo(1, b)
8b095871 15261 }
9987f0c1
IC
15262 while (v.isEven()) {
15263 v.rShiftTo(1, v)
15264 if (ac) {
15265 if (!c.isEven() || !d.isEven()) {
15266 c.addTo(this, c)
15267 d.subTo(m, d)
8b095871 15268 }
9987f0c1
IC
15269 c.rShiftTo(1, c)
15270 } else if (!d.isEven()) d.subTo(m, d)
15271 d.rShiftTo(1, d)
8b095871 15272 }
9987f0c1
IC
15273 if (u.compareTo(v) >= 0) {
15274 u.subTo(v, u)
15275 if (ac) a.subTo(c, a)
15276 b.subTo(d, b)
8b095871 15277 } else {
9987f0c1
IC
15278 v.subTo(u, v)
15279 if (ac) c.subTo(a, c)
15280 d.subTo(b, d)
8b095871
IC
15281 }
15282 }
9987f0c1
IC
15283 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
15284 while (d.compareTo(m) >= 0) d.subTo(m, d)
15285 while (d.signum() < 0) d.addTo(m, d)
15286 return d
15287}
8b095871 15288
9987f0c1
IC
15289var lowprimes = [
15290 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
15291 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
15292 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
15293 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
15294 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
15295 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
15296 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
15297 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
15298 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
15299 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
15300 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
15301]
8b095871 15302
9987f0c1 15303var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8b095871 15304
9987f0c1
IC
15305// (public) test primality with certainty >= 1-.5^t
15306function bnIsProbablePrime(t) {
15307 var i, x = this.abs()
15308 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
15309 for (i = 0; i < lowprimes.length; ++i)
15310 if (x[0] == lowprimes[i]) return true
15311 return false
8b095871 15312 }
9987f0c1
IC
15313 if (x.isEven()) return false
15314 i = 1
15315 while (i < lowprimes.length) {
15316 var m = lowprimes[i],
15317 j = i + 1
15318 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
15319 m = x.modInt(m)
15320 while (i < j) if (m % lowprimes[i++] == 0) return false
15321 }
15322 return x.millerRabin(t)
15323}
8b095871 15324
9987f0c1
IC
15325// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
15326function bnpMillerRabin(t) {
15327 var n1 = this.subtract(BigInteger.ONE)
15328 var k = n1.getLowestSetBit()
15329 if (k <= 0) return false
15330 var r = n1.shiftRight(k)
15331 t = (t + 1) >> 1
15332 if (t > lowprimes.length) t = lowprimes.length
15333 var a = new BigInteger(null)
15334 var j, bases = []
15335 for (var i = 0; i < t; ++i) {
15336 for (;;) {
15337 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
15338 if (bases.indexOf(j) == -1) break
15339 }
15340 bases.push(j)
15341 a.fromInt(j)
15342 var y = a.modPow(r, this)
15343 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
15344 var j = 1
15345 while (j++ < k && y.compareTo(n1) != 0) {
15346 y = y.modPowInt(2, this)
15347 if (y.compareTo(BigInteger.ONE) == 0) return false
8b095871 15348 }
9987f0c1 15349 if (y.compareTo(n1) != 0) return false
8b095871 15350 }
8b095871 15351 }
9987f0c1
IC
15352 return true
15353}
8b095871 15354
9987f0c1
IC
15355// protected
15356proto.chunkSize = bnpChunkSize
15357proto.toRadix = bnpToRadix
15358proto.fromRadix = bnpFromRadix
15359proto.fromNumber = bnpFromNumber
15360proto.bitwiseTo = bnpBitwiseTo
15361proto.changeBit = bnpChangeBit
15362proto.addTo = bnpAddTo
15363proto.dMultiply = bnpDMultiply
15364proto.dAddOffset = bnpDAddOffset
15365proto.multiplyLowerTo = bnpMultiplyLowerTo
15366proto.multiplyUpperTo = bnpMultiplyUpperTo
15367proto.modInt = bnpModInt
15368proto.millerRabin = bnpMillerRabin
8b095871 15369
9987f0c1
IC
15370// public
15371proto.clone = bnClone
15372proto.intValue = bnIntValue
15373proto.byteValue = bnByteValue
15374proto.shortValue = bnShortValue
15375proto.signum = bnSigNum
15376proto.toByteArray = bnToByteArray
15377proto.equals = bnEquals
15378proto.min = bnMin
15379proto.max = bnMax
15380proto.and = bnAnd
15381proto.or = bnOr
15382proto.xor = bnXor
15383proto.andNot = bnAndNot
15384proto.not = bnNot
15385proto.shiftLeft = bnShiftLeft
15386proto.shiftRight = bnShiftRight
15387proto.getLowestSetBit = bnGetLowestSetBit
15388proto.bitCount = bnBitCount
15389proto.testBit = bnTestBit
15390proto.setBit = bnSetBit
15391proto.clearBit = bnClearBit
15392proto.flipBit = bnFlipBit
15393proto.add = bnAdd
15394proto.subtract = bnSubtract
15395proto.multiply = bnMultiply
15396proto.divide = bnDivide
15397proto.remainder = bnRemainder
15398proto.divideAndRemainder = bnDivideAndRemainder
15399proto.modPow = bnModPow
15400proto.modInverse = bnModInverse
15401proto.pow = bnPow
15402proto.gcd = bnGCD
15403proto.isProbablePrime = bnIsProbablePrime
8b095871 15404
9987f0c1
IC
15405// JSBN-specific extension
15406proto.square = bnSquare
15407
15408// constants
15409BigInteger.ZERO = nbv(0)
15410BigInteger.ONE = nbv(1)
15411BigInteger.valueOf = nbv
8b095871 15412
9987f0c1
IC
15413module.exports = BigInteger
15414
15415},{"../package.json":38}],36:[function(require,module,exports){
15416(function (Buffer){
15417// FIXME: Kind of a weird way to throw exceptions, consider removing
15418var assert = require('assert')
15419var BigInteger = require('./bigi')
8b095871
IC
15420
15421/**
9987f0c1 15422 * Turns a byte array into a big integer.
8b095871 15423 *
9987f0c1
IC
15424 * This function will interpret a byte array as a big integer in big
15425 * endian notation.
8b095871 15426 */
9987f0c1
IC
15427BigInteger.fromByteArrayUnsigned = function(byteArray) {
15428 // BigInteger expects a DER integer conformant byte array
15429 if (byteArray[0] & 0x80) {
15430 return new BigInteger([0].concat(byteArray))
8b095871 15431 }
8b095871 15432
9987f0c1
IC
15433 return new BigInteger(byteArray)
15434}
8b095871 15435
9987f0c1
IC
15436/**
15437 * Returns a byte array representation of the big integer.
15438 *
15439 * This returns the absolute of the contained value in big endian
15440 * form. A value of zero results in an empty array.
15441 */
15442BigInteger.prototype.toByteArrayUnsigned = function() {
15443 var byteArray = this.toByteArray()
15444 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
15445}
8b095871 15446
9987f0c1
IC
15447BigInteger.fromDERInteger = function(byteArray) {
15448 return new BigInteger(byteArray)
15449}
8b095871 15450
9987f0c1
IC
15451/*
15452 * Converts BigInteger to a DER integer representation.
15453 *
15454 * The format for this value uses the most significant bit as a sign
15455 * bit. If the most significant bit is already set and the integer is
15456 * positive, a 0x00 is prepended.
15457 *
15458 * Examples:
15459 *
15460 * 0 => 0x00
15461 * 1 => 0x01
15462 * -1 => 0xff
15463 * 127 => 0x7f
15464 * -127 => 0x81
15465 * 128 => 0x0080
15466 * -128 => 0x80
15467 * 255 => 0x00ff
15468 * -255 => 0xff01
15469 * 16300 => 0x3fac
15470 * -16300 => 0xc054
15471 * 62300 => 0x00f35c
15472 * -62300 => 0xff0ca4
15473*/
15474BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8b095871 15475
9987f0c1
IC
15476BigInteger.fromBuffer = function(buffer) {
15477 // BigInteger expects a DER integer conformant byte array
15478 if (buffer[0] & 0x80) {
15479 var byteArray = Array.prototype.slice.call(buffer)
8b095871 15480
9987f0c1 15481 return new BigInteger([0].concat(byteArray))
8b095871 15482 }
9987f0c1
IC
15483
15484 return new BigInteger(buffer)
8b095871
IC
15485}
15486
9987f0c1
IC
15487BigInteger.fromHex = function(hex) {
15488 if (hex === '') return BigInteger.ZERO
8b095871 15489
9987f0c1
IC
15490 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
15491 assert.equal(hex.length % 2, 0, 'Incomplete hex')
15492 return new BigInteger(hex, 16)
8b095871
IC
15493}
15494
9987f0c1
IC
15495BigInteger.prototype.toBuffer = function(size) {
15496 var byteArray = this.toByteArrayUnsigned()
15497 var zeros = []
8b095871 15498
9987f0c1
IC
15499 var padding = size - byteArray.length
15500 while (zeros.length < padding) zeros.push(0)
8b095871 15501
9987f0c1
IC
15502 return new Buffer(zeros.concat(byteArray))
15503}
8b095871 15504
9987f0c1
IC
15505BigInteger.prototype.toHex = function(size) {
15506 return this.toBuffer(size).toString('hex')
8b095871
IC
15507}
15508
9987f0c1
IC
15509}).call(this,require("buffer").Buffer)
15510},{"./bigi":35,"assert":1,"buffer":4}],37:[function(require,module,exports){
15511var BigInteger = require('./bigi')
8b095871 15512
9987f0c1
IC
15513//addons
15514require('./convert')
15515
15516module.exports = BigInteger
15517},{"./bigi":35,"./convert":36}],38:[function(require,module,exports){
15518module.exports={
15519 "_args": [
15520 [
15521 "bigi",
15522 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
15523 ]
15524 ],
15525 "_from": "bigi@latest",
15526 "_id": "bigi@1.4.2",
15527 "_inCache": true,
15528 "_installable": true,
15529 "_location": "/bigi",
15530 "_nodeVersion": "6.1.0",
15531 "_npmOperationalInternal": {
15532 "host": "packages-12-west.internal.npmjs.com",
15533 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
15534 },
15535 "_npmUser": {
15536 "email": "jprichardson@gmail.com",
15537 "name": "jprichardson"
15538 },
15539 "_npmVersion": "3.8.6",
15540 "_phantomChildren": {},
15541 "_requested": {
15542 "name": "bigi",
15543 "raw": "bigi",
15544 "rawSpec": "",
15545 "scope": null,
15546 "spec": "latest",
15547 "type": "tag"
15548 },
15549 "_requiredBy": [
15550 "#USER",
15551 "/bitcoinjs-lib",
15552 "/ecurve"
15553 ],
15554 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
15555 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15556 "_shrinkwrap": null,
15557 "_spec": "bigi",
15558 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
15559 "bugs": {
15560 "url": "https://github.com/cryptocoinjs/bigi/issues"
15561 },
15562 "dependencies": {},
15563 "description": "Big integers.",
15564 "devDependencies": {
15565 "coveralls": "^2.11.2",
15566 "istanbul": "^0.3.5",
15567 "jshint": "^2.5.1",
15568 "mocha": "^2.1.0",
15569 "mochify": "^2.1.0"
15570 },
15571 "directories": {},
15572 "dist": {
15573 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15574 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
15575 },
15576 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
15577 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
15578 "keywords": [
15579 "cryptography",
15580 "math",
15581 "bitcoin",
15582 "arbitrary",
15583 "precision",
15584 "arithmetic",
15585 "big",
15586 "integer",
15587 "int",
15588 "number",
15589 "biginteger",
15590 "bigint",
15591 "bignumber",
15592 "decimal",
15593 "float"
15594 ],
15595 "main": "./lib/index.js",
15596 "maintainers": [
15597 {
15598 "email": "boydb@midnightdesign.ws",
15599 "name": "midnightlightning"
15600 },
15601 {
15602 "email": "sidazhang89@gmail.com",
15603 "name": "sidazhang"
15604 },
15605 {
15606 "email": "npm@shesek.info",
15607 "name": "nadav"
15608 },
15609 {
15610 "email": "jprichardson@gmail.com",
15611 "name": "jprichardson"
8b095871 15612 }
9987f0c1
IC
15613 ],
15614 "name": "bigi",
15615 "optionalDependencies": {},
15616 "readme": "ERROR: No README data found!",
15617 "repository": {
15618 "type": "git",
15619 "url": "git+https://github.com/cryptocoinjs/bigi.git"
15620 },
15621 "scripts": {
15622 "browser-test": "mochify --wd -R spec",
15623 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
15624 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
15625 "jshint": "jshint --config jshint.json lib/*.js ; true",
15626 "test": "_mocha -- test/*.js",
15627 "unit": "mocha"
15628 },
15629 "testling": {
15630 "browsers": [
15631 "ie/9..latest",
15632 "firefox/latest",
15633 "chrome/latest",
15634 "safari/6.0..latest",
15635 "iphone/6.0..latest",
15636 "android-browser/4.2..latest"
15637 ],
15638 "files": "test/*.js",
15639 "harness": "mocha"
15640 },
15641 "version": "1.4.2"
15642}
8b095871 15643
9987f0c1
IC
15644},{}],39:[function(require,module,exports){
15645// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
15646// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15647// NOTE: SIGHASH byte ignored AND restricted, truncate before use
8b095871 15648
9987f0c1 15649var Buffer = require('safe-buffer').Buffer
8b095871 15650
9987f0c1
IC
15651function check (buffer) {
15652 if (buffer.length < 8) return false
15653 if (buffer.length > 72) return false
15654 if (buffer[0] !== 0x30) return false
15655 if (buffer[1] !== buffer.length - 2) return false
15656 if (buffer[2] !== 0x02) return false
8b095871 15657
9987f0c1
IC
15658 var lenR = buffer[3]
15659 if (lenR === 0) return false
15660 if (5 + lenR >= buffer.length) return false
15661 if (buffer[4 + lenR] !== 0x02) return false
8b095871 15662
9987f0c1
IC
15663 var lenS = buffer[5 + lenR]
15664 if (lenS === 0) return false
15665 if ((6 + lenR + lenS) !== buffer.length) return false
8b095871 15666
9987f0c1
IC
15667 if (buffer[4] & 0x80) return false
15668 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
8b095871 15669
9987f0c1
IC
15670 if (buffer[lenR + 6] & 0x80) return false
15671 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
15672 return true
15673}
8b095871 15674
9987f0c1
IC
15675function decode (buffer) {
15676 if (buffer.length < 8) throw new Error('DER sequence length is too short')
15677 if (buffer.length > 72) throw new Error('DER sequence length is too long')
15678 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
15679 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
15680 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
8b095871 15681
9987f0c1
IC
15682 var lenR = buffer[3]
15683 if (lenR === 0) throw new Error('R length is zero')
15684 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
15685 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
8b095871 15686
9987f0c1
IC
15687 var lenS = buffer[5 + lenR]
15688 if (lenS === 0) throw new Error('S length is zero')
15689 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
8b095871 15690
9987f0c1
IC
15691 if (buffer[4] & 0x80) throw new Error('R value is negative')
15692 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
8b095871 15693
9987f0c1
IC
15694 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
15695 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
8b095871 15696
9987f0c1
IC
15697 // non-BIP66 - extract R, S values
15698 return {
15699 r: buffer.slice(4, 4 + lenR),
15700 s: buffer.slice(6 + lenR)
8b095871 15701 }
9987f0c1 15702}
8b095871 15703
9987f0c1
IC
15704/*
15705 * Expects r and s to be positive DER integers.
15706 *
15707 * The DER format uses the most significant bit as a sign bit (& 0x80).
15708 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
15709 *
15710 * Examples:
15711 *
15712 * 0 => 0x00
15713 * 1 => 0x01
15714 * -1 => 0xff
15715 * 127 => 0x7f
15716 * -127 => 0x81
15717 * 128 => 0x0080
15718 * -128 => 0x80
15719 * 255 => 0x00ff
15720 * -255 => 0xff01
15721 * 16300 => 0x3fac
15722 * -16300 => 0xc054
15723 * 62300 => 0x00f35c
15724 * -62300 => 0xff0ca4
15725*/
15726function encode (r, s) {
15727 var lenR = r.length
15728 var lenS = s.length
15729 if (lenR === 0) throw new Error('R length is zero')
15730 if (lenS === 0) throw new Error('S length is zero')
15731 if (lenR > 33) throw new Error('R length is too long')
15732 if (lenS > 33) throw new Error('S length is too long')
15733 if (r[0] & 0x80) throw new Error('R value is negative')
15734 if (s[0] & 0x80) throw new Error('S value is negative')
15735 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
15736 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
8b095871 15737
9987f0c1 15738 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
8b095871 15739
9987f0c1
IC
15740 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15741 signature[0] = 0x30
15742 signature[1] = signature.length - 2
15743 signature[2] = 0x02
15744 signature[3] = r.length
15745 r.copy(signature, 4)
15746 signature[4 + lenR] = 0x02
15747 signature[5 + lenR] = s.length
15748 s.copy(signature, 6 + lenR)
8b095871 15749
9987f0c1 15750 return signature
8b095871
IC
15751}
15752
9987f0c1
IC
15753module.exports = {
15754 check: check,
15755 decode: decode,
15756 encode: encode
8b095871
IC
15757}
15758
9987f0c1
IC
15759},{"safe-buffer":98}],40:[function(require,module,exports){
15760module.exports={
15761 "OP_FALSE": 0,
15762 "OP_0": 0,
15763 "OP_PUSHDATA1": 76,
15764 "OP_PUSHDATA2": 77,
15765 "OP_PUSHDATA4": 78,
15766 "OP_1NEGATE": 79,
15767 "OP_RESERVED": 80,
15768 "OP_1": 81,
15769 "OP_TRUE": 81,
15770 "OP_2": 82,
15771 "OP_3": 83,
15772 "OP_4": 84,
15773 "OP_5": 85,
15774 "OP_6": 86,
15775 "OP_7": 87,
15776 "OP_8": 88,
15777 "OP_9": 89,
15778 "OP_10": 90,
15779 "OP_11": 91,
15780 "OP_12": 92,
15781 "OP_13": 93,
15782 "OP_14": 94,
15783 "OP_15": 95,
15784 "OP_16": 96,
15785
15786 "OP_NOP": 97,
15787 "OP_VER": 98,
15788 "OP_IF": 99,
15789 "OP_NOTIF": 100,
15790 "OP_VERIF": 101,
15791 "OP_VERNOTIF": 102,
15792 "OP_ELSE": 103,
15793 "OP_ENDIF": 104,
15794 "OP_VERIFY": 105,
15795 "OP_RETURN": 106,
15796
15797 "OP_TOALTSTACK": 107,
15798 "OP_FROMALTSTACK": 108,
15799 "OP_2DROP": 109,
15800 "OP_2DUP": 110,
15801 "OP_3DUP": 111,
15802 "OP_2OVER": 112,
15803 "OP_2ROT": 113,
15804 "OP_2SWAP": 114,
15805 "OP_IFDUP": 115,
15806 "OP_DEPTH": 116,
15807 "OP_DROP": 117,
15808 "OP_DUP": 118,
15809 "OP_NIP": 119,
15810 "OP_OVER": 120,
15811 "OP_PICK": 121,
15812 "OP_ROLL": 122,
15813 "OP_ROT": 123,
15814 "OP_SWAP": 124,
15815 "OP_TUCK": 125,
15816
15817 "OP_CAT": 126,
15818 "OP_SUBSTR": 127,
15819 "OP_LEFT": 128,
15820 "OP_RIGHT": 129,
15821 "OP_SIZE": 130,
15822
15823 "OP_INVERT": 131,
15824 "OP_AND": 132,
15825 "OP_OR": 133,
15826 "OP_XOR": 134,
15827 "OP_EQUAL": 135,
15828 "OP_EQUALVERIFY": 136,
15829 "OP_RESERVED1": 137,
15830 "OP_RESERVED2": 138,
15831
15832 "OP_1ADD": 139,
15833 "OP_1SUB": 140,
15834 "OP_2MUL": 141,
15835 "OP_2DIV": 142,
15836 "OP_NEGATE": 143,
15837 "OP_ABS": 144,
15838 "OP_NOT": 145,
15839 "OP_0NOTEQUAL": 146,
15840 "OP_ADD": 147,
15841 "OP_SUB": 148,
15842 "OP_MUL": 149,
15843 "OP_DIV": 150,
15844 "OP_MOD": 151,
15845 "OP_LSHIFT": 152,
15846 "OP_RSHIFT": 153,
15847
15848 "OP_BOOLAND": 154,
15849 "OP_BOOLOR": 155,
15850 "OP_NUMEQUAL": 156,
15851 "OP_NUMEQUALVERIFY": 157,
15852 "OP_NUMNOTEQUAL": 158,
15853 "OP_LESSTHAN": 159,
15854 "OP_GREATERTHAN": 160,
15855 "OP_LESSTHANOREQUAL": 161,
15856 "OP_GREATERTHANOREQUAL": 162,
15857 "OP_MIN": 163,
15858 "OP_MAX": 164,
15859
15860 "OP_WITHIN": 165,
15861
15862 "OP_RIPEMD160": 166,
15863 "OP_SHA1": 167,
15864 "OP_SHA256": 168,
15865 "OP_HASH160": 169,
15866 "OP_HASH256": 170,
15867 "OP_CODESEPARATOR": 171,
15868 "OP_CHECKSIG": 172,
15869 "OP_CHECKSIGVERIFY": 173,
15870 "OP_CHECKMULTISIG": 174,
15871 "OP_CHECKMULTISIGVERIFY": 175,
15872
15873 "OP_NOP1": 176,
15874 "OP_NOP2": 177,
15875 "OP_CHECKLOCKTIMEVERIFY": 177,
15876
15877 "OP_NOP3": 178,
15878 "OP_NOP4": 179,
15879 "OP_NOP5": 180,
15880 "OP_NOP6": 181,
15881 "OP_NOP7": 182,
15882 "OP_NOP8": 183,
15883 "OP_NOP9": 184,
15884 "OP_NOP10": 185,
15885
15886 "OP_PUBKEYHASH": 253,
15887 "OP_PUBKEY": 254,
15888 "OP_INVALIDOPCODE": 255
15889}
15890
15891},{}],41:[function(require,module,exports){
15892var OPS = require('./index.json')
15893
15894var map = {}
15895for (var op in OPS) {
15896 var code = OPS[op]
15897 map[code] = op
15898}
15899
15900module.exports = map
15901
15902},{"./index.json":40}],42:[function(require,module,exports){
15903var Buffer = require('safe-buffer').Buffer
15904var bs58check = require('bs58check')
15905var bscript = require('./script')
15906var networks = require('./networks')
15907var typeforce = require('typeforce')
15908var types = require('./types')
8b095871 15909
9987f0c1
IC
15910function fromBase58Check (address) {
15911 var payload = bs58check.decode(address)
15912 if (payload.length < 21) throw new TypeError(address + ' is too short')
15913 if (payload.length > 21) throw new TypeError(address + ' is too long')
8b095871 15914
9987f0c1
IC
15915 var version = payload.readUInt8(0)
15916 var hash = payload.slice(1)
8b095871 15917
9987f0c1 15918 return { hash: hash, version: version }
8b095871
IC
15919}
15920
9987f0c1
IC
15921function toBase58Check (hash, version) {
15922 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
8b095871 15923
9987f0c1
IC
15924 var payload = Buffer.allocUnsafe(21)
15925 payload.writeUInt8(version, 0)
15926 hash.copy(payload, 1)
8b095871 15927
9987f0c1 15928 return bs58check.encode(payload)
8b095871
IC
15929}
15930
9987f0c1
IC
15931function fromOutputScript (outputScript, network) {
15932 network = network || networks.bitcoin
8b095871 15933
9987f0c1
IC
15934 if (bscript.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
15935 if (bscript.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
8b095871 15936
9987f0c1 15937 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
8b095871
IC
15938}
15939
9987f0c1
IC
15940function toOutputScript (address, network) {
15941 network = network || networks.bitcoin
8b095871 15942
9987f0c1
IC
15943 var decode = fromBase58Check(address)
15944 if (decode.version === network.pubKeyHash) return bscript.pubKeyHash.output.encode(decode.hash)
15945 if (decode.version === network.scriptHash) return bscript.scriptHash.output.encode(decode.hash)
8b095871 15946
9987f0c1 15947 throw new Error(address + ' has no matching Script')
8b095871 15948}
8b095871 15949
9987f0c1
IC
15950module.exports = {
15951 fromBase58Check: fromBase58Check,
15952 fromOutputScript: fromOutputScript,
15953 toBase58Check: toBase58Check,
15954 toOutputScript: toOutputScript
8b095871 15955}
8b095871 15956
9987f0c1
IC
15957},{"./networks":51,"./script":52,"./types":78,"bs58check":80,"safe-buffer":98,"typeforce":109}],43:[function(require,module,exports){
15958var Buffer = require('safe-buffer').Buffer
15959var bcrypto = require('./crypto')
15960var fastMerkleRoot = require('merkle-lib/fastRoot')
15961var typeforce = require('typeforce')
15962var types = require('./types')
15963var varuint = require('varuint-bitcoin')
8b095871 15964
9987f0c1 15965var Transaction = require('./transaction')
8b095871 15966
9987f0c1
IC
15967function Block () {
15968 this.version = 1
15969 this.prevHash = null
15970 this.merkleRoot = null
15971 this.timestamp = 0
15972 this.bits = 0
15973 this.nonce = 0
8b095871 15974}
8b095871 15975
9987f0c1
IC
15976Block.fromBuffer = function (buffer) {
15977 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
8b095871 15978
9987f0c1
IC
15979 var offset = 0
15980 function readSlice (n) {
15981 offset += n
15982 return buffer.slice(offset - n, offset)
15983 }
8b095871 15984
9987f0c1
IC
15985 function readUInt32 () {
15986 var i = buffer.readUInt32LE(offset)
15987 offset += 4
15988 return i
15989 }
8b095871 15990
9987f0c1
IC
15991 function readInt32 () {
15992 var i = buffer.readInt32LE(offset)
15993 offset += 4
15994 return i
15995 }
8b095871 15996
9987f0c1
IC
15997 var block = new Block()
15998 block.version = readInt32()
15999 block.prevHash = readSlice(32)
16000 block.merkleRoot = readSlice(32)
16001 block.timestamp = readUInt32()
16002 block.bits = readUInt32()
16003 block.nonce = readUInt32()
8b095871 16004
9987f0c1 16005 if (buffer.length === 80) return block
8b095871 16006
9987f0c1
IC
16007 function readVarInt () {
16008 var vi = varuint.decode(buffer, offset)
16009 offset += varuint.decode.bytes
16010 return vi
16011 }
8b095871 16012
9987f0c1
IC
16013 function readTransaction () {
16014 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
16015 offset += tx.byteLength()
16016 return tx
16017 }
8b095871 16018
9987f0c1
IC
16019 var nTransactions = readVarInt()
16020 block.transactions = []
8b095871 16021
9987f0c1
IC
16022 for (var i = 0; i < nTransactions; ++i) {
16023 var tx = readTransaction()
16024 block.transactions.push(tx)
16025 }
8b095871 16026
9987f0c1 16027 return block
8b095871
IC
16028}
16029
9987f0c1
IC
16030Block.prototype.byteLength = function (headersOnly) {
16031 if (headersOnly || !this.transactions) return 80
8b095871 16032
9987f0c1
IC
16033 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
16034 return a + x.byteLength()
16035 }, 0)
8b095871
IC
16036}
16037
9987f0c1
IC
16038Block.fromHex = function (hex) {
16039 return Block.fromBuffer(Buffer.from(hex, 'hex'))
16040}
8b095871 16041
9987f0c1
IC
16042Block.prototype.getHash = function () {
16043 return bcrypto.hash256(this.toBuffer(true))
16044}
8b095871 16045
9987f0c1
IC
16046Block.prototype.getId = function () {
16047 return this.getHash().reverse().toString('hex')
8b095871
IC
16048}
16049
9987f0c1
IC
16050Block.prototype.getUTCDate = function () {
16051 var date = new Date(0) // epoch
16052 date.setUTCSeconds(this.timestamp)
8b095871 16053
9987f0c1 16054 return date
8b095871 16055}
8b095871 16056
9987f0c1
IC
16057// TODO: buffer, offset compatibility
16058Block.prototype.toBuffer = function (headersOnly) {
16059 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
16060
16061 var offset = 0
16062 function writeSlice (slice) {
16063 slice.copy(buffer, offset)
16064 offset += slice.length
16065 }
8b095871 16066
9987f0c1
IC
16067 function writeInt32 (i) {
16068 buffer.writeInt32LE(i, offset)
16069 offset += 4
16070 }
16071 function writeUInt32 (i) {
16072 buffer.writeUInt32LE(i, offset)
16073 offset += 4
16074 }
8b095871 16075
9987f0c1
IC
16076 writeInt32(this.version)
16077 writeSlice(this.prevHash)
16078 writeSlice(this.merkleRoot)
16079 writeUInt32(this.timestamp)
16080 writeUInt32(this.bits)
16081 writeUInt32(this.nonce)
8b095871 16082
9987f0c1 16083 if (headersOnly || !this.transactions) return buffer
8b095871 16084
9987f0c1
IC
16085 varuint.encode(this.transactions.length, buffer, offset)
16086 offset += varuint.encode.bytes
8b095871 16087
9987f0c1
IC
16088 this.transactions.forEach(function (tx) {
16089 var txSize = tx.byteLength() // TODO: extract from toBuffer?
16090 tx.toBuffer(buffer, offset)
16091 offset += txSize
16092 })
8b095871 16093
9987f0c1
IC
16094 return buffer
16095}
8b095871 16096
9987f0c1
IC
16097Block.prototype.toHex = function (headersOnly) {
16098 return this.toBuffer(headersOnly).toString('hex')
16099}
8b095871 16100
9987f0c1
IC
16101Block.calculateTarget = function (bits) {
16102 var exponent = ((bits & 0xff000000) >> 24) - 3
16103 var mantissa = bits & 0x007fffff
16104 var target = Buffer.alloc(32, 0)
16105 target.writeUInt32BE(mantissa, 28 - exponent)
16106 return target
8b095871
IC
16107}
16108
9987f0c1
IC
16109Block.calculateMerkleRoot = function (transactions) {
16110 typeforce([{ getHash: types.Function }], transactions)
16111 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
8b095871 16112
9987f0c1
IC
16113 var hashes = transactions.map(function (transaction) {
16114 return transaction.getHash()
16115 })
8b095871 16116
9987f0c1
IC
16117 return fastMerkleRoot(hashes, bcrypto.hash256)
16118}
8b095871 16119
9987f0c1
IC
16120Block.prototype.checkMerkleRoot = function () {
16121 if (!this.transactions) return false
8b095871 16122
9987f0c1
IC
16123 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
16124 return this.merkleRoot.compare(actualMerkleRoot) === 0
16125}
8b095871 16126
9987f0c1
IC
16127Block.prototype.checkProofOfWork = function () {
16128 var hash = this.getHash().reverse()
16129 var target = Block.calculateTarget(this.bits)
8b095871 16130
9987f0c1
IC
16131 return hash.compare(target) <= 0
16132}
8b095871 16133
9987f0c1 16134module.exports = Block
8b095871 16135
9987f0c1
IC
16136},{"./crypto":45,"./transaction":76,"./types":78,"merkle-lib/fastRoot":94,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],44:[function(require,module,exports){
16137var pushdata = require('pushdata-bitcoin')
16138var varuint = require('varuint-bitcoin')
8b095871 16139
9987f0c1
IC
16140// https://github.com/feross/buffer/blob/master/index.js#L1127
16141function verifuint (value, max) {
16142 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
16143 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
16144 if (value > max) throw new Error('RangeError: value out of range')
16145 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
8b095871
IC
16146}
16147
9987f0c1
IC
16148function readUInt64LE (buffer, offset) {
16149 var a = buffer.readUInt32LE(offset)
16150 var b = buffer.readUInt32LE(offset + 4)
16151 b *= 0x100000000
8b095871 16152
9987f0c1 16153 verifuint(b + a, 0x001fffffffffffff)
8b095871 16154
9987f0c1 16155 return b + a
8b095871
IC
16156}
16157
9987f0c1
IC
16158function writeUInt64LE (buffer, value, offset) {
16159 verifuint(value, 0x001fffffffffffff)
8b095871 16160
9987f0c1
IC
16161 buffer.writeInt32LE(value & -1, offset)
16162 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16163 return offset + 8
8b095871
IC
16164}
16165
9987f0c1
IC
16166// TODO: remove in 4.0.0?
16167function readVarInt (buffer, offset) {
16168 var result = varuint.decode(buffer, offset)
8b095871 16169
9987f0c1
IC
16170 return {
16171 number: result,
16172 size: varuint.decode.bytes
8b095871 16173 }
9987f0c1 16174}
8b095871 16175
9987f0c1
IC
16176// TODO: remove in 4.0.0?
16177function writeVarInt (buffer, number, offset) {
16178 varuint.encode(number, buffer, offset)
16179 return varuint.encode.bytes
8b095871
IC
16180}
16181
16182module.exports = {
9987f0c1
IC
16183 pushDataSize: pushdata.encodingLength,
16184 readPushDataInt: pushdata.decode,
16185 readUInt64LE: readUInt64LE,
16186 readVarInt: readVarInt,
16187 varIntBuffer: varuint.encode,
16188 varIntSize: varuint.encodingLength,
16189 writePushDataInt: pushdata.encode,
16190 writeUInt64LE: writeUInt64LE,
16191 writeVarInt: writeVarInt
8b095871
IC
16192}
16193
9987f0c1
IC
16194},{"pushdata-bitcoin":95,"varuint-bitcoin":111}],45:[function(require,module,exports){
16195var createHash = require('create-hash')
8b095871 16196
9987f0c1
IC
16197function ripemd160 (buffer) {
16198 return createHash('rmd160').update(buffer).digest()
16199}
8b095871 16200
9987f0c1
IC
16201function sha1 (buffer) {
16202 return createHash('sha1').update(buffer).digest()
8b095871
IC
16203}
16204
9987f0c1
IC
16205function sha256 (buffer) {
16206 return createHash('sha256').update(buffer).digest()
16207}
8b095871 16208
9987f0c1
IC
16209function hash160 (buffer) {
16210 return ripemd160(sha256(buffer))
16211}
8b095871 16212
9987f0c1
IC
16213function hash256 (buffer) {
16214 return sha256(sha256(buffer))
8b095871
IC
16215}
16216
9987f0c1
IC
16217module.exports = {
16218 hash160: hash160,
16219 hash256: hash256,
16220 ripemd160: ripemd160,
16221 sha1: sha1,
16222 sha256: sha256
8b095871
IC
16223}
16224
9987f0c1
IC
16225},{"create-hash":82}],46:[function(require,module,exports){
16226var Buffer = require('safe-buffer').Buffer
16227var createHmac = require('create-hmac')
16228var typeforce = require('typeforce')
16229var types = require('./types')
8b095871 16230
9987f0c1
IC
16231var BigInteger = require('bigi')
16232var ECSignature = require('./ecsignature')
8b095871 16233
9987f0c1
IC
16234var ZERO = Buffer.alloc(1, 0)
16235var ONE = Buffer.alloc(1, 1)
8b095871 16236
9987f0c1
IC
16237var ecurve = require('ecurve')
16238var secp256k1 = ecurve.getCurveByName('secp256k1')
8b095871 16239
9987f0c1
IC
16240// https://tools.ietf.org/html/rfc6979#section-3.2
16241function deterministicGenerateK (hash, x, checkSig) {
16242 typeforce(types.tuple(
16243 types.Hash256bit,
16244 types.Buffer256bit,
16245 types.Function
16246 ), arguments)
8b095871 16247
9987f0c1
IC
16248 // Step A, ignored as hash already provided
16249 // Step B
16250 // Step C
16251 var k = Buffer.alloc(32, 0)
16252 var v = Buffer.alloc(32, 1)
8b095871 16253
9987f0c1
IC
16254 // Step D
16255 k = createHmac('sha256', k)
16256 .update(v)
16257 .update(ZERO)
16258 .update(x)
16259 .update(hash)
16260 .digest()
8b095871 16261
9987f0c1
IC
16262 // Step E
16263 v = createHmac('sha256', k).update(v).digest()
8b095871 16264
9987f0c1
IC
16265 // Step F
16266 k = createHmac('sha256', k)
16267 .update(v)
16268 .update(ONE)
16269 .update(x)
16270 .update(hash)
16271 .digest()
8b095871 16272
9987f0c1
IC
16273 // Step G
16274 v = createHmac('sha256', k).update(v).digest()
8b095871 16275
9987f0c1
IC
16276 // Step H1/H2a, ignored as tlen === qlen (256 bit)
16277 // Step H2b
16278 v = createHmac('sha256', k).update(v).digest()
8b095871 16279
9987f0c1 16280 var T = BigInteger.fromBuffer(v)
8b095871 16281
9987f0c1
IC
16282 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
16283 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
16284 k = createHmac('sha256', k)
16285 .update(v)
16286 .update(ZERO)
16287 .digest()
16288
16289 v = createHmac('sha256', k).update(v).digest()
16290
16291 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
16292 // Step H2b again
16293 v = createHmac('sha256', k).update(v).digest()
16294 T = BigInteger.fromBuffer(v)
8b095871
IC
16295 }
16296
9987f0c1 16297 return T
8b095871
IC
16298}
16299
9987f0c1 16300var N_OVER_TWO = secp256k1.n.shiftRight(1)
8b095871 16301
9987f0c1
IC
16302function sign (hash, d) {
16303 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
8b095871 16304
9987f0c1
IC
16305 var x = d.toBuffer(32)
16306 var e = BigInteger.fromBuffer(hash)
16307 var n = secp256k1.n
16308 var G = secp256k1.G
8b095871 16309
9987f0c1
IC
16310 var r, s
16311 deterministicGenerateK(hash, x, function (k) {
16312 var Q = G.multiply(k)
8b095871 16313
9987f0c1 16314 if (secp256k1.isInfinity(Q)) return false
8b095871 16315
9987f0c1
IC
16316 r = Q.affineX.mod(n)
16317 if (r.signum() === 0) return false
8b095871 16318
9987f0c1
IC
16319 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
16320 if (s.signum() === 0) return false
8b095871 16321
9987f0c1
IC
16322 return true
16323 })
16324
16325 // enforce low S values, see bip62: 'low s values in signatures'
16326 if (s.compareTo(N_OVER_TWO) > 0) {
16327 s = n.subtract(s)
8b095871 16328 }
8b095871 16329
9987f0c1 16330 return new ECSignature(r, s)
8b095871 16331}
8b095871 16332
9987f0c1
IC
16333function verify (hash, signature, Q) {
16334 typeforce(types.tuple(
16335 types.Hash256bit,
16336 types.ECSignature,
16337 types.ECPoint
16338 ), arguments)
8b095871 16339
9987f0c1
IC
16340 var n = secp256k1.n
16341 var G = secp256k1.G
8b095871 16342
9987f0c1
IC
16343 var r = signature.r
16344 var s = signature.s
8b095871 16345
9987f0c1
IC
16346 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
16347 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
16348 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
8b095871 16349
9987f0c1
IC
16350 // 1.4.2 H = Hash(M), already done by the user
16351 // 1.4.3 e = H
16352 var e = BigInteger.fromBuffer(hash)
8b095871 16353
9987f0c1
IC
16354 // Compute s^-1
16355 var sInv = s.modInverse(n)
8b095871 16356
9987f0c1
IC
16357 // 1.4.4 Compute u1 = es^−1 mod n
16358 // u2 = rs^−1 mod n
16359 var u1 = e.multiply(sInv).mod(n)
16360 var u2 = r.multiply(sInv).mod(n)
8b095871 16361
9987f0c1
IC
16362 // 1.4.5 Compute R = (xR, yR)
16363 // R = u1G + u2Q
16364 var R = G.multiplyTwo(u1, Q, u2)
8b095871 16365
9987f0c1
IC
16366 // 1.4.5 (cont.) Enforce R is not at infinity
16367 if (secp256k1.isInfinity(R)) return false
8b095871 16368
9987f0c1
IC
16369 // 1.4.6 Convert the field element R.x to an integer
16370 var xR = R.affineX
8b095871 16371
9987f0c1
IC
16372 // 1.4.7 Set v = xR mod n
16373 var v = xR.mod(n)
8b095871 16374
9987f0c1
IC
16375 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
16376 return v.equals(r)
8b095871
IC
16377}
16378
9987f0c1
IC
16379module.exports = {
16380 deterministicGenerateK: deterministicGenerateK,
16381 sign: sign,
16382 verify: verify,
8b095871 16383
9987f0c1
IC
16384 // TODO: remove
16385 __curve: secp256k1
16386}
8b095871 16387
9987f0c1
IC
16388},{"./ecsignature":48,"./types":78,"bigi":37,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],47:[function(require,module,exports){
16389var baddress = require('./address')
16390var bcrypto = require('./crypto')
16391var ecdsa = require('./ecdsa')
16392var randomBytes = require('randombytes')
16393var typeforce = require('typeforce')
16394var types = require('./types')
16395var wif = require('wif')
8b095871 16396
9987f0c1
IC
16397var NETWORKS = require('./networks')
16398var BigInteger = require('bigi')
8b095871 16399
9987f0c1
IC
16400var ecurve = require('ecurve')
16401var secp256k1 = ecdsa.__curve
8b095871 16402
9987f0c1
IC
16403function ECPair (d, Q, options) {
16404 if (options) {
16405 typeforce({
16406 compressed: types.maybe(types.Boolean),
16407 network: types.maybe(types.Network)
16408 }, options)
16409 }
8b095871 16410
9987f0c1 16411 options = options || {}
8b095871 16412
9987f0c1
IC
16413 if (d) {
16414 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
16415 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
16416 if (Q) throw new TypeError('Unexpected publicKey parameter')
8b095871 16417
9987f0c1
IC
16418 this.d = d
16419 } else {
16420 typeforce(types.ECPoint, Q)
8b095871 16421
9987f0c1 16422 this.__Q = Q
8b095871 16423 }
8b095871 16424
9987f0c1
IC
16425 this.compressed = options.compressed === undefined ? true : options.compressed
16426 this.network = options.network || NETWORKS.bitcoin
8b095871
IC
16427}
16428
9987f0c1
IC
16429Object.defineProperty(ECPair.prototype, 'Q', {
16430 get: function () {
16431 if (!this.__Q && this.d) {
16432 this.__Q = secp256k1.G.multiply(this.d)
16433 }
8b095871 16434
9987f0c1 16435 return this.__Q
8b095871 16436 }
9987f0c1 16437})
8b095871 16438
9987f0c1
IC
16439ECPair.fromPublicKeyBuffer = function (buffer, network) {
16440 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
8b095871 16441
9987f0c1
IC
16442 return new ECPair(null, Q, {
16443 compressed: Q.compressed,
16444 network: network
16445 })
16446}
8b095871 16447
9987f0c1
IC
16448ECPair.fromWIF = function (string, network) {
16449 var decoded = wif.decode(string)
16450 var version = decoded.version
8b095871 16451
9987f0c1
IC
16452 // list of networks?
16453 if (types.Array(network)) {
16454 network = network.filter(function (x) {
16455 return version === x.wif
16456 }).pop()
16457
16458 if (!network) throw new Error('Unknown network version')
16459
16460 // otherwise, assume a network object (or default to bitcoin)
16461 } else {
16462 network = network || NETWORKS.bitcoin
16463
16464 if (version !== network.wif) throw new Error('Invalid network version')
8b095871
IC
16465 }
16466
9987f0c1
IC
16467 var d = BigInteger.fromBuffer(decoded.privateKey)
16468
16469 return new ECPair(d, null, {
16470 compressed: decoded.compressed,
16471 network: network
16472 })
8b095871
IC
16473}
16474
9987f0c1
IC
16475ECPair.makeRandom = function (options) {
16476 options = options || {}
16477
16478 var rng = options.rng || randomBytes
16479
16480 var d
16481 do {
16482 var buffer = rng(32)
16483 typeforce(types.Buffer256bit, buffer)
16484
16485 d = BigInteger.fromBuffer(buffer)
16486 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
16487
16488 return new ECPair(d, null, options)
8b095871
IC
16489}
16490
9987f0c1
IC
16491ECPair.prototype.getAddress = function () {
16492 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
8b095871
IC
16493}
16494
9987f0c1
IC
16495ECPair.prototype.getNetwork = function () {
16496 return this.network
8b095871
IC
16497}
16498
9987f0c1
IC
16499ECPair.prototype.getPublicKeyBuffer = function () {
16500 return this.Q.getEncoded(this.compressed)
8b095871
IC
16501}
16502
9987f0c1
IC
16503ECPair.prototype.sign = function (hash) {
16504 if (!this.d) throw new Error('Missing private key')
16505
16506 return ecdsa.sign(hash, this.d)
8b095871
IC
16507}
16508
9987f0c1
IC
16509ECPair.prototype.toWIF = function () {
16510 if (!this.d) throw new Error('Missing private key')
16511
16512 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
8b095871
IC
16513}
16514
9987f0c1
IC
16515ECPair.prototype.verify = function (hash, signature) {
16516 return ecdsa.verify(hash, signature, this.Q)
16517}
8b095871 16518
9987f0c1 16519module.exports = ECPair
8b095871 16520
9987f0c1
IC
16521},{"./address":42,"./crypto":45,"./ecdsa":46,"./networks":51,"./types":78,"bigi":37,"ecurve":89,"randombytes":96,"typeforce":109,"wif":112}],48:[function(require,module,exports){
16522(function (Buffer){
16523var bip66 = require('bip66')
16524var typeforce = require('typeforce')
16525var types = require('./types')
8b095871 16526
9987f0c1 16527var BigInteger = require('bigi')
8b095871 16528
9987f0c1
IC
16529function ECSignature (r, s) {
16530 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
8b095871 16531
9987f0c1
IC
16532 this.r = r
16533 this.s = s
16534}
16535
16536ECSignature.parseCompact = function (buffer) {
16537 if (buffer.length !== 65) throw new Error('Invalid signature length')
16538
16539 var flagByte = buffer.readUInt8(0) - 27
16540 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
16541
16542 var compressed = !!(flagByte & 4)
16543 var recoveryParam = flagByte & 3
16544
16545 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
16546 var s = BigInteger.fromBuffer(buffer.slice(33))
16547
16548 return {
16549 compressed: compressed,
16550 i: recoveryParam,
16551 signature: new ECSignature(r, s)
8b095871 16552 }
9987f0c1 16553}
8b095871 16554
9987f0c1
IC
16555ECSignature.fromDER = function (buffer) {
16556 var decode = bip66.decode(buffer)
16557 var r = BigInteger.fromDERInteger(decode.r)
16558 var s = BigInteger.fromDERInteger(decode.s)
8b095871 16559
9987f0c1
IC
16560 return new ECSignature(r, s)
16561}
16562
16563// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
16564ECSignature.parseScriptSignature = function (buffer) {
16565 var hashType = buffer.readUInt8(buffer.length - 1)
16566 var hashTypeMod = hashType & ~0x80
16567
16568 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
16569
16570 return {
16571 signature: ECSignature.fromDER(buffer.slice(0, -1)),
16572 hashType: hashType
8b095871 16573 }
9987f0c1 16574}
8b095871 16575
9987f0c1
IC
16576ECSignature.prototype.toCompact = function (i, compressed) {
16577 if (compressed) {
16578 i += 4
16579 }
16580
16581 i += 27
16582
16583 var buffer = Buffer.alloc(65)
16584 buffer.writeUInt8(i, 0)
16585 this.r.toBuffer(32).copy(buffer, 1)
16586 this.s.toBuffer(32).copy(buffer, 33)
16587
16588 return buffer
8b095871
IC
16589}
16590
9987f0c1
IC
16591ECSignature.prototype.toDER = function () {
16592 var r = Buffer.from(this.r.toDERInteger())
16593 var s = Buffer.from(this.s.toDERInteger())
16594
16595 return bip66.encode(r, s)
16596}
16597
16598ECSignature.prototype.toScriptSignature = function (hashType) {
16599 var hashTypeMod = hashType & ~0x80
16600 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
16601
16602 var hashTypeBuffer = Buffer.alloc(1)
16603 hashTypeBuffer.writeUInt8(hashType, 0)
16604
16605 return Buffer.concat([this.toDER(), hashTypeBuffer])
16606}
16607
16608module.exports = ECSignature
8b095871
IC
16609
16610}).call(this,require("buffer").Buffer)
9987f0c1
IC
16611},{"./types":78,"bigi":37,"bip66":39,"buffer":4,"typeforce":109}],49:[function(require,module,exports){
16612var Buffer = require('safe-buffer').Buffer
16613var base58check = require('bs58check')
16614var bcrypto = require('./crypto')
16615var createHmac = require('create-hmac')
16616var typeforce = require('typeforce')
16617var types = require('./types')
16618var NETWORKS = require('./networks')
16619
16620var BigInteger = require('bigi')
16621var ECPair = require('./ecpair')
16622
16623var ecurve = require('ecurve')
16624var curve = ecurve.getCurveByName('secp256k1')
16625
16626function HDNode (keyPair, chainCode) {
16627 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
16628
16629 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
16630
16631 this.keyPair = keyPair
16632 this.chainCode = chainCode
16633 this.depth = 0
16634 this.index = 0
16635 this.parentFingerprint = 0x00000000
8b095871
IC
16636}
16637
9987f0c1
IC
16638HDNode.HIGHEST_BIT = 0x80000000
16639HDNode.LENGTH = 78
16640HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
8b095871 16641
9987f0c1
IC
16642HDNode.fromSeedBuffer = function (seed, network) {
16643 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
8b095871 16644
9987f0c1
IC
16645 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
16646 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
8b095871 16647
9987f0c1
IC
16648 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
16649 var IL = I.slice(0, 32)
16650 var IR = I.slice(32)
8b095871 16651
9987f0c1
IC
16652 // In case IL is 0 or >= n, the master key is invalid
16653 // This is handled by the ECPair constructor
16654 var pIL = BigInteger.fromBuffer(IL)
16655 var keyPair = new ECPair(pIL, null, {
16656 network: network
16657 })
8b095871 16658
9987f0c1
IC
16659 return new HDNode(keyPair, IR)
16660}
8b095871 16661
9987f0c1
IC
16662HDNode.fromSeedHex = function (hex, network) {
16663 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
8b095871
IC
16664}
16665
9987f0c1
IC
16666HDNode.fromBase58 = function (string, networks) {
16667 var buffer = base58check.decode(string)
16668 if (buffer.length !== 78) throw new Error('Invalid buffer length')
8b095871 16669
9987f0c1
IC
16670 // 4 bytes: version bytes
16671 var version = buffer.readUInt32BE(0)
16672 var network
8b095871 16673
9987f0c1
IC
16674 // list of networks?
16675 if (Array.isArray(networks)) {
16676 network = networks.filter(function (x) {
16677 return version === x.bip32.private ||
16678 version === x.bip32.public
16679 }).pop()
8b095871 16680
9987f0c1
IC
16681 if (!network) throw new Error('Unknown network version')
16682
16683 // otherwise, assume a network object (or default to bitcoin)
16684 } else {
16685 network = networks || NETWORKS.bitcoin
8b095871
IC
16686 }
16687
9987f0c1
IC
16688 if (version !== network.bip32.private &&
16689 version !== network.bip32.public) throw new Error('Invalid network version')
8b095871 16690
9987f0c1
IC
16691 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16692 var depth = buffer[4]
8b095871 16693
9987f0c1
IC
16694 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16695 var parentFingerprint = buffer.readUInt32BE(5)
16696 if (depth === 0) {
16697 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
16698 }
8b095871 16699
9987f0c1
IC
16700 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16701 // This is encoded in MSB order. (0x00000000 if master key)
16702 var index = buffer.readUInt32BE(9)
16703 if (depth === 0 && index !== 0) throw new Error('Invalid index')
16704
16705 // 32 bytes: the chain code
16706 var chainCode = buffer.slice(13, 45)
16707 var keyPair
16708
16709 // 33 bytes: private key data (0x00 + k)
16710 if (version === network.bip32.private) {
16711 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
16712
16713 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
16714 keyPair = new ECPair(d, null, { network: network })
16715
16716 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16717 } else {
16718 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
16719 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
16720
16721 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16722 // If not, the extended public key is invalid.
16723 curve.validate(Q)
16724
16725 keyPair = new ECPair(null, Q, { network: network })
16726 }
16727
16728 var hd = new HDNode(keyPair, chainCode)
16729 hd.depth = depth
16730 hd.index = index
16731 hd.parentFingerprint = parentFingerprint
16732
16733 return hd
8b095871
IC
16734}
16735
9987f0c1
IC
16736HDNode.prototype.getAddress = function () {
16737 return this.keyPair.getAddress()
16738}
8b095871 16739
9987f0c1
IC
16740HDNode.prototype.getIdentifier = function () {
16741 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
16742}
8b095871 16743
9987f0c1
IC
16744HDNode.prototype.getFingerprint = function () {
16745 return this.getIdentifier().slice(0, 4)
16746}
8b095871 16747
9987f0c1
IC
16748HDNode.prototype.getNetwork = function () {
16749 return this.keyPair.getNetwork()
8b095871
IC
16750}
16751
9987f0c1
IC
16752HDNode.prototype.getPublicKeyBuffer = function () {
16753 return this.keyPair.getPublicKeyBuffer()
16754}
8b095871 16755
9987f0c1
IC
16756HDNode.prototype.neutered = function () {
16757 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
16758 network: this.keyPair.network
16759 })
8b095871 16760
9987f0c1
IC
16761 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
16762 neutered.depth = this.depth
16763 neutered.index = this.index
16764 neutered.parentFingerprint = this.parentFingerprint
8b095871 16765
9987f0c1
IC
16766 return neutered
16767}
8b095871 16768
9987f0c1
IC
16769HDNode.prototype.sign = function (hash) {
16770 return this.keyPair.sign(hash)
16771}
8b095871 16772
9987f0c1
IC
16773HDNode.prototype.verify = function (hash, signature) {
16774 return this.keyPair.verify(hash, signature)
8b095871
IC
16775}
16776
9987f0c1
IC
16777HDNode.prototype.toBase58 = function (__isPrivate) {
16778 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
8b095871 16779
9987f0c1
IC
16780 // Version
16781 var network = this.keyPair.network
16782 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
16783 var buffer = Buffer.allocUnsafe(78)
8b095871 16784
9987f0c1
IC
16785 // 4 bytes: version bytes
16786 buffer.writeUInt32BE(version, 0)
8b095871 16787
9987f0c1
IC
16788 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16789 buffer.writeUInt8(this.depth, 4)
16790
16791 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16792 buffer.writeUInt32BE(this.parentFingerprint, 5)
16793
16794 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16795 // This is encoded in big endian. (0x00000000 if master key)
16796 buffer.writeUInt32BE(this.index, 9)
16797
16798 // 32 bytes: the chain code
16799 this.chainCode.copy(buffer, 13)
16800
16801 // 33 bytes: the public key or private key data
16802 if (!this.isNeutered()) {
16803 // 0x00 + k for private keys
16804 buffer.writeUInt8(0, 45)
16805 this.keyPair.d.toBuffer(32).copy(buffer, 46)
16806
16807 // 33 bytes: the public key
16808 } else {
16809 // X9.62 encoding for public keys
16810 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
16811 }
16812
16813 return base58check.encode(buffer)
8b095871
IC
16814}
16815
9987f0c1
IC
16816// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16817HDNode.prototype.derive = function (index) {
16818 typeforce(types.UInt32, index)
16819
16820 var isHardened = index >= HDNode.HIGHEST_BIT
16821 var data = Buffer.allocUnsafe(37)
16822
16823 // Hardened child
16824 if (isHardened) {
16825 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
8b095871 16826
9987f0c1
IC
16827 // data = 0x00 || ser256(kpar) || ser32(index)
16828 data[0] = 0x00
16829 this.keyPair.d.toBuffer(32).copy(data, 1)
16830 data.writeUInt32BE(index, 33)
8b095871 16831
9987f0c1
IC
16832 // Normal child
16833 } else {
16834 // data = serP(point(kpar)) || ser32(index)
16835 // = serP(Kpar) || ser32(index)
16836 this.keyPair.getPublicKeyBuffer().copy(data, 0)
16837 data.writeUInt32BE(index, 33)
16838 }
8b095871 16839
9987f0c1
IC
16840 var I = createHmac('sha512', this.chainCode).update(data).digest()
16841 var IL = I.slice(0, 32)
16842 var IR = I.slice(32)
8b095871 16843
9987f0c1 16844 var pIL = BigInteger.fromBuffer(IL)
8b095871 16845
9987f0c1
IC
16846 // In case parse256(IL) >= n, proceed with the next value for i
16847 if (pIL.compareTo(curve.n) >= 0) {
16848 return this.derive(index + 1)
8b095871
IC
16849 }
16850
9987f0c1
IC
16851 // Private parent key -> private child key
16852 var derivedKeyPair
16853 if (!this.isNeutered()) {
16854 // ki = parse256(IL) + kpar (mod n)
16855 var ki = pIL.add(this.keyPair.d).mod(curve.n)
8b095871 16856
9987f0c1
IC
16857 // In case ki == 0, proceed with the next value for i
16858 if (ki.signum() === 0) {
16859 return this.derive(index + 1)
16860 }
16861
16862 derivedKeyPair = new ECPair(ki, null, {
16863 network: this.keyPair.network
16864 })
16865
16866 // Public parent key -> public child key
16867 } else {
16868 // Ki = point(parse256(IL)) + Kpar
16869 // = G*IL + Kpar
16870 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
16871
16872 // In case Ki is the point at infinity, proceed with the next value for i
16873 if (curve.isInfinity(Ki)) {
16874 return this.derive(index + 1)
16875 }
16876
16877 derivedKeyPair = new ECPair(null, Ki, {
16878 network: this.keyPair.network
16879 })
16880 }
16881
16882 var hd = new HDNode(derivedKeyPair, IR)
16883 hd.depth = this.depth + 1
16884 hd.index = index
16885 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
16886
16887 return hd
8b095871
IC
16888}
16889
9987f0c1
IC
16890HDNode.prototype.deriveHardened = function (index) {
16891 typeforce(types.UInt31, index)
8b095871 16892
9987f0c1
IC
16893 // Only derives hardened private keys by default
16894 return this.derive(index + HDNode.HIGHEST_BIT)
16895}
8b095871 16896
9987f0c1
IC
16897// Private === not neutered
16898// Public === neutered
16899HDNode.prototype.isNeutered = function () {
16900 return !(this.keyPair.d)
8b095871
IC
16901}
16902
9987f0c1
IC
16903HDNode.prototype.derivePath = function (path) {
16904 typeforce(types.BIP32Path, path)
8b095871 16905
9987f0c1
IC
16906 var splitPath = path.split('/')
16907 if (splitPath[0] === 'm') {
16908 if (this.parentFingerprint) {
16909 throw new Error('Not a master node')
16910 }
8b095871 16911
9987f0c1
IC
16912 splitPath = splitPath.slice(1)
16913 }
8b095871 16914
9987f0c1
IC
16915 return splitPath.reduce(function (prevHd, indexStr) {
16916 var index
16917 if (indexStr.slice(-1) === "'") {
16918 index = parseInt(indexStr.slice(0, -1), 10)
16919 return prevHd.deriveHardened(index)
16920 } else {
16921 index = parseInt(indexStr, 10)
16922 return prevHd.derive(index)
16923 }
16924 }, this)
16925}
8b095871 16926
9987f0c1 16927module.exports = HDNode
8b095871 16928
9987f0c1
IC
16929},{"./crypto":45,"./ecpair":47,"./networks":51,"./types":78,"bigi":37,"bs58check":80,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],50:[function(require,module,exports){
16930module.exports = {
16931 Block: require('./block'),
16932 ECPair: require('./ecpair'),
16933 ECSignature: require('./ecsignature'),
16934 HDNode: require('./hdnode'),
16935 Transaction: require('./transaction'),
16936 TransactionBuilder: require('./transaction_builder'),
8b095871 16937
9987f0c1
IC
16938 address: require('./address'),
16939 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
16940 crypto: require('./crypto'),
16941 networks: require('./networks'),
16942 opcodes: require('bitcoin-ops'),
16943 script: require('./script')
8b095871
IC
16944}
16945
9987f0c1
IC
16946},{"./address":42,"./block":43,"./bufferutils":44,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./hdnode":49,"./networks":51,"./script":52,"./transaction":76,"./transaction_builder":77,"bitcoin-ops":40}],51:[function(require,module,exports){
16947// https://en.bitcoin.it/wiki/List_of_address_prefixes
16948// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
8b095871 16949
9987f0c1
IC
16950module.exports = {
16951 bitcoin: {
16952 messagePrefix: '\x18Bitcoin Signed Message:\n',
16953 bip32: {
16954 public: 0x0488b21e,
16955 private: 0x0488ade4
16956 },
16957 pubKeyHash: 0x00,
16958 scriptHash: 0x05,
16959 wif: 0x80
16960 },
16961 testnet: {
16962 messagePrefix: '\x18Bitcoin Signed Message:\n',
16963 bip32: {
16964 public: 0x043587cf,
16965 private: 0x04358394
16966 },
16967 pubKeyHash: 0x6f,
16968 scriptHash: 0xc4,
16969 wif: 0xef
16970 },
16971 litecoin: {
8d18f379
IC
16972 messagePrefix: '\x19Litecoin Signed Message:\n',
16973 bip32: {
16974 public: 0x0488b21e,
16975 private: 0x0488ade4,
16976 },
16977 pubKeyHash: 0x30,
16978 scriptHash: 0x32,
16979 wif: 0xb0
16980 },
16981 litecoinLtub: {
9987f0c1
IC
16982 messagePrefix: '\x19Litecoin Signed Message:\n',
16983 bip32: {
16984 public: 0x019da462,
16985 private: 0x019d9cfe
16986 },
16987 pubKeyHash: 0x30,
16988 scriptHash: 0x32,
16989 wif: 0xb0
16990 }
16991}
8b095871 16992
9987f0c1
IC
16993},{}],52:[function(require,module,exports){
16994var Buffer = require('safe-buffer').Buffer
16995var bip66 = require('bip66')
16996var pushdata = require('pushdata-bitcoin')
16997var typeforce = require('typeforce')
16998var types = require('./types')
16999var scriptNumber = require('./script_number')
17000
17001var OPS = require('bitcoin-ops')
17002var REVERSE_OPS = require('bitcoin-ops/map')
17003var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17004
17005function isOPInt (value) {
17006 return types.Number(value) &&
17007 ((value === OPS.OP_0) ||
17008 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
17009 (value === OPS.OP_1NEGATE))
8b095871
IC
17010}
17011
9987f0c1
IC
17012function isPushOnlyChunk (value) {
17013 return types.Buffer(value) || isOPInt(value)
8b095871
IC
17014}
17015
9987f0c1
IC
17016function isPushOnly (value) {
17017 return types.Array(value) && value.every(isPushOnlyChunk)
17018}
8b095871 17019
9987f0c1
IC
17020function compile (chunks) {
17021 // TODO: remove me
17022 if (Buffer.isBuffer(chunks)) return chunks
8b095871 17023
9987f0c1 17024 typeforce(types.Array, chunks)
8b095871 17025
9987f0c1
IC
17026 var bufferSize = chunks.reduce(function (accum, chunk) {
17027 // data chunk
17028 if (Buffer.isBuffer(chunk)) {
17029 // adhere to BIP62.3, minimal push policy
17030 if (chunk.length === 1 && (chunk[0] === 0x81 || (chunk[0] >= 1 && chunk[0] <= 16))) {
17031 return accum + 1
17032 }
8b095871 17033
9987f0c1
IC
17034 return accum + pushdata.encodingLength(chunk.length) + chunk.length
17035 }
8b095871 17036
9987f0c1
IC
17037 // opcode
17038 return accum + 1
17039 }, 0.0)
8b095871 17040
9987f0c1
IC
17041 var buffer = Buffer.allocUnsafe(bufferSize)
17042 var offset = 0
8b095871 17043
9987f0c1
IC
17044 chunks.forEach(function (chunk) {
17045 // data chunk
17046 if (Buffer.isBuffer(chunk)) {
17047 // adhere to BIP62.3, minimal push policy
17048 if (chunk.length === 1 && chunk[0] >= 1 && chunk[0] <= 16) {
17049 var opcode = OP_INT_BASE + chunk[0]
17050 buffer.writeUInt8(opcode, offset)
17051 offset += 1
17052 return
17053 }
8b095871 17054
9987f0c1
IC
17055 if (chunk.length === 1 && chunk[0] === 0x81) {
17056 buffer.writeUInt8(OPS.OP_1NEGATE, offset)
17057 offset += 1
17058 return
17059 }
8b095871 17060
9987f0c1 17061 offset += pushdata.encode(buffer, chunk.length, offset)
8b095871 17062
9987f0c1
IC
17063 chunk.copy(buffer, offset)
17064 offset += chunk.length
8b095871 17065
9987f0c1
IC
17066 // opcode
17067 } else {
17068 buffer.writeUInt8(chunk, offset)
17069 offset += 1
17070 }
17071 })
8b095871 17072
9987f0c1
IC
17073 if (offset !== buffer.length) throw new Error('Could not decode chunks')
17074 return buffer
17075}
8b095871 17076
9987f0c1
IC
17077function decompile (buffer) {
17078 // TODO: remove me
17079 if (types.Array(buffer)) return buffer
8b095871 17080
9987f0c1 17081 typeforce(types.Buffer, buffer)
8b095871 17082
9987f0c1
IC
17083 var chunks = []
17084 var i = 0
8b095871 17085
9987f0c1
IC
17086 while (i < buffer.length) {
17087 var opcode = buffer[i]
8b095871 17088
9987f0c1
IC
17089 // data chunk
17090 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
17091 var d = pushdata.decode(buffer, i)
8b095871 17092
9987f0c1
IC
17093 // did reading a pushDataInt fail? empty script
17094 if (d === null) return []
17095 i += d.size
8b095871 17096
9987f0c1
IC
17097 // attempt to read too much data? empty script
17098 if (i + d.number > buffer.length) return []
8b095871 17099
9987f0c1
IC
17100 var data = buffer.slice(i, i + d.number)
17101 i += d.number
8b095871 17102
9987f0c1 17103 chunks.push(data)
8b095871 17104
9987f0c1
IC
17105 // opcode
17106 } else {
17107 chunks.push(opcode)
8b095871 17108
9987f0c1
IC
17109 i += 1
17110 }
17111 }
17112
17113 return chunks
8b095871
IC
17114}
17115
9987f0c1
IC
17116function toASM (chunks) {
17117 if (Buffer.isBuffer(chunks)) {
17118 chunks = decompile(chunks)
17119 }
8b095871 17120
9987f0c1
IC
17121 return chunks.map(function (chunk) {
17122 // data?
17123 if (Buffer.isBuffer(chunk)) return chunk.toString('hex')
8b095871 17124
9987f0c1
IC
17125 // opcode!
17126 return REVERSE_OPS[chunk]
17127 }).join(' ')
17128}
8b095871 17129
9987f0c1
IC
17130function fromASM (asm) {
17131 typeforce(types.String, asm)
8b095871 17132
9987f0c1
IC
17133 return compile(asm.split(' ').map(function (chunkStr) {
17134 // opcode?
17135 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
17136 typeforce(types.Hex, chunkStr)
8b095871 17137
9987f0c1
IC
17138 // data!
17139 return Buffer.from(chunkStr, 'hex')
17140 }))
17141}
8b095871 17142
9987f0c1
IC
17143function toStack (chunks) {
17144 chunks = decompile(chunks)
17145 typeforce(isPushOnly, chunks)
8b095871 17146
9987f0c1
IC
17147 return chunks.map(function (op) {
17148 if (Buffer.isBuffer(op)) return op
17149 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
17150
17151 return scriptNumber.encode(op - OP_INT_BASE)
17152 })
8b095871
IC
17153}
17154
9987f0c1
IC
17155function isCanonicalPubKey (buffer) {
17156 if (!Buffer.isBuffer(buffer)) return false
17157 if (buffer.length < 33) return false
8b095871 17158
9987f0c1
IC
17159 switch (buffer[0]) {
17160 case 0x02:
17161 case 0x03:
17162 return buffer.length === 33
17163 case 0x04:
17164 return buffer.length === 65
17165 }
8b095871 17166
9987f0c1 17167 return false
8b095871
IC
17168}
17169
9987f0c1
IC
17170function isDefinedHashType (hashType) {
17171 var hashTypeMod = hashType & ~0x80
8b095871 17172
9987f0c1
IC
17173// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
17174 return hashTypeMod > 0x00 && hashTypeMod < 0x04
8b095871
IC
17175}
17176
9987f0c1
IC
17177function isCanonicalSignature (buffer) {
17178 if (!Buffer.isBuffer(buffer)) return false
17179 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
8b095871 17180
9987f0c1 17181 return bip66.check(buffer.slice(0, -1))
8b095871
IC
17182}
17183
9987f0c1
IC
17184module.exports = {
17185 compile: compile,
17186 decompile: decompile,
17187 fromASM: fromASM,
17188 toASM: toASM,
17189 toStack: toStack,
8b095871 17190
9987f0c1 17191 number: require('./script_number'),
8b095871 17192
9987f0c1
IC
17193 isCanonicalPubKey: isCanonicalPubKey,
17194 isCanonicalSignature: isCanonicalSignature,
17195 isPushOnly: isPushOnly,
17196 isDefinedHashType: isDefinedHashType
8b095871
IC
17197}
17198
9987f0c1
IC
17199var templates = require('./templates')
17200for (var key in templates) {
17201 module.exports[key] = templates[key]
8b095871
IC
17202}
17203
9987f0c1
IC
17204},{"./script_number":53,"./templates":54,"./types":78,"bip66":39,"bitcoin-ops":40,"bitcoin-ops/map":41,"pushdata-bitcoin":95,"safe-buffer":98,"typeforce":109}],53:[function(require,module,exports){
17205var Buffer = require('safe-buffer').Buffer
8b095871 17206
9987f0c1
IC
17207function decode (buffer, maxLength, minimal) {
17208 maxLength = maxLength || 4
17209 minimal = minimal === undefined ? true : minimal
8b095871 17210
9987f0c1
IC
17211 var length = buffer.length
17212 if (length === 0) return 0
17213 if (length > maxLength) throw new TypeError('Script number overflow')
17214 if (minimal) {
17215 if ((buffer[length - 1] & 0x7f) === 0) {
17216 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
17217 }
17218 }
8b095871 17219
9987f0c1
IC
17220 // 40-bit
17221 if (length === 5) {
17222 var a = buffer.readUInt32LE(0)
17223 var b = buffer.readUInt8(4)
8b095871 17224
9987f0c1
IC
17225 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
17226 return (b * 0x100000000) + a
17227 }
8b095871 17228
9987f0c1 17229 var result = 0
8b095871 17230
9987f0c1
IC
17231 // 32-bit / 24-bit / 16-bit / 8-bit
17232 for (var i = 0; i < length; ++i) {
17233 result |= buffer[i] << (8 * i)
8b095871
IC
17234 }
17235
9987f0c1
IC
17236 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
17237 return result
17238}
8b095871 17239
9987f0c1
IC
17240function scriptNumSize (i) {
17241 return i > 0x7fffffff ? 5
17242 : i > 0x7fffff ? 4
17243 : i > 0x7fff ? 3
17244 : i > 0x7f ? 2
17245 : i > 0x00 ? 1
17246 : 0
8b095871
IC
17247}
17248
9987f0c1
IC
17249function encode (number) {
17250 var value = Math.abs(number)
17251 var size = scriptNumSize(value)
17252 var buffer = Buffer.allocUnsafe(size)
17253 var negative = number < 0
8b095871 17254
9987f0c1
IC
17255 for (var i = 0; i < size; ++i) {
17256 buffer.writeUInt8(value & 0xff, i)
17257 value >>= 8
17258 }
8b095871 17259
9987f0c1
IC
17260 if (buffer[size - 1] & 0x80) {
17261 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
17262 } else if (negative) {
17263 buffer[size - 1] |= 0x80
17264 }
17265
17266 return buffer
8b095871
IC
17267}
17268
9987f0c1
IC
17269module.exports = {
17270 decode: decode,
17271 encode: encode
17272}
8b095871 17273
9987f0c1
IC
17274},{"safe-buffer":98}],54:[function(require,module,exports){
17275var decompile = require('../script').decompile
17276var multisig = require('./multisig')
17277var nullData = require('./nulldata')
17278var pubKey = require('./pubkey')
17279var pubKeyHash = require('./pubkeyhash')
17280var scriptHash = require('./scripthash')
17281var witnessPubKeyHash = require('./witnesspubkeyhash')
17282var witnessScriptHash = require('./witnessscripthash')
17283var witnessCommitment = require('./witnesscommitment')
17284
17285var types = {
17286 MULTISIG: 'multisig',
17287 NONSTANDARD: 'nonstandard',
17288 NULLDATA: 'nulldata',
17289 P2PK: 'pubkey',
17290 P2PKH: 'pubkeyhash',
17291 P2SH: 'scripthash',
17292 P2WPKH: 'witnesspubkeyhash',
17293 P2WSH: 'witnessscripthash',
17294 WITNESS_COMMITMENT: 'witnesscommitment'
17295}
8b095871 17296
9987f0c1
IC
17297function classifyOutput (script) {
17298 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
17299 if (witnessScriptHash.output.check(script)) return types.P2WSH
17300 if (pubKeyHash.output.check(script)) return types.P2PKH
17301 if (scriptHash.output.check(script)) return types.P2SH
8b095871 17302
9987f0c1
IC
17303 // XXX: optimization, below functions .decompile before use
17304 var chunks = decompile(script)
17305 if (multisig.output.check(chunks)) return types.MULTISIG
17306 if (pubKey.output.check(chunks)) return types.P2PK
17307 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
17308 if (nullData.output.check(chunks)) return types.NULLDATA
8b095871 17309
9987f0c1 17310 return types.NONSTANDARD
8b095871
IC
17311}
17312
9987f0c1
IC
17313function classifyInput (script, allowIncomplete) {
17314 // XXX: optimization, below functions .decompile before use
17315 var chunks = decompile(script)
8b095871 17316
9987f0c1
IC
17317 if (pubKeyHash.input.check(chunks)) return types.P2PKH
17318 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
17319 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
17320 if (pubKey.input.check(chunks)) return types.P2PK
8b095871 17321
9987f0c1 17322 return types.NONSTANDARD
8b095871
IC
17323}
17324
9987f0c1
IC
17325function classifyWitness (script, allowIncomplete) {
17326 // XXX: optimization, below functions .decompile before use
17327 var chunks = decompile(script)
8b095871 17328
9987f0c1
IC
17329 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
17330 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
8b095871 17331
9987f0c1
IC
17332 return types.NONSTANDARD
17333}
8b095871 17334
9987f0c1
IC
17335module.exports = {
17336 classifyInput: classifyInput,
17337 classifyOutput: classifyOutput,
17338 classifyWitness: classifyWitness,
17339 multisig: multisig,
17340 nullData: nullData,
17341 pubKey: pubKey,
17342 pubKeyHash: pubKeyHash,
17343 scriptHash: scriptHash,
17344 witnessPubKeyHash: witnessPubKeyHash,
17345 witnessScriptHash: witnessScriptHash,
17346 witnessCommitment: witnessCommitment,
17347 types: types
17348}
17349
17350},{"../script":52,"./multisig":55,"./nulldata":58,"./pubkey":59,"./pubkeyhash":62,"./scripthash":65,"./witnesscommitment":68,"./witnesspubkeyhash":70,"./witnessscripthash":73}],55:[function(require,module,exports){
17351module.exports = {
17352 input: require('./input'),
17353 output: require('./output')
8b095871
IC
17354}
17355
9987f0c1
IC
17356},{"./input":56,"./output":57}],56:[function(require,module,exports){
17357// OP_0 [signatures ...]
8b095871 17358
9987f0c1
IC
17359var Buffer = require('safe-buffer').Buffer
17360var bscript = require('../../script')
17361var typeforce = require('typeforce')
17362var OPS = require('bitcoin-ops')
8b095871 17363
9987f0c1
IC
17364function partialSignature (value) {
17365 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
17366}
8b095871 17367
9987f0c1
IC
17368function check (script, allowIncomplete) {
17369 var chunks = bscript.decompile(script)
17370 if (chunks.length < 2) return false
17371 if (chunks[0] !== OPS.OP_0) return false
8b095871 17372
9987f0c1
IC
17373 if (allowIncomplete) {
17374 return chunks.slice(1).every(partialSignature)
17375 }
8b095871 17376
9987f0c1 17377 return chunks.slice(1).every(bscript.isCanonicalSignature)
8b095871 17378}
9987f0c1 17379check.toJSON = function () { return 'multisig input' }
8b095871 17380
9987f0c1 17381var EMPTY_BUFFER = Buffer.allocUnsafe(0)
8b095871 17382
9987f0c1
IC
17383function encodeStack (signatures, scriptPubKey) {
17384 typeforce([partialSignature], signatures)
8b095871 17385
9987f0c1
IC
17386 if (scriptPubKey) {
17387 var scriptData = bscript.multisig.output.decode(scriptPubKey)
17388
17389 if (signatures.length < scriptData.m) {
17390 throw new TypeError('Not enough signatures provided')
17391 }
8b095871 17392
9987f0c1
IC
17393 if (signatures.length > scriptData.pubKeys.length) {
17394 throw new TypeError('Too many signatures provided')
17395 }
17396 }
17397
17398 return [].concat(EMPTY_BUFFER, signatures)
8b095871
IC
17399}
17400
9987f0c1
IC
17401function encode (signatures, scriptPubKey) {
17402 return bscript.compile(encodeStack(signatures, scriptPubKey))
8b095871
IC
17403}
17404
9987f0c1
IC
17405function decodeStack (stack, allowIncomplete) {
17406 typeforce(check, stack, allowIncomplete)
17407 return stack.slice(1)
8b095871
IC
17408}
17409
9987f0c1
IC
17410function decode (buffer, allowIncomplete) {
17411 var stack = bscript.decompile(buffer)
17412 return decodeStack(stack, allowIncomplete)
17413}
8b095871 17414
9987f0c1
IC
17415module.exports = {
17416 check: check,
17417 decode: decode,
17418 decodeStack: decodeStack,
17419 encode: encode,
17420 encodeStack: encodeStack
17421}
8b095871 17422
9987f0c1
IC
17423},{"../../script":52,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],57:[function(require,module,exports){
17424// m [pubKeys ...] n OP_CHECKMULTISIG
8b095871 17425
9987f0c1
IC
17426var bscript = require('../../script')
17427var types = require('../../types')
17428var typeforce = require('typeforce')
17429var OPS = require('bitcoin-ops')
17430var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17431
17432function check (script, allowIncomplete) {
17433 var chunks = bscript.decompile(script)
17434
17435 if (chunks.length < 4) return false
17436 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
17437 if (!types.Number(chunks[0])) return false
17438 if (!types.Number(chunks[chunks.length - 2])) return false
17439 var m = chunks[0] - OP_INT_BASE
17440 var n = chunks[chunks.length - 2] - OP_INT_BASE
17441
17442 if (m <= 0) return false
17443 if (n > 16) return false
17444 if (m > n) return false
17445 if (n !== chunks.length - 3) return false
17446 if (allowIncomplete) return true
17447
17448 var keys = chunks.slice(1, -2)
17449 return keys.every(bscript.isCanonicalPubKey)
17450}
17451check.toJSON = function () { return 'multi-sig output' }
17452
17453function encode (m, pubKeys) {
17454 typeforce({
17455 m: types.Number,
17456 pubKeys: [bscript.isCanonicalPubKey]
17457 }, {
17458 m: m,
17459 pubKeys: pubKeys
17460 })
8b095871 17461
9987f0c1
IC
17462 var n = pubKeys.length
17463 if (n < m) throw new TypeError('Not enough pubKeys provided')
8b095871 17464
9987f0c1
IC
17465 return bscript.compile([].concat(
17466 OP_INT_BASE + m,
17467 pubKeys,
17468 OP_INT_BASE + n,
17469 OPS.OP_CHECKMULTISIG
17470 ))
17471}
8b095871 17472
9987f0c1
IC
17473function decode (buffer, allowIncomplete) {
17474 var chunks = bscript.decompile(buffer)
17475 typeforce(check, chunks, allowIncomplete)
8b095871 17476
9987f0c1
IC
17477 return {
17478 m: chunks[0] - OP_INT_BASE,
17479 pubKeys: chunks.slice(1, -2)
8b095871 17480 }
9987f0c1 17481}
8b095871 17482
9987f0c1
IC
17483module.exports = {
17484 check: check,
17485 decode: decode,
17486 encode: encode
17487}
8b095871 17488
9987f0c1
IC
17489},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],58:[function(require,module,exports){
17490// OP_RETURN {data}
8b095871 17491
9987f0c1
IC
17492var bscript = require('../script')
17493var types = require('../types')
17494var typeforce = require('typeforce')
17495var OPS = require('bitcoin-ops')
8b095871 17496
9987f0c1
IC
17497function check (script) {
17498 var buffer = bscript.compile(script)
8b095871 17499
9987f0c1
IC
17500 return buffer.length > 1 &&
17501 buffer[0] === OPS.OP_RETURN
17502}
17503check.toJSON = function () { return 'null data output' }
8b095871 17504
9987f0c1
IC
17505function encode (data) {
17506 typeforce(types.Buffer, data)
8b095871 17507
9987f0c1
IC
17508 return bscript.compile([OPS.OP_RETURN, data])
17509}
8b095871 17510
9987f0c1
IC
17511function decode (buffer) {
17512 typeforce(check, buffer)
17513
17514 return buffer.slice(2)
17515}
8b095871 17516
9987f0c1
IC
17517module.exports = {
17518 output: {
17519 check: check,
17520 decode: decode,
17521 encode: encode
8b095871 17522 }
9987f0c1 17523}
8b095871 17524
9987f0c1
IC
17525},{"../script":52,"../types":78,"bitcoin-ops":40,"typeforce":109}],59:[function(require,module,exports){
17526arguments[4][55][0].apply(exports,arguments)
17527},{"./input":60,"./output":61,"dup":55}],60:[function(require,module,exports){
17528// {signature}
8b095871 17529
9987f0c1
IC
17530var bscript = require('../../script')
17531var types = require('../../types')
17532var typeforce = require('typeforce')
8b095871 17533
9987f0c1
IC
17534function check (script) {
17535 var chunks = bscript.decompile(script)
8b095871 17536
9987f0c1
IC
17537 return chunks.length === 1 &&
17538 bscript.isCanonicalSignature(chunks[0])
17539}
17540check.toJSON = function () { return 'pubKey input' }
8b095871 17541
9987f0c1
IC
17542function encodeStack (signature) {
17543 typeforce(types.Buffer, signature)
17544 return [signature]
8b095871
IC
17545}
17546
9987f0c1
IC
17547function encode (signature) {
17548 return bscript.compile(encodeStack(signature))
17549}
8b095871 17550
9987f0c1
IC
17551function decodeStack (stack) {
17552 typeforce(check, stack)
17553 return stack[0]
17554}
8b095871 17555
9987f0c1
IC
17556function decode (buffer) {
17557 var stack = bscript.decompile(buffer)
17558 return decodeStack(stack)
17559}
8b095871 17560
9987f0c1
IC
17561module.exports = {
17562 check: check,
17563 decode: decode,
17564 decodeStack: decodeStack,
17565 encode: encode,
17566 encodeStack: encodeStack
8b095871
IC
17567}
17568
9987f0c1
IC
17569},{"../../script":52,"../../types":78,"typeforce":109}],61:[function(require,module,exports){
17570// {pubKey} OP_CHECKSIG
8b095871 17571
9987f0c1
IC
17572var bscript = require('../../script')
17573var typeforce = require('typeforce')
17574var OPS = require('bitcoin-ops')
8b095871 17575
9987f0c1
IC
17576function check (script) {
17577 var chunks = bscript.decompile(script)
8b095871 17578
9987f0c1
IC
17579 return chunks.length === 2 &&
17580 bscript.isCanonicalPubKey(chunks[0]) &&
17581 chunks[1] === OPS.OP_CHECKSIG
17582}
17583check.toJSON = function () { return 'pubKey output' }
8b095871 17584
9987f0c1
IC
17585function encode (pubKey) {
17586 typeforce(bscript.isCanonicalPubKey, pubKey)
8b095871 17587
9987f0c1
IC
17588 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
17589}
8b095871 17590
9987f0c1
IC
17591function decode (buffer) {
17592 var chunks = bscript.decompile(buffer)
17593 typeforce(check, chunks)
8b095871 17594
9987f0c1
IC
17595 return chunks[0]
17596}
8b095871 17597
9987f0c1
IC
17598module.exports = {
17599 check: check,
17600 decode: decode,
17601 encode: encode
17602}
8b095871 17603
9987f0c1
IC
17604},{"../../script":52,"bitcoin-ops":40,"typeforce":109}],62:[function(require,module,exports){
17605arguments[4][55][0].apply(exports,arguments)
17606},{"./input":63,"./output":64,"dup":55}],63:[function(require,module,exports){
17607// {signature} {pubKey}
8b095871 17608
9987f0c1
IC
17609var bscript = require('../../script')
17610var types = require('../../types')
17611var typeforce = require('typeforce')
8b095871 17612
9987f0c1
IC
17613function check (script) {
17614 var chunks = bscript.decompile(script)
8b095871 17615
9987f0c1
IC
17616 return chunks.length === 2 &&
17617 bscript.isCanonicalSignature(chunks[0]) &&
17618 bscript.isCanonicalPubKey(chunks[1])
8b095871 17619}
9987f0c1 17620check.toJSON = function () { return 'pubKeyHash input' }
8b095871 17621
9987f0c1
IC
17622function encodeStack (signature, pubKey) {
17623 typeforce({
17624 signature: types.Buffer, pubKey: types.Buffer
17625 }, {
17626 signature: signature, pubKey: pubKey
17627 })
8b095871 17628
9987f0c1 17629 return [signature, pubKey]
8b095871
IC
17630}
17631
9987f0c1
IC
17632function encode (signature, pubKey) {
17633 return bscript.compile(encodeStack(signature, pubKey))
8b095871
IC
17634}
17635
9987f0c1
IC
17636function decodeStack (stack) {
17637 typeforce(check, stack)
8b095871 17638
9987f0c1
IC
17639 return {
17640 signature: stack[0],
17641 pubKey: stack[1]
17642 }
8b095871
IC
17643}
17644
9987f0c1
IC
17645function decode (buffer) {
17646 var stack = bscript.decompile(buffer)
17647 return decodeStack(stack)
8b095871
IC
17648}
17649
9987f0c1
IC
17650module.exports = {
17651 check: check,
17652 decode: decode,
17653 decodeStack: decodeStack,
17654 encode: encode,
17655 encodeStack: encodeStack
8b095871
IC
17656}
17657
9987f0c1
IC
17658},{"../../script":52,"../../types":78,"typeforce":109}],64:[function(require,module,exports){
17659// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
8b095871 17660
9987f0c1
IC
17661var bscript = require('../../script')
17662var types = require('../../types')
17663var typeforce = require('typeforce')
17664var OPS = require('bitcoin-ops')
8b095871 17665
9987f0c1
IC
17666function check (script) {
17667 var buffer = bscript.compile(script)
8b095871 17668
9987f0c1
IC
17669 return buffer.length === 25 &&
17670 buffer[0] === OPS.OP_DUP &&
17671 buffer[1] === OPS.OP_HASH160 &&
17672 buffer[2] === 0x14 &&
17673 buffer[23] === OPS.OP_EQUALVERIFY &&
17674 buffer[24] === OPS.OP_CHECKSIG
8b095871 17675}
9987f0c1 17676check.toJSON = function () { return 'pubKeyHash output' }
8b095871 17677
9987f0c1
IC
17678function encode (pubKeyHash) {
17679 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17680
9987f0c1
IC
17681 return bscript.compile([
17682 OPS.OP_DUP,
17683 OPS.OP_HASH160,
17684 pubKeyHash,
17685 OPS.OP_EQUALVERIFY,
17686 OPS.OP_CHECKSIG
17687 ])
8b095871
IC
17688}
17689
9987f0c1
IC
17690function decode (buffer) {
17691 typeforce(check, buffer)
8b095871 17692
9987f0c1 17693 return buffer.slice(3, 23)
8b095871
IC
17694}
17695
9987f0c1
IC
17696module.exports = {
17697 check: check,
17698 decode: decode,
17699 encode: encode
8b095871
IC
17700}
17701
9987f0c1
IC
17702},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],65:[function(require,module,exports){
17703arguments[4][55][0].apply(exports,arguments)
17704},{"./input":66,"./output":67,"dup":55}],66:[function(require,module,exports){
17705// <scriptSig> {serialized scriptPubKey script}
8b095871 17706
9987f0c1
IC
17707var Buffer = require('safe-buffer').Buffer
17708var bscript = require('../../script')
17709var typeforce = require('typeforce')
8b095871 17710
9987f0c1
IC
17711function check (script, allowIncomplete) {
17712 var chunks = bscript.decompile(script)
17713 if (chunks.length < 1) return false
8b095871 17714
9987f0c1
IC
17715 var lastChunk = chunks[chunks.length - 1]
17716 if (!Buffer.isBuffer(lastChunk)) return false
8b095871 17717
9987f0c1
IC
17718 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
17719 var redeemScriptChunks = bscript.decompile(lastChunk)
8b095871 17720
9987f0c1
IC
17721 // is redeemScript a valid script?
17722 if (redeemScriptChunks.length === 0) return false
17723
17724 // is redeemScriptSig push only?
17725 if (!bscript.isPushOnly(scriptSigChunks)) return false
17726
17727 var inputType = bscript.classifyInput(scriptSigChunks, allowIncomplete)
17728 var outputType = bscript.classifyOutput(redeemScriptChunks)
17729 if (chunks.length === 1) {
17730 return outputType === bscript.types.P2WSH || outputType === bscript.types.P2WPKH
17731 }
17732 return inputType === outputType
8b095871 17733}
9987f0c1 17734check.toJSON = function () { return 'scriptHash input' }
8b095871 17735
9987f0c1
IC
17736function encodeStack (redeemScriptStack, redeemScript) {
17737 var serializedScriptPubKey = bscript.compile(redeemScript)
8b095871 17738
9987f0c1
IC
17739 return [].concat(redeemScriptStack, serializedScriptPubKey)
17740}
8b095871 17741
9987f0c1
IC
17742function encode (redeemScriptSig, redeemScript) {
17743 var redeemScriptStack = bscript.decompile(redeemScriptSig)
8b095871 17744
9987f0c1
IC
17745 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
17746}
8b095871 17747
9987f0c1
IC
17748function decodeStack (stack) {
17749 typeforce(check, stack)
17750
17751 return {
17752 redeemScriptStack: stack.slice(0, -1),
17753 redeemScript: stack[stack.length - 1]
17754 }
8b095871
IC
17755}
17756
9987f0c1
IC
17757function decode (buffer) {
17758 var stack = bscript.decompile(buffer)
17759 var result = decodeStack(stack)
17760 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
17761 delete result.redeemScriptStack
17762 return result
17763}
8b095871 17764
9987f0c1
IC
17765module.exports = {
17766 check: check,
17767 decode: decode,
17768 decodeStack: decodeStack,
17769 encode: encode,
17770 encodeStack: encodeStack
17771}
8b095871 17772
9987f0c1
IC
17773},{"../../script":52,"safe-buffer":98,"typeforce":109}],67:[function(require,module,exports){
17774// OP_HASH160 {scriptHash} OP_EQUAL
8b095871 17775
9987f0c1
IC
17776var bscript = require('../../script')
17777var types = require('../../types')
17778var typeforce = require('typeforce')
17779var OPS = require('bitcoin-ops')
8b095871 17780
9987f0c1
IC
17781function check (script) {
17782 var buffer = bscript.compile(script)
8b095871 17783
9987f0c1
IC
17784 return buffer.length === 23 &&
17785 buffer[0] === OPS.OP_HASH160 &&
17786 buffer[1] === 0x14 &&
17787 buffer[22] === OPS.OP_EQUAL
8b095871 17788}
9987f0c1 17789check.toJSON = function () { return 'scriptHash output' }
8b095871 17790
9987f0c1
IC
17791function encode (scriptHash) {
17792 typeforce(types.Hash160bit, scriptHash)
8b095871 17793
9987f0c1
IC
17794 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
17795}
8b095871 17796
9987f0c1
IC
17797function decode (buffer) {
17798 typeforce(check, buffer)
8b095871 17799
9987f0c1
IC
17800 return buffer.slice(2, 22)
17801}
8b095871 17802
9987f0c1
IC
17803module.exports = {
17804 check: check,
17805 decode: decode,
17806 encode: encode
8b095871
IC
17807}
17808
9987f0c1
IC
17809},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],68:[function(require,module,exports){
17810module.exports = {
17811 output: require('./output')
17812}
8b095871 17813
9987f0c1
IC
17814},{"./output":69}],69:[function(require,module,exports){
17815// OP_RETURN {aa21a9ed} {commitment}
8b095871 17816
9987f0c1
IC
17817var Buffer = require('safe-buffer').Buffer
17818var bscript = require('../../script')
17819var types = require('../../types')
17820var typeforce = require('typeforce')
17821var OPS = require('bitcoin-ops')
8b095871 17822
9987f0c1 17823var HEADER = Buffer.from('aa21a9ed', 'hex')
8b095871 17824
9987f0c1
IC
17825function check (script) {
17826 var buffer = bscript.compile(script)
17827
17828 return buffer.length > 37 &&
17829 buffer[0] === OPS.OP_RETURN &&
17830 buffer[1] === 0x24 &&
17831 buffer.slice(2, 6).equals(HEADER)
8b095871
IC
17832}
17833
9987f0c1 17834check.toJSON = function () { return 'Witness commitment output' }
8b095871 17835
9987f0c1
IC
17836function encode (commitment) {
17837 typeforce(types.Hash256bit, commitment)
8b095871 17838
9987f0c1
IC
17839 var buffer = Buffer.allocUnsafe(36)
17840 HEADER.copy(buffer, 0)
17841 commitment.copy(buffer, 4)
8b095871 17842
9987f0c1
IC
17843 return bscript.compile([OPS.OP_RETURN, buffer])
17844}
8b095871 17845
9987f0c1
IC
17846function decode (buffer) {
17847 typeforce(check, buffer)
8b095871 17848
9987f0c1
IC
17849 return bscript.decompile(buffer)[1].slice(4, 36)
17850}
8b095871 17851
9987f0c1
IC
17852module.exports = {
17853 check: check,
17854 decode: decode,
17855 encode: encode
17856}
8b095871 17857
9987f0c1
IC
17858},{"../../script":52,"../../types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],70:[function(require,module,exports){
17859arguments[4][55][0].apply(exports,arguments)
17860},{"./input":71,"./output":72,"dup":55}],71:[function(require,module,exports){
17861// {signature} {pubKey}
8b095871 17862
9987f0c1 17863var pkh = require('../pubkeyhash/input')
8b095871 17864
9987f0c1
IC
17865module.exports = {
17866 check: pkh.check,
17867 decodeStack: pkh.decodeStack,
17868 encodeStack: pkh.encodeStack
8b095871
IC
17869}
17870
9987f0c1
IC
17871},{"../pubkeyhash/input":63}],72:[function(require,module,exports){
17872// OP_0 {pubKeyHash}
8b095871 17873
9987f0c1
IC
17874var bscript = require('../../script')
17875var types = require('../../types')
17876var typeforce = require('typeforce')
17877var OPS = require('bitcoin-ops')
8b095871 17878
9987f0c1
IC
17879function check (script) {
17880 var buffer = bscript.compile(script)
8b095871 17881
9987f0c1
IC
17882 return buffer.length === 22 &&
17883 buffer[0] === OPS.OP_0 &&
17884 buffer[1] === 0x14
17885}
17886check.toJSON = function () { return 'Witness pubKeyHash output' }
8b095871 17887
9987f0c1
IC
17888function encode (pubKeyHash) {
17889 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17890
9987f0c1
IC
17891 return bscript.compile([OPS.OP_0, pubKeyHash])
17892}
8b095871 17893
9987f0c1
IC
17894function decode (buffer) {
17895 typeforce(check, buffer)
17896
17897 return buffer.slice(2)
8b095871
IC
17898}
17899
9987f0c1
IC
17900module.exports = {
17901 check: check,
17902 decode: decode,
17903 encode: encode
17904}
8b095871 17905
9987f0c1
IC
17906},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],73:[function(require,module,exports){
17907arguments[4][55][0].apply(exports,arguments)
17908},{"./input":74,"./output":75,"dup":55}],74:[function(require,module,exports){
17909// {signature} {pubKey}
8b095871 17910
9987f0c1 17911var p2sh = require('../scripthash/input')
8b095871 17912
9987f0c1
IC
17913module.exports = {
17914 check: p2sh.check,
17915 decodeStack: p2sh.decodeStack,
17916 encodeStack: p2sh.encodeStack
17917}
8b095871 17918
9987f0c1
IC
17919},{"../scripthash/input":66}],75:[function(require,module,exports){
17920// OP_0 {scriptHash}
8b095871 17921
9987f0c1
IC
17922var bscript = require('../../script')
17923var types = require('../../types')
17924var typeforce = require('typeforce')
17925var OPS = require('bitcoin-ops')
8b095871 17926
9987f0c1
IC
17927function check (script) {
17928 var buffer = bscript.compile(script)
17929
17930 return buffer.length === 34 &&
17931 buffer[0] === OPS.OP_0 &&
17932 buffer[1] === 0x20
8b095871 17933}
9987f0c1 17934check.toJSON = function () { return 'Witness scriptHash output' }
8b095871 17935
9987f0c1
IC
17936function encode (scriptHash) {
17937 typeforce(types.Hash256bit, scriptHash)
8b095871 17938
9987f0c1
IC
17939 return bscript.compile([OPS.OP_0, scriptHash])
17940}
8b095871 17941
9987f0c1
IC
17942function decode (buffer) {
17943 typeforce(check, buffer)
8b095871 17944
9987f0c1
IC
17945 return buffer.slice(2)
17946}
8b095871 17947
9987f0c1
IC
17948module.exports = {
17949 check: check,
17950 decode: decode,
17951 encode: encode
17952}
8b095871 17953
9987f0c1
IC
17954},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],76:[function(require,module,exports){
17955var Buffer = require('safe-buffer').Buffer
17956var bcrypto = require('./crypto')
17957var bscript = require('./script')
17958var bufferutils = require('./bufferutils')
17959var opcodes = require('bitcoin-ops')
17960var typeforce = require('typeforce')
17961var types = require('./types')
17962var varuint = require('varuint-bitcoin')
8b095871 17963
9987f0c1
IC
17964function varSliceSize (someScript) {
17965 var length = someScript.length
8b095871 17966
9987f0c1
IC
17967 return varuint.encodingLength(length) + length
17968}
8b095871 17969
9987f0c1
IC
17970function vectorSize (someVector) {
17971 var length = someVector.length
17972
17973 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
17974 return sum + varSliceSize(witness)
17975 }, 0)
8b095871
IC
17976}
17977
9987f0c1
IC
17978function Transaction () {
17979 this.version = 1
17980 this.locktime = 0
17981 this.ins = []
17982 this.outs = []
17983}
8b095871 17984
9987f0c1
IC
17985Transaction.DEFAULT_SEQUENCE = 0xffffffff
17986Transaction.SIGHASH_ALL = 0x01
17987Transaction.SIGHASH_NONE = 0x02
17988Transaction.SIGHASH_SINGLE = 0x03
17989Transaction.SIGHASH_ANYONECANPAY = 0x80
17990Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
17991Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
8b095871 17992
9987f0c1
IC
17993var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
17994var EMPTY_WITNESS = []
17995var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
17996var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
17997var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
17998var BLANK_OUTPUT = {
17999 script: EMPTY_SCRIPT,
18000 valueBuffer: VALUE_UINT64_MAX
18001}
8b095871 18002
9987f0c1
IC
18003Transaction.fromBuffer = function (buffer, __noStrict) {
18004 var offset = 0
18005 function readSlice (n) {
18006 offset += n
18007 return buffer.slice(offset - n, offset)
18008 }
8b095871 18009
9987f0c1
IC
18010 function readUInt32 () {
18011 var i = buffer.readUInt32LE(offset)
18012 offset += 4
18013 return i
18014 }
8b095871 18015
9987f0c1
IC
18016 function readInt32 () {
18017 var i = buffer.readInt32LE(offset)
18018 offset += 4
18019 return i
18020 }
8b095871 18021
9987f0c1
IC
18022 function readUInt64 () {
18023 var i = bufferutils.readUInt64LE(buffer, offset)
18024 offset += 8
18025 return i
8b095871
IC
18026 }
18027
9987f0c1
IC
18028 function readVarInt () {
18029 var vi = varuint.decode(buffer, offset)
18030 offset += varuint.decode.bytes
18031 return vi
18032 }
8b095871 18033
9987f0c1
IC
18034 function readVarSlice () {
18035 return readSlice(readVarInt())
18036 }
8b095871 18037
9987f0c1
IC
18038 function readVector () {
18039 var count = readVarInt()
18040 var vector = []
18041 for (var i = 0; i < count; i++) vector.push(readVarSlice())
18042 return vector
18043 }
8b095871 18044
9987f0c1
IC
18045 var tx = new Transaction()
18046 tx.version = readInt32()
8b095871 18047
9987f0c1
IC
18048 var marker = buffer.readUInt8(offset)
18049 var flag = buffer.readUInt8(offset + 1)
8b095871 18050
9987f0c1
IC
18051 var hasWitnesses = false
18052 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
18053 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
18054 offset += 2
18055 hasWitnesses = true
18056 }
8b095871 18057
9987f0c1
IC
18058 var vinLen = readVarInt()
18059 for (var i = 0; i < vinLen; ++i) {
18060 tx.ins.push({
18061 hash: readSlice(32),
18062 index: readUInt32(),
18063 script: readVarSlice(),
18064 sequence: readUInt32(),
18065 witness: EMPTY_WITNESS
18066 })
18067 }
8b095871 18068
9987f0c1
IC
18069 var voutLen = readVarInt()
18070 for (i = 0; i < voutLen; ++i) {
18071 tx.outs.push({
18072 value: readUInt64(),
18073 script: readVarSlice()
18074 })
8b095871
IC
18075 }
18076
9987f0c1
IC
18077 if (hasWitnesses) {
18078 for (i = 0; i < vinLen; ++i) {
18079 tx.ins[i].witness = readVector()
18080 }
8b095871 18081
9987f0c1
IC
18082 // was this pointless?
18083 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
18084 }
8b095871 18085
9987f0c1 18086 tx.locktime = readUInt32()
8b095871 18087
9987f0c1
IC
18088 if (__noStrict) return tx
18089 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
8b095871 18090
9987f0c1
IC
18091 return tx
18092}
8b095871 18093
9987f0c1
IC
18094Transaction.fromHex = function (hex) {
18095 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
8b095871 18096}
8b095871 18097
9987f0c1
IC
18098Transaction.isCoinbaseHash = function (buffer) {
18099 typeforce(types.Hash256bit, buffer)
18100 for (var i = 0; i < 32; ++i) {
18101 if (buffer[i] !== 0) return false
8b095871 18102 }
9987f0c1 18103 return true
8b095871 18104}
9987f0c1
IC
18105
18106Transaction.prototype.isCoinbase = function () {
18107 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
8b095871
IC
18108}
18109
9987f0c1
IC
18110Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
18111 typeforce(types.tuple(
18112 types.Hash256bit,
18113 types.UInt32,
18114 types.maybe(types.UInt32),
18115 types.maybe(types.Buffer)
18116 ), arguments)
8b095871 18117
9987f0c1
IC
18118 if (types.Null(sequence)) {
18119 sequence = Transaction.DEFAULT_SEQUENCE
18120 }
18121
18122 // Add the input and return the input's index
18123 return (this.ins.push({
18124 hash: hash,
18125 index: index,
18126 script: scriptSig || EMPTY_SCRIPT,
18127 sequence: sequence,
18128 witness: EMPTY_WITNESS
18129 }) - 1)
8b095871
IC
18130}
18131
9987f0c1
IC
18132Transaction.prototype.addOutput = function (scriptPubKey, value) {
18133 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
8b095871 18134
9987f0c1
IC
18135 // Add the output and return the output's index
18136 return (this.outs.push({
18137 script: scriptPubKey,
18138 value: value
18139 }) - 1)
8b095871
IC
18140}
18141
9987f0c1
IC
18142Transaction.prototype.hasWitnesses = function () {
18143 return this.ins.some(function (x) {
18144 return x.witness.length !== 0
18145 })
18146}
8b095871 18147
9987f0c1
IC
18148Transaction.prototype.weight = function () {
18149 var base = this.__byteLength(false)
18150 var total = this.__byteLength(true)
18151 return base * 3 + total
8b095871
IC
18152}
18153
9987f0c1
IC
18154Transaction.prototype.virtualSize = function () {
18155 return Math.ceil(this.weight() / 4)
18156}
8b095871 18157
9987f0c1
IC
18158Transaction.prototype.byteLength = function () {
18159 return this.__byteLength(true)
8b095871
IC
18160}
18161
9987f0c1
IC
18162Transaction.prototype.__byteLength = function (__allowWitness) {
18163 var hasWitnesses = __allowWitness && this.hasWitnesses()
18164
18165 return (
18166 (hasWitnesses ? 10 : 8) +
18167 varuint.encodingLength(this.ins.length) +
18168 varuint.encodingLength(this.outs.length) +
18169 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
18170 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
18171 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
18172 )
8b095871
IC
18173}
18174
9987f0c1
IC
18175Transaction.prototype.clone = function () {
18176 var newTx = new Transaction()
18177 newTx.version = this.version
18178 newTx.locktime = this.locktime
18179
18180 newTx.ins = this.ins.map(function (txIn) {
18181 return {
18182 hash: txIn.hash,
18183 index: txIn.index,
18184 script: txIn.script,
18185 sequence: txIn.sequence,
18186 witness: txIn.witness
8b095871 18187 }
9987f0c1 18188 })
8b095871 18189
9987f0c1
IC
18190 newTx.outs = this.outs.map(function (txOut) {
18191 return {
18192 script: txOut.script,
18193 value: txOut.value
18194 }
18195 })
8b095871 18196
9987f0c1
IC
18197 return newTx
18198}
18199
18200/**
18201 * Hash transaction for signing a specific input.
18202 *
18203 * Bitcoin uses a different hash for each signed transaction input.
18204 * This method copies the transaction, makes the necessary changes based on the
18205 * hashType, and then hashes the result.
18206 * This hash can then be used to sign the provided transaction input.
18207 */
18208Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18209 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
18210
18211 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
18212 if (inIndex >= this.ins.length) return ONE
18213
18214 // ignore OP_CODESEPARATOR
18215 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
18216 return x !== opcodes.OP_CODESEPARATOR
18217 }))
18218
18219 var txTmp = this.clone()
18220
18221 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
18222 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
18223 txTmp.outs = []
18224
18225 // ignore sequence numbers (except at inIndex)
18226 txTmp.ins.forEach(function (input, i) {
18227 if (i === inIndex) return
18228
18229 input.sequence = 0
18230 })
18231
18232 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
18233 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
18234 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
18235 if (inIndex >= this.outs.length) return ONE
18236
18237 // truncate outputs after
18238 txTmp.outs.length = inIndex + 1
18239
18240 // "blank" outputs before
18241 for (var i = 0; i < inIndex; i++) {
18242 txTmp.outs[i] = BLANK_OUTPUT
8b095871
IC
18243 }
18244
9987f0c1
IC
18245 // ignore sequence numbers (except at inIndex)
18246 txTmp.ins.forEach(function (input, y) {
18247 if (y === inIndex) return
8b095871 18248
9987f0c1
IC
18249 input.sequence = 0
18250 })
8b095871 18251 }
8b095871 18252
9987f0c1
IC
18253 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
18254 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18255 txTmp.ins = [txTmp.ins[inIndex]]
18256 txTmp.ins[0].script = ourScript
18257
18258 // SIGHASH_ALL: only ignore input scripts
18259 } else {
18260 // "blank" others input scripts
18261 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
18262 txTmp.ins[inIndex].script = ourScript
18263 }
18264
18265 // serialize and hash
18266 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
18267 buffer.writeInt32LE(hashType, buffer.length - 4)
18268 txTmp.__toBuffer(buffer, 0, false)
18269
18270 return bcrypto.hash256(buffer)
8b095871
IC
18271}
18272
9987f0c1
IC
18273Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
18274 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
18275
18276 var tbuffer, toffset
18277 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
18278 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
18279 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
18280 function writeVarInt (i) {
18281 varuint.encode(i, tbuffer, toffset)
18282 toffset += varuint.encode.bytes
18283 }
18284 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18285
18286 var hashOutputs = ZERO
18287 var hashPrevouts = ZERO
18288 var hashSequence = ZERO
18289
18290 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
18291 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
18292 toffset = 0
18293
18294 this.ins.forEach(function (txIn) {
18295 writeSlice(txIn.hash)
18296 writeUInt32(txIn.index)
18297 })
18298
18299 hashPrevouts = bcrypto.hash256(tbuffer)
18300 }
18301
18302 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
18303 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18304 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18305 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
18306 toffset = 0
18307
18308 this.ins.forEach(function (txIn) {
18309 writeUInt32(txIn.sequence)
18310 })
18311
18312 hashSequence = bcrypto.hash256(tbuffer)
18313 }
18314
18315 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18316 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18317 var txOutsSize = this.outs.reduce(function (sum, output) {
18318 return sum + 8 + varSliceSize(output.script)
18319 }, 0)
18320
18321 tbuffer = Buffer.allocUnsafe(txOutsSize)
18322 toffset = 0
18323
18324 this.outs.forEach(function (out) {
18325 writeUInt64(out.value)
18326 writeVarSlice(out.script)
18327 })
18328
18329 hashOutputs = bcrypto.hash256(tbuffer)
18330 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
18331 var output = this.outs[inIndex]
18332
18333 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
18334 toffset = 0
18335 writeUInt64(output.value)
18336 writeVarSlice(output.script)
18337
18338 hashOutputs = bcrypto.hash256(tbuffer)
18339 }
18340
18341 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
18342 toffset = 0
18343
18344 var input = this.ins[inIndex]
18345 writeUInt32(this.version)
18346 writeSlice(hashPrevouts)
18347 writeSlice(hashSequence)
18348 writeSlice(input.hash)
18349 writeUInt32(input.index)
18350 writeVarSlice(prevOutScript)
18351 writeUInt64(value)
18352 writeUInt32(input.sequence)
18353 writeSlice(hashOutputs)
18354 writeUInt32(this.locktime)
18355 writeUInt32(hashType)
18356 return bcrypto.hash256(tbuffer)
8b095871
IC
18357}
18358
9987f0c1
IC
18359Transaction.prototype.getHash = function () {
18360 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
18361}
8b095871 18362
9987f0c1
IC
18363Transaction.prototype.getId = function () {
18364 // transaction hash's are displayed in reverse order
18365 return this.getHash().reverse().toString('hex')
18366}
8b095871 18367
9987f0c1
IC
18368Transaction.prototype.toBuffer = function (buffer, initialOffset) {
18369 return this.__toBuffer(buffer, initialOffset, true)
18370}
8b095871 18371
9987f0c1
IC
18372Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
18373 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
8b095871 18374
9987f0c1
IC
18375 var offset = initialOffset || 0
18376 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
18377 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
18378 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
18379 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
18380 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
18381 function writeVarInt (i) {
18382 varuint.encode(i, buffer, offset)
18383 offset += varuint.encode.bytes
18384 }
18385 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18386 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
8b095871 18387
9987f0c1 18388 writeInt32(this.version)
8b095871 18389
9987f0c1 18390 var hasWitnesses = __allowWitness && this.hasWitnesses()
8b095871 18391
9987f0c1
IC
18392 if (hasWitnesses) {
18393 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
18394 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
18395 }
8b095871 18396
9987f0c1 18397 writeVarInt(this.ins.length)
8b095871 18398
9987f0c1
IC
18399 this.ins.forEach(function (txIn) {
18400 writeSlice(txIn.hash)
18401 writeUInt32(txIn.index)
18402 writeVarSlice(txIn.script)
18403 writeUInt32(txIn.sequence)
18404 })
8b095871 18405
9987f0c1
IC
18406 writeVarInt(this.outs.length)
18407 this.outs.forEach(function (txOut) {
18408 if (!txOut.valueBuffer) {
18409 writeUInt64(txOut.value)
18410 } else {
18411 writeSlice(txOut.valueBuffer)
8b095871 18412 }
8b095871 18413
9987f0c1
IC
18414 writeVarSlice(txOut.script)
18415 })
8b095871 18416
9987f0c1
IC
18417 if (hasWitnesses) {
18418 this.ins.forEach(function (input) {
18419 writeVector(input.witness)
18420 })
18421 }
8b095871 18422
9987f0c1 18423 writeUInt32(this.locktime)
8b095871 18424
9987f0c1
IC
18425 // avoid slicing unless necessary
18426 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
18427 return buffer
18428}
8b095871 18429
9987f0c1
IC
18430Transaction.prototype.toHex = function () {
18431 return this.toBuffer().toString('hex')
18432}
8b095871 18433
9987f0c1
IC
18434Transaction.prototype.setInputScript = function (index, scriptSig) {
18435 typeforce(types.tuple(types.Number, types.Buffer), arguments)
8b095871 18436
9987f0c1
IC
18437 this.ins[index].script = scriptSig
18438}
8b095871 18439
9987f0c1
IC
18440Transaction.prototype.setWitness = function (index, witness) {
18441 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
18442
18443 this.ins[index].witness = witness
18444}
18445
18446module.exports = Transaction
18447
18448},{"./bufferutils":44,"./crypto":45,"./script":52,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],77:[function(require,module,exports){
18449var Buffer = require('safe-buffer').Buffer
18450var baddress = require('./address')
18451var bcrypto = require('./crypto')
18452var bscript = require('./script')
18453var networks = require('./networks')
18454var ops = require('bitcoin-ops')
18455var typeforce = require('typeforce')
18456var types = require('./types')
18457var scriptTypes = bscript.types
18458var SIGNABLE = [bscript.types.P2PKH, bscript.types.P2PK, bscript.types.MULTISIG]
18459var P2SH = SIGNABLE.concat([bscript.types.P2WPKH, bscript.types.P2WSH])
18460
18461var ECPair = require('./ecpair')
18462var ECSignature = require('./ecsignature')
18463var Transaction = require('./transaction')
18464
18465function extractChunks (type, chunks, script) {
18466 var pubKeys = []
18467 var signatures = []
18468 switch (type) {
18469 case scriptTypes.P2PKH:
18470 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
18471 pubKeys = chunks.slice(1)
18472 signatures = chunks.slice(0, 1)
18473 break
18474
18475 case scriptTypes.P2PK:
18476 pubKeys[0] = script ? bscript.pubKey.output.decode(script) : undefined
18477 signatures = chunks.slice(0, 1)
18478 break
18479
18480 case scriptTypes.MULTISIG:
18481 if (script) {
18482 var multisig = bscript.multisig.output.decode(script)
18483 pubKeys = multisig.pubKeys
18484 }
18485
18486 signatures = chunks.slice(1).map(function (chunk) {
18487 return chunk.length === 0 ? undefined : chunk
18488 })
18489 break
18490 }
18491
18492 return {
18493 pubKeys: pubKeys,
18494 signatures: signatures
18495 }
18496}
18497function expandInput (scriptSig, witnessStack) {
18498 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
18499
18500 var prevOutScript
18501 var prevOutType
18502 var scriptType
18503 var script
18504 var redeemScript
18505 var witnessScript
18506 var witnessScriptType
18507 var redeemScriptType
18508 var witness = false
18509 var p2wsh = false
18510 var p2sh = false
18511 var witnessProgram
18512 var chunks
18513
18514 var scriptSigChunks = bscript.decompile(scriptSig)
18515 var sigType = bscript.classifyInput(scriptSigChunks, true)
18516 if (sigType === scriptTypes.P2SH) {
18517 p2sh = true
18518 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
18519 redeemScriptType = bscript.classifyOutput(redeemScript)
18520 prevOutScript = bscript.scriptHash.output.encode(bcrypto.hash160(redeemScript))
18521 prevOutType = scriptTypes.P2SH
18522 script = redeemScript
18523 }
18524
18525 var classifyWitness = bscript.classifyWitness(witnessStack)
18526 if (classifyWitness === scriptTypes.P2WSH) {
18527 witnessScript = witnessStack[witnessStack.length - 1]
18528 witnessScriptType = bscript.classifyOutput(witnessScript)
18529 p2wsh = true
18530 if (scriptSig.length === 0) {
18531 prevOutScript = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18532 prevOutType = scriptTypes.P2WSH
18533 if (typeof redeemScript !== 'undefined') {
18534 throw new Error('Redeem script given when unnecessary')
18535 }
18536 // bare witness
18537 } else {
18538 if (!redeemScript) {
18539 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
18540 }
18541 witnessProgram = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18542 if (!redeemScript.equals(witnessProgram)) {
18543 throw new Error('Redeem script didn\'t match witnessScript')
18544 }
8b095871 18545 }
8b095871 18546
9987f0c1
IC
18547 if (SIGNABLE.indexOf(bscript.classifyOutput(witnessScript)) === -1) {
18548 throw new Error('unsupported witness script')
18549 }
18550 script = witnessScript
18551 scriptType = witnessScriptType
18552 chunks = witnessStack.slice(0, -1)
18553 } else if (classifyWitness === scriptTypes.P2WPKH) {
18554 var key = witnessStack[witnessStack.length - 1]
18555 var keyHash = bcrypto.hash160(key)
18556 if (scriptSig.length === 0) {
18557 prevOutScript = bscript.witnessPubKeyHash.output.encode(keyHash)
18558 prevOutType = scriptTypes.P2WPKH
18559 if (typeof redeemScript !== 'undefined') {
18560 throw new Error('Redeem script given when unnecessary')
18561 }
18562 } else {
18563 if (!redeemScript) {
18564 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
18565 }
18566 witnessProgram = bscript.witnessPubKeyHash.output.encode(keyHash)
18567 if (!redeemScript.equals(witnessProgram)) {
18568 throw new Error('Redeem script did not have the right witness program')
18569 }
18570 }
8b095871 18571
9987f0c1
IC
18572 scriptType = scriptTypes.P2PKH
18573 chunks = witnessStack
18574 } else if (redeemScript) {
18575 if (P2SH.indexOf(redeemScriptType) === -1) {
18576 throw new Error('Bad redeemscript!')
8b095871 18577 }
8b095871 18578
9987f0c1
IC
18579 script = redeemScript
18580 scriptType = redeemScriptType
18581 chunks = scriptSigChunks.slice(0, -1)
18582 } else {
18583 prevOutType = scriptType = bscript.classifyInput(scriptSig)
18584 chunks = scriptSigChunks
8b095871 18585 }
8b095871 18586
9987f0c1 18587 var expanded = extractChunks(scriptType, chunks, script)
8b095871 18588
9987f0c1
IC
18589 var result = {
18590 pubKeys: expanded.pubKeys,
18591 signatures: expanded.signatures,
18592 prevOutScript: prevOutScript,
18593 prevOutType: prevOutType,
18594 signType: scriptType,
18595 signScript: script,
18596 witness: Boolean(witness)
18597 }
8b095871 18598
9987f0c1
IC
18599 if (p2sh) {
18600 result.redeemScript = redeemScript
18601 result.redeemScriptType = redeemScriptType
18602 }
8b095871 18603
9987f0c1
IC
18604 if (p2wsh) {
18605 result.witnessScript = witnessScript
18606 result.witnessScriptType = witnessScriptType
8b095871
IC
18607 }
18608
9987f0c1 18609 return result
8b095871
IC
18610}
18611
9987f0c1
IC
18612// could be done in expandInput, but requires the original Transaction for hashForSignature
18613function fixMultisigOrder (input, transaction, vin) {
18614 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
18615 if (input.pubKeys.length === input.signatures.length) return
8b095871 18616
9987f0c1 18617 var unmatched = input.signatures.concat()
8b095871 18618
9987f0c1
IC
18619 input.signatures = input.pubKeys.map(function (pubKey) {
18620 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
18621 var match
8b095871 18622
9987f0c1
IC
18623 // check for a signature
18624 unmatched.some(function (signature, i) {
18625 // skip if undefined || OP_0
18626 if (!signature) return false
8b095871 18627
9987f0c1
IC
18628 // TODO: avoid O(n) hashForSignature
18629 var parsed = ECSignature.parseScriptSignature(signature)
18630 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
8b095871 18631
9987f0c1
IC
18632 // skip if signature does not match pubKey
18633 if (!keyPair.verify(hash, parsed.signature)) return false
8b095871 18634
9987f0c1
IC
18635 // remove matched signature from unmatched
18636 unmatched[i] = undefined
18637 match = signature
8b095871 18638
9987f0c1
IC
18639 return true
18640 })
8b095871 18641
9987f0c1
IC
18642 return match
18643 })
18644}
8b095871 18645
9987f0c1
IC
18646function expandOutput (script, scriptType, ourPubKey) {
18647 typeforce(types.Buffer, script)
8b095871 18648
9987f0c1
IC
18649 var scriptChunks = bscript.decompile(script)
18650 if (!scriptType) {
18651 scriptType = bscript.classifyOutput(script)
8b095871 18652 }
8b095871 18653
9987f0c1 18654 var pubKeys = []
8b095871 18655
9987f0c1
IC
18656 switch (scriptType) {
18657 // does our hash160(pubKey) match the output scripts?
18658 case scriptTypes.P2PKH:
18659 if (!ourPubKey) break
8b095871 18660
9987f0c1
IC
18661 var pkh1 = scriptChunks[2]
18662 var pkh2 = bcrypto.hash160(ourPubKey)
18663 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
18664 break
8b095871 18665
9987f0c1
IC
18666 // does our hash160(pubKey) match the output scripts?
18667 case scriptTypes.P2WPKH:
18668 if (!ourPubKey) break
8b095871 18669
9987f0c1
IC
18670 var wpkh1 = scriptChunks[1]
18671 var wpkh2 = bcrypto.hash160(ourPubKey)
18672 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
18673 break
8b095871 18674
9987f0c1
IC
18675 case scriptTypes.P2PK:
18676 pubKeys = scriptChunks.slice(0, 1)
18677 break
18678
18679 case scriptTypes.MULTISIG:
18680 pubKeys = scriptChunks.slice(1, -2)
18681 break
8b095871 18682
9987f0c1
IC
18683 default: return { scriptType: scriptType }
18684 }
8b095871 18685
9987f0c1
IC
18686 return {
18687 pubKeys: pubKeys,
18688 scriptType: scriptType,
18689 signatures: pubKeys.map(function () { return undefined })
18690 }
8b095871
IC
18691}
18692
9987f0c1
IC
18693function checkP2shInput (input, redeemScriptHash) {
18694 if (input.prevOutType) {
18695 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
8b095871 18696
9987f0c1
IC
18697 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
18698 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
18699 }
8b095871
IC
18700}
18701
9987f0c1
IC
18702function checkP2WSHInput (input, witnessScriptHash) {
18703 if (input.prevOutType) {
18704 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
8b095871 18705
9987f0c1
IC
18706 var scriptHash = bscript.decompile(input.prevOutScript)[1]
18707 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
18708 }
8b095871
IC
18709}
18710
9987f0c1
IC
18711function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
18712 var expanded
18713 var prevOutType
18714 var prevOutScript
8b095871 18715
9987f0c1
IC
18716 var p2sh = false
18717 var p2shType
18718 var redeemScriptHash
18719
18720 var witness = false
18721 var p2wsh = false
18722 var witnessType
18723 var witnessScriptHash
18724
18725 var signType
18726 var signScript
18727
18728 if (redeemScript && witnessScript) {
18729 redeemScriptHash = bcrypto.hash160(redeemScript)
18730 witnessScriptHash = bcrypto.sha256(witnessScript)
18731 checkP2shInput(input, redeemScriptHash)
18732
18733 if (!redeemScript.equals(bscript.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
18734
18735 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18736 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18737 prevOutType = bscript.types.P2SH
18738 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18739 p2sh = witness = p2wsh = true
18740 p2shType = bscript.types.P2WSH
18741 signType = witnessType = expanded.scriptType
18742 signScript = witnessScript
18743 } else if (redeemScript) {
18744 redeemScriptHash = bcrypto.hash160(redeemScript)
18745 checkP2shInput(input, redeemScriptHash)
18746
18747 expanded = expandOutput(redeemScript, undefined, kpPubKey)
18748 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
18749
18750 prevOutType = bscript.types.P2SH
18751 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18752 p2sh = true
18753 signType = p2shType = expanded.scriptType
18754 signScript = redeemScript
18755 witness = signType === bscript.types.P2WPKH
18756 } else if (witnessScript) {
18757 witnessScriptHash = bcrypto.sha256(witnessScript)
18758 checkP2WSHInput(input, witnessScriptHash)
18759
18760 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18761 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18762
18763 prevOutType = bscript.types.P2WSH
18764 prevOutScript = bscript.witnessScriptHash.output.encode(witnessScriptHash)
18765 witness = p2wsh = true
18766 signType = witnessType = expanded.scriptType
18767 signScript = witnessScript
18768 } else if (input.prevOutType) {
18769 // embedded scripts are not possible without a redeemScript
18770 if (input.prevOutType === scriptTypes.P2SH ||
18771 input.prevOutType === scriptTypes.P2WSH) {
18772 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
18773 }
18774
18775 prevOutType = input.prevOutType
18776 prevOutScript = input.prevOutScript
18777 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
18778 if (!expanded.pubKeys) return
18779
18780 witness = (input.prevOutType === scriptTypes.P2WPKH)
18781 signType = prevOutType
18782 signScript = prevOutScript
18783 } else {
18784 prevOutScript = bscript.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
18785 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
18786 prevOutType = scriptTypes.P2PKH
18787 witness = false
18788 signType = prevOutType
18789 signScript = prevOutScript
18790 }
8b095871 18791
9987f0c1
IC
18792 if (witness && !types.Satoshi(witnessValue)) {
18793 throw new Error('Input was witness but not given witness value')
18794 }
8b095871 18795
9987f0c1
IC
18796 if (signType === scriptTypes.P2WPKH) {
18797 signScript = bscript.pubKeyHash.output.encode(bscript.witnessPubKeyHash.output.decode(signScript))
18798 }
8b095871 18799
9987f0c1
IC
18800 if (p2sh) {
18801 input.redeemScript = redeemScript
18802 input.redeemScriptType = p2shType
18803 }
8b095871 18804
9987f0c1
IC
18805 if (p2wsh) {
18806 input.witnessScript = witnessScript
18807 input.witnessScriptType = witnessType
18808 }
8b095871 18809
9987f0c1
IC
18810 input.pubKeys = expanded.pubKeys
18811 input.signatures = expanded.signatures
18812 input.signScript = signScript
18813 input.signType = signType
18814 input.prevOutScript = prevOutScript
18815 input.prevOutType = prevOutType
18816 input.witness = witness
8b095871
IC
18817}
18818
9987f0c1
IC
18819function buildStack (type, signatures, pubKeys, allowIncomplete) {
18820 if (type === scriptTypes.P2PKH) {
18821 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return bscript.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
18822 } else if (type === scriptTypes.P2PK) {
18823 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return bscript.pubKey.input.encodeStack(signatures[0])
18824 } else if (type === scriptTypes.MULTISIG) {
18825 if (signatures.length > 0) {
18826 signatures = signatures.map(function (signature) {
18827 return signature || ops.OP_0
18828 })
18829 if (!allowIncomplete) {
18830 // remove blank signatures
18831 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
18832 }
8b095871 18833
9987f0c1
IC
18834 return bscript.multisig.input.encodeStack(signatures /* see if it's necessary first */)
18835 }
18836 } else {
18837 throw new Error('Not yet supported')
18838 }
8b095871 18839
9987f0c1 18840 if (!allowIncomplete) throw new Error('Not enough signatures provided')
8b095871 18841
9987f0c1 18842 return []
8b095871
IC
18843}
18844
9987f0c1
IC
18845function buildInput (input, allowIncomplete) {
18846 var scriptType = input.prevOutType
18847 var sig = []
18848 var witness = []
18849 if (SIGNABLE.indexOf(scriptType) !== -1) {
18850 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
8b095871
IC
18851 }
18852
9987f0c1
IC
18853 var p2sh = false
18854 if (scriptType === bscript.types.P2SH) {
18855 // We can remove this error later when we have a guarantee prepareInput
18856 // rejects unsignable scripts - it MUST be signable at this point.
18857 if (P2SH.indexOf(input.redeemScriptType) === -1) {
18858 throw new Error('Impossible to sign this type')
18859 }
18860 p2sh = true
18861 if (SIGNABLE.indexOf(input.redeemScriptType) !== -1) {
18862 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
18863 }
18864 // If it wasn't SIGNABLE, it's witness, defer to that
18865 scriptType = input.redeemScriptType
8b095871
IC
18866 }
18867
9987f0c1
IC
18868 if (scriptType === bscript.types.P2WPKH) {
18869 // P2WPKH is a special case of P2PKH
18870 witness = buildStack(bscript.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
18871 } else if (scriptType === bscript.types.P2WSH) {
18872 // We can remove this check later
18873 if (SIGNABLE.indexOf(input.witnessScriptType) !== -1) {
18874 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
18875 witness.push(input.witnessScript)
18876 } else {
18877 // We can remove this error later when we have a guarantee prepareInput
18878 // rejects unsignble scripts - it MUST be signable at this point.
18879 throw new Error()
18880 }
8b095871 18881
9987f0c1 18882 scriptType = input.witnessScriptType
8b095871
IC
18883 }
18884
9987f0c1
IC
18885 // append redeemScript if necessary
18886 if (p2sh) {
18887 sig.push(input.redeemScript)
8b095871
IC
18888 }
18889
9987f0c1
IC
18890 return {
18891 type: scriptType,
18892 script: bscript.compile(sig),
18893 witness: witness
8b095871 18894 }
8b095871
IC
18895}
18896
9987f0c1
IC
18897function TransactionBuilder (network, maximumFeeRate) {
18898 this.prevTxMap = {}
18899 this.network = network || networks.bitcoin
8b095871 18900
9987f0c1
IC
18901 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
18902 this.maximumFeeRate = maximumFeeRate || 1000
8b095871 18903
9987f0c1
IC
18904 this.inputs = []
18905 this.tx = new Transaction()
8b095871
IC
18906}
18907
9987f0c1
IC
18908TransactionBuilder.prototype.setLockTime = function (locktime) {
18909 typeforce(types.UInt32, locktime)
8b095871 18910
9987f0c1
IC
18911 // if any signatures exist, throw
18912 if (this.inputs.some(function (input) {
18913 if (!input.signatures) return false
18914
18915 return input.signatures.some(function (s) { return s })
18916 })) {
18917 throw new Error('No, this would invalidate signatures')
18918 }
18919
18920 this.tx.locktime = locktime
8b095871
IC
18921}
18922
9987f0c1
IC
18923TransactionBuilder.prototype.setVersion = function (version) {
18924 typeforce(types.UInt32, version)
8b095871 18925
9987f0c1
IC
18926 // XXX: this might eventually become more complex depending on what the versions represent
18927 this.tx.version = version
18928}
8b095871 18929
9987f0c1
IC
18930TransactionBuilder.fromTransaction = function (transaction, network) {
18931 var txb = new TransactionBuilder(network)
8b095871 18932
9987f0c1
IC
18933 // Copy transaction fields
18934 txb.setVersion(transaction.version)
18935 txb.setLockTime(transaction.locktime)
8b095871 18936
9987f0c1
IC
18937 // Copy outputs (done first to avoid signature invalidation)
18938 transaction.outs.forEach(function (txOut) {
18939 txb.addOutput(txOut.script, txOut.value)
18940 })
8b095871 18941
9987f0c1
IC
18942 // Copy inputs
18943 transaction.ins.forEach(function (txIn) {
18944 txb.__addInputUnsafe(txIn.hash, txIn.index, {
18945 sequence: txIn.sequence,
18946 script: txIn.script,
18947 witness: txIn.witness
18948 })
8b095871
IC
18949 })
18950
9987f0c1
IC
18951 // fix some things not possible through the public API
18952 txb.inputs.forEach(function (input, i) {
18953 fixMultisigOrder(input, transaction, i)
18954 })
8b095871 18955
9987f0c1 18956 return txb
8b095871
IC
18957}
18958
9987f0c1
IC
18959TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
18960 if (!this.__canModifyInputs()) {
18961 throw new Error('No, this would invalidate signatures')
18962 }
8b095871 18963
9987f0c1 18964 var value
8b095871 18965
9987f0c1
IC
18966 // is it a hex string?
18967 if (typeof txHash === 'string') {
18968 // transaction hashs's are displayed in reverse order, un-reverse it
18969 txHash = Buffer.from(txHash, 'hex').reverse()
8b095871 18970
9987f0c1
IC
18971 // is it a Transaction object?
18972 } else if (txHash instanceof Transaction) {
18973 var txOut = txHash.outs[vout]
18974 prevOutScript = txOut.script
18975 value = txOut.value
8b095871 18976
9987f0c1
IC
18977 txHash = txHash.getHash()
18978 }
8b095871 18979
9987f0c1
IC
18980 return this.__addInputUnsafe(txHash, vout, {
18981 sequence: sequence,
18982 prevOutScript: prevOutScript,
18983 value: value
18984 })
18985}
8b095871 18986
9987f0c1
IC
18987TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
18988 if (Transaction.isCoinbaseHash(txHash)) {
18989 throw new Error('coinbase inputs not supported')
18990 }
8b095871 18991
9987f0c1
IC
18992 var prevTxOut = txHash.toString('hex') + ':' + vout
18993 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
8b095871 18994
9987f0c1 18995 var input = {}
8b095871 18996
9987f0c1
IC
18997 // derive what we can from the scriptSig
18998 if (options.script !== undefined) {
18999 input = expandInput(options.script, options.witness || [])
8b095871
IC
19000 }
19001
9987f0c1
IC
19002 // if an input value was given, retain it
19003 if (options.value !== undefined) {
19004 input.value = options.value
8b095871 19005 }
8b095871 19006
9987f0c1
IC
19007 // derive what we can from the previous transactions output script
19008 if (!input.prevOutScript && options.prevOutScript) {
19009 var prevOutType
8b095871 19010
9987f0c1
IC
19011 if (!input.pubKeys && !input.signatures) {
19012 var expanded = expandOutput(options.prevOutScript)
8b095871 19013
9987f0c1
IC
19014 if (expanded.pubKeys) {
19015 input.pubKeys = expanded.pubKeys
19016 input.signatures = expanded.signatures
19017 }
8b095871 19018
9987f0c1
IC
19019 prevOutType = expanded.scriptType
19020 }
8b095871 19021
9987f0c1
IC
19022 input.prevOutScript = options.prevOutScript
19023 input.prevOutType = prevOutType || bscript.classifyOutput(options.prevOutScript)
19024 }
8b095871 19025
9987f0c1
IC
19026 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
19027 this.inputs[vin] = input
19028 this.prevTxMap[prevTxOut] = vin
8b095871 19029
9987f0c1
IC
19030 return vin
19031}
8b095871 19032
9987f0c1
IC
19033TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19034 if (!this.__canModifyOutputs()) {
19035 throw new Error('No, this would invalidate signatures')
8b095871
IC
19036 }
19037
9987f0c1
IC
19038 // Attempt to get a script if it's a base58 address string
19039 if (typeof scriptPubKey === 'string') {
19040 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
8b095871 19041 }
8b095871 19042
9987f0c1
IC
19043 return this.tx.addOutput(scriptPubKey, value)
19044}
8b095871 19045
9987f0c1
IC
19046TransactionBuilder.prototype.build = function () {
19047 return this.__build(false)
19048}
19049TransactionBuilder.prototype.buildIncomplete = function () {
19050 return this.__build(true)
19051}
8b095871 19052
9987f0c1
IC
19053TransactionBuilder.prototype.__build = function (allowIncomplete) {
19054 if (!allowIncomplete) {
19055 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
19056 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
19057 }
8b095871 19058
9987f0c1
IC
19059 var tx = this.tx.clone()
19060 // Create script signatures from inputs
19061 this.inputs.forEach(function (input, i) {
19062 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
19063 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
19064 var result = buildInput(input, allowIncomplete)
8b095871 19065
9987f0c1
IC
19066 // skip if no result
19067 if (!allowIncomplete) {
19068 if (SIGNABLE.indexOf(result.type) === -1 && result.type !== bscript.types.P2WPKH) {
19069 throw new Error(result.type + ' not supported')
19070 }
19071 }
8b095871 19072
9987f0c1
IC
19073 tx.setInputScript(i, result.script)
19074 tx.setWitness(i, result.witness)
19075 })
8b095871 19076
9987f0c1
IC
19077 if (!allowIncomplete) {
19078 // do not rely on this, its merely a last resort
19079 if (this.__overMaximumFees(tx.byteLength())) {
19080 throw new Error('Transaction has absurd fees')
19081 }
19082 }
8b095871 19083
9987f0c1 19084 return tx
8b095871
IC
19085}
19086
9987f0c1
IC
19087function canSign (input) {
19088 return input.prevOutScript !== undefined &&
19089 input.signScript !== undefined &&
19090 input.pubKeys !== undefined &&
19091 input.signatures !== undefined &&
19092 input.signatures.length === input.pubKeys.length &&
19093 input.pubKeys.length > 0 &&
19094 input.witness !== undefined
8b095871
IC
19095}
19096
9987f0c1
IC
19097TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
19098 if (keyPair.network !== this.network) throw new Error('Inconsistent network')
19099 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
19100 hashType = hashType || Transaction.SIGHASH_ALL
8b095871 19101
9987f0c1 19102 var input = this.inputs[vin]
8b095871 19103
9987f0c1
IC
19104 // if redeemScript was previously provided, enforce consistency
19105 if (input.redeemScript !== undefined &&
19106 redeemScript &&
19107 !input.redeemScript.equals(redeemScript)) {
19108 throw new Error('Inconsistent redeemScript')
19109 }
8b095871 19110
9987f0c1
IC
19111 var kpPubKey = keyPair.getPublicKeyBuffer()
19112 if (!canSign(input)) {
19113 prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
19114 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
19115 }
8b095871 19116
9987f0c1
IC
19117 // ready to sign
19118 var signatureHash
19119 if (input.witness) {
19120 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, witnessValue, hashType)
8b095871 19121 } else {
9987f0c1 19122 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
8b095871 19123 }
9987f0c1
IC
19124 // enforce in order signing of public keys
19125 var signed = input.pubKeys.some(function (pubKey, i) {
19126 if (!kpPubKey.equals(pubKey)) return false
19127 if (input.signatures[i]) throw new Error('Signature already exists')
8b095871 19128
9987f0c1
IC
19129 input.signatures[i] = keyPair.sign(signatureHash).toScriptSignature(hashType)
19130 return true
19131 })
8b095871 19132
9987f0c1 19133 if (!signed) throw new Error('Key pair cannot sign for this input')
8b095871
IC
19134}
19135
9987f0c1
IC
19136function signatureHashType (buffer) {
19137 return buffer.readUInt8(buffer.length - 1)
8b095871
IC
19138}
19139
9987f0c1
IC
19140TransactionBuilder.prototype.__canModifyInputs = function () {
19141 return this.inputs.every(function (input) {
19142 // any signatures?
19143 if (input.signatures === undefined) return true
8b095871 19144
9987f0c1
IC
19145 return input.signatures.every(function (signature) {
19146 if (!signature) return true
19147 var hashType = signatureHashType(signature)
8b095871 19148
9987f0c1
IC
19149 // if SIGHASH_ANYONECANPAY is set, signatures would not
19150 // be invalidated by more inputs
19151 return hashType & Transaction.SIGHASH_ANYONECANPAY
19152 })
19153 })
8b095871
IC
19154}
19155
9987f0c1
IC
19156TransactionBuilder.prototype.__canModifyOutputs = function () {
19157 var nInputs = this.tx.ins.length
19158 var nOutputs = this.tx.outs.length
8b095871 19159
9987f0c1
IC
19160 return this.inputs.every(function (input) {
19161 if (input.signatures === undefined) return true
8b095871 19162
9987f0c1
IC
19163 return input.signatures.every(function (signature) {
19164 if (!signature) return true
19165 var hashType = signatureHashType(signature)
8b095871 19166
9987f0c1
IC
19167 var hashTypeMod = hashType & 0x1f
19168 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
19169 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
19170 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
19171 // some signatures would be invalidated by the addition
19172 // of more outputs
19173 return nInputs <= nOutputs
19174 }
19175 })
19176 })
8b095871
IC
19177}
19178
9987f0c1
IC
19179TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
19180 // not all inputs will have .value defined
19181 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
8b095871 19182
9987f0c1
IC
19183 // but all outputs do, and if we have any input value
19184 // we can immediately determine if the outputs are too small
19185 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
19186 var fee = incoming - outgoing
19187 var feeRate = fee / bytes
8b095871 19188
9987f0c1 19189 return feeRate > this.maximumFeeRate
8b095871
IC
19190}
19191
9987f0c1 19192module.exports = TransactionBuilder
8b095871 19193
9987f0c1
IC
19194},{"./address":42,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./networks":51,"./script":52,"./transaction":76,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],78:[function(require,module,exports){
19195var typeforce = require('typeforce')
8b095871 19196
9987f0c1
IC
19197var UINT31_MAX = Math.pow(2, 31) - 1
19198function UInt31 (value) {
19199 return typeforce.UInt32(value) && value <= UINT31_MAX
19200}
8b095871 19201
9987f0c1
IC
19202function BIP32Path (value) {
19203 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
19204}
19205BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
8b095871 19206
9987f0c1
IC
19207var SATOSHI_MAX = 21 * 1e14
19208function Satoshi (value) {
19209 return typeforce.UInt53(value) && value <= SATOSHI_MAX
19210}
8b095871 19211
9987f0c1
IC
19212// external dependent types
19213var BigInt = typeforce.quacksLike('BigInteger')
19214var ECPoint = typeforce.quacksLike('Point')
8b095871 19215
9987f0c1
IC
19216// exposed, external API
19217var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
19218var Network = typeforce.compile({
19219 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
19220 bip32: {
19221 public: typeforce.UInt32,
19222 private: typeforce.UInt32
19223 },
19224 pubKeyHash: typeforce.UInt8,
19225 scriptHash: typeforce.UInt8,
19226 wif: typeforce.UInt8
19227})
8b095871 19228
9987f0c1
IC
19229// extend typeforce types with ours
19230var types = {
19231 BigInt: BigInt,
19232 BIP32Path: BIP32Path,
19233 Buffer256bit: typeforce.BufferN(32),
19234 ECPoint: ECPoint,
19235 ECSignature: ECSignature,
19236 Hash160bit: typeforce.BufferN(20),
19237 Hash256bit: typeforce.BufferN(32),
19238 Network: Network,
19239 Satoshi: Satoshi,
19240 UInt31: UInt31
19241}
8b095871 19242
9987f0c1
IC
19243for (var typeName in typeforce) {
19244 types[typeName] = typeforce[typeName]
19245}
8b095871 19246
9987f0c1 19247module.exports = types
8b095871 19248
9987f0c1
IC
19249},{"typeforce":109}],79:[function(require,module,exports){
19250var basex = require('base-x')
19251var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
8b095871 19252
9987f0c1 19253module.exports = basex(ALPHABET)
8b095871 19254
9987f0c1
IC
19255},{"base-x":34}],80:[function(require,module,exports){
19256(function (Buffer){
19257'use strict'
8b095871 19258
9987f0c1
IC
19259var base58 = require('bs58')
19260var createHash = require('create-hash')
8b095871 19261
9987f0c1
IC
19262// SHA256(SHA256(buffer))
19263function sha256x2 (buffer) {
19264 var tmp = createHash('sha256').update(buffer).digest()
19265 return createHash('sha256').update(tmp).digest()
19266}
8b095871 19267
9987f0c1
IC
19268// Encode a buffer as a base58-check encoded string
19269function encode (payload) {
19270 var checksum = sha256x2(payload)
8b095871 19271
9987f0c1
IC
19272 return base58.encode(Buffer.concat([
19273 payload,
19274 checksum
19275 ], payload.length + 4))
19276}
8b095871 19277
9987f0c1
IC
19278function decodeRaw (buffer) {
19279 var payload = buffer.slice(0, -4)
19280 var checksum = buffer.slice(-4)
19281 var newChecksum = sha256x2(payload)
8b095871 19282
9987f0c1
IC
19283 if (checksum[0] ^ newChecksum[0] |
19284 checksum[1] ^ newChecksum[1] |
19285 checksum[2] ^ newChecksum[2] |
19286 checksum[3] ^ newChecksum[3]) return
8b095871 19287
9987f0c1
IC
19288 return payload
19289}
8b095871 19290
9987f0c1
IC
19291// Decode a base58-check encoded string to a buffer, no result if checksum is wrong
19292function decodeUnsafe (string) {
19293 var buffer = base58.decodeUnsafe(string)
19294 if (!buffer) return
8b095871 19295
9987f0c1
IC
19296 return decodeRaw(buffer)
19297}
8b095871 19298
9987f0c1
IC
19299function decode (string) {
19300 var buffer = base58.decode(string)
19301 var payload = decodeRaw(buffer)
19302 if (!payload) throw new Error('Invalid checksum')
19303 return payload
19304}
8b095871 19305
9987f0c1
IC
19306module.exports = {
19307 encode: encode,
19308 decode: decode,
19309 decodeUnsafe: decodeUnsafe
19310}
8b095871 19311
9987f0c1
IC
19312}).call(this,require("buffer").Buffer)
19313},{"bs58":79,"buffer":4,"create-hash":82}],81:[function(require,module,exports){
19314var Buffer = require('safe-buffer').Buffer
19315var Transform = require('stream').Transform
19316var StringDecoder = require('string_decoder').StringDecoder
19317var inherits = require('inherits')
8b095871 19318
9987f0c1
IC
19319function CipherBase (hashMode) {
19320 Transform.call(this)
19321 this.hashMode = typeof hashMode === 'string'
19322 if (this.hashMode) {
19323 this[hashMode] = this._finalOrDigest
19324 } else {
19325 this.final = this._finalOrDigest
8b095871 19326 }
9987f0c1
IC
19327 if (this._final) {
19328 this.__final = this._final
19329 this._final = null
19330 }
19331 this._decoder = null
19332 this._encoding = null
8b095871 19333}
9987f0c1 19334inherits(CipherBase, Transform)
8b095871 19335
9987f0c1
IC
19336CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
19337 if (typeof data === 'string') {
19338 data = Buffer.from(data, inputEnc)
19339 }
8b095871 19340
9987f0c1
IC
19341 var outData = this._update(data)
19342 if (this.hashMode) return this
8b095871 19343
9987f0c1
IC
19344 if (outputEnc) {
19345 outData = this._toString(outData, outputEnc)
19346 }
8b095871 19347
9987f0c1
IC
19348 return outData
19349}
8b095871 19350
9987f0c1
IC
19351CipherBase.prototype.setAutoPadding = function () {}
19352CipherBase.prototype.getAuthTag = function () {
19353 throw new Error('trying to get auth tag in unsupported state')
19354}
8b095871 19355
9987f0c1
IC
19356CipherBase.prototype.setAuthTag = function () {
19357 throw new Error('trying to set auth tag in unsupported state')
19358}
8b095871 19359
9987f0c1
IC
19360CipherBase.prototype.setAAD = function () {
19361 throw new Error('trying to set aad in unsupported state')
19362}
8b095871 19363
9987f0c1
IC
19364CipherBase.prototype._transform = function (data, _, next) {
19365 var err
19366 try {
19367 if (this.hashMode) {
19368 this._update(data)
19369 } else {
19370 this.push(this._update(data))
19371 }
19372 } catch (e) {
19373 err = e
19374 } finally {
19375 next(err)
19376 }
19377}
19378CipherBase.prototype._flush = function (done) {
19379 var err
19380 try {
19381 this.push(this.__final())
19382 } catch (e) {
19383 err = e
8b095871
IC
19384 }
19385
9987f0c1
IC
19386 done(err)
19387}
19388CipherBase.prototype._finalOrDigest = function (outputEnc) {
19389 var outData = this.__final() || Buffer.alloc(0)
19390 if (outputEnc) {
19391 outData = this._toString(outData, outputEnc, true)
19392 }
19393 return outData
8b095871
IC
19394}
19395
9987f0c1
IC
19396CipherBase.prototype._toString = function (value, enc, fin) {
19397 if (!this._decoder) {
19398 this._decoder = new StringDecoder(enc)
19399 this._encoding = enc
19400 }
8b095871 19401
9987f0c1 19402 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
8b095871 19403
9987f0c1
IC
19404 var out = this._decoder.write(value)
19405 if (fin) {
19406 out += this._decoder.end()
19407 }
8b095871 19408
9987f0c1
IC
19409 return out
19410}
8b095871 19411
9987f0c1 19412module.exports = CipherBase
8b095871 19413
9987f0c1
IC
19414},{"inherits":93,"safe-buffer":98,"stream":27,"string_decoder":28}],82:[function(require,module,exports){
19415(function (Buffer){
19416'use strict'
19417var inherits = require('inherits')
19418var md5 = require('./md5')
19419var RIPEMD160 = require('ripemd160')
19420var sha = require('sha.js')
8b095871 19421
9987f0c1
IC
19422var Base = require('cipher-base')
19423
19424function HashNoConstructor (hash) {
19425 Base.call(this, 'digest')
8b095871 19426
9987f0c1
IC
19427 this._hash = hash
19428 this.buffers = []
8b095871
IC
19429}
19430
9987f0c1 19431inherits(HashNoConstructor, Base)
8b095871 19432
9987f0c1
IC
19433HashNoConstructor.prototype._update = function (data) {
19434 this.buffers.push(data)
8b095871
IC
19435}
19436
9987f0c1
IC
19437HashNoConstructor.prototype._final = function () {
19438 var buf = Buffer.concat(this.buffers)
19439 var r = this._hash(buf)
19440 this.buffers = null
8b095871 19441
9987f0c1
IC
19442 return r
19443}
8b095871 19444
9987f0c1
IC
19445function Hash (hash) {
19446 Base.call(this, 'digest')
8b095871 19447
9987f0c1
IC
19448 this._hash = hash
19449}
8b095871 19450
9987f0c1 19451inherits(Hash, Base)
8b095871 19452
9987f0c1
IC
19453Hash.prototype._update = function (data) {
19454 this._hash.update(data)
19455}
8b095871 19456
9987f0c1
IC
19457Hash.prototype._final = function () {
19458 return this._hash.digest()
19459}
8b095871 19460
9987f0c1
IC
19461module.exports = function createHash (alg) {
19462 alg = alg.toLowerCase()
19463 if (alg === 'md5') return new HashNoConstructor(md5)
19464 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
8b095871 19465
9987f0c1
IC
19466 return new Hash(sha(alg))
19467}
8b095871 19468
9987f0c1
IC
19469}).call(this,require("buffer").Buffer)
19470},{"./md5":84,"buffer":4,"cipher-base":81,"inherits":93,"ripemd160":97,"sha.js":100}],83:[function(require,module,exports){
19471(function (Buffer){
19472'use strict'
19473var intSize = 4
19474var zeroBuffer = new Buffer(intSize)
19475zeroBuffer.fill(0)
8b095871 19476
9987f0c1
IC
19477var charSize = 8
19478var hashSize = 16
8b095871 19479
9987f0c1
IC
19480function toArray (buf) {
19481 if ((buf.length % intSize) !== 0) {
19482 var len = buf.length + (intSize - (buf.length % intSize))
19483 buf = Buffer.concat([buf, zeroBuffer], len)
19484 }
8b095871 19485
9987f0c1
IC
19486 var arr = new Array(buf.length >>> 2)
19487 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
19488 arr[j] = buf.readInt32LE(i)
8b095871
IC
19489 }
19490
9987f0c1 19491 return arr
8b095871
IC
19492}
19493
9987f0c1
IC
19494module.exports = function hash (buf, fn) {
19495 var arr = fn(toArray(buf), buf.length * charSize)
19496 buf = new Buffer(hashSize)
19497 for (var i = 0; i < arr.length; i++) {
19498 buf.writeInt32LE(arr[i], i << 2, true)
19499 }
19500 return buf
8b095871
IC
19501}
19502
19503}).call(this,require("buffer").Buffer)
9987f0c1
IC
19504},{"buffer":4}],84:[function(require,module,exports){
19505'use strict'
19506/*
19507 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
19508 * Digest Algorithm, as defined in RFC 1321.
19509 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
19510 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
19511 * Distributed under the BSD License
19512 * See http://pajhome.org.uk/crypt/md5 for more info.
19513 */
8b095871 19514
9987f0c1 19515var makeHash = require('./make-hash')
8b095871 19516
9987f0c1
IC
19517/*
19518 * Calculate the MD5 of an array of little-endian words, and a bit length
19519 */
19520function core_md5 (x, len) {
19521 /* append padding */
19522 x[len >> 5] |= 0x80 << ((len) % 32)
19523 x[(((len + 64) >>> 9) << 4) + 14] = len
19524
19525 var a = 1732584193
19526 var b = -271733879
19527 var c = -1732584194
19528 var d = 271733878
19529
19530 for (var i = 0; i < x.length; i += 16) {
19531 var olda = a
19532 var oldb = b
19533 var oldc = c
19534 var oldd = d
19535
19536 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
19537 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
19538 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
19539 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
19540 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
19541 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
19542 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
19543 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
19544 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
19545 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
19546 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
19547 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
19548 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
19549 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
19550 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
19551 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
19552
19553 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
19554 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
19555 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
19556 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
19557 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
19558 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
19559 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
19560 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
19561 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
19562 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
19563 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
19564 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
19565 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
19566 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
19567 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
19568 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
19569
19570 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
19571 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
19572 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
19573 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
19574 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
19575 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
19576 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
19577 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
19578 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
19579 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
19580 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
19581 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
19582 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
19583 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
19584 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
19585 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
19586
19587 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
19588 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
19589 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
19590 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
19591 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
19592 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
19593 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
19594 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
19595 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
19596 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
19597 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
19598 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
19599 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
19600 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
19601 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
19602 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
19603
19604 a = safe_add(a, olda)
19605 b = safe_add(b, oldb)
19606 c = safe_add(c, oldc)
19607 d = safe_add(d, oldd)
19608 }
19609
19610 return [a, b, c, d]
19611}
8b095871 19612
9987f0c1
IC
19613/*
19614 * These functions implement the four basic operations the algorithm uses.
19615 */
19616function md5_cmn (q, a, b, x, s, t) {
19617 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
8b095871
IC
19618}
19619
9987f0c1
IC
19620function md5_ff (a, b, c, d, x, s, t) {
19621 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
19622}
8b095871 19623
9987f0c1
IC
19624function md5_gg (a, b, c, d, x, s, t) {
19625 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
19626}
8b095871 19627
9987f0c1
IC
19628function md5_hh (a, b, c, d, x, s, t) {
19629 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
19630}
8b095871 19631
9987f0c1
IC
19632function md5_ii (a, b, c, d, x, s, t) {
19633 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
19634}
8b095871 19635
9987f0c1
IC
19636/*
19637 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
19638 * to work around bugs in some JS interpreters.
19639 */
19640function safe_add (x, y) {
19641 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
19642 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
19643 return (msw << 16) | (lsw & 0xFFFF)
19644}
8b095871 19645
9987f0c1
IC
19646/*
19647 * Bitwise rotate a 32-bit number to the left.
19648 */
19649function bit_rol (num, cnt) {
19650 return (num << cnt) | (num >>> (32 - cnt))
19651}
8b095871 19652
9987f0c1
IC
19653module.exports = function md5 (buf) {
19654 return makeHash(buf, core_md5)
8b095871
IC
19655}
19656
9987f0c1
IC
19657},{"./make-hash":83}],85:[function(require,module,exports){
19658'use strict'
19659var inherits = require('inherits')
19660var Legacy = require('./legacy')
19661var Base = require('cipher-base')
19662var Buffer = require('safe-buffer').Buffer
19663var md5 = require('create-hash/md5')
19664var RIPEMD160 = require('ripemd160')
8b095871 19665
9987f0c1 19666var sha = require('sha.js')
8b095871 19667
9987f0c1 19668var ZEROS = Buffer.alloc(128)
8b095871 19669
9987f0c1
IC
19670function Hmac (alg, key) {
19671 Base.call(this, 'digest')
19672 if (typeof key === 'string') {
19673 key = Buffer.from(key)
19674 }
8b095871 19675
9987f0c1 19676 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
8b095871 19677
9987f0c1
IC
19678 this._alg = alg
19679 this._key = key
19680 if (key.length > blocksize) {
19681 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19682 key = hash.update(key).digest()
19683 } else if (key.length < blocksize) {
19684 key = Buffer.concat([key, ZEROS], blocksize)
19685 }
8b095871 19686
9987f0c1
IC
19687 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19688 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19689
9987f0c1
IC
19690 for (var i = 0; i < blocksize; i++) {
19691 ipad[i] = key[i] ^ 0x36
19692 opad[i] = key[i] ^ 0x5C
8b095871 19693 }
9987f0c1
IC
19694 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19695 this._hash.update(ipad)
19696}
8b095871 19697
9987f0c1
IC
19698inherits(Hmac, Base)
19699
19700Hmac.prototype._update = function (data) {
19701 this._hash.update(data)
8b095871
IC
19702}
19703
9987f0c1
IC
19704Hmac.prototype._final = function () {
19705 var h = this._hash.digest()
19706 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
19707 return hash.update(this._opad).update(h).digest()
8b095871
IC
19708}
19709
9987f0c1
IC
19710module.exports = function createHmac (alg, key) {
19711 alg = alg.toLowerCase()
19712 if (alg === 'rmd160' || alg === 'ripemd160') {
19713 return new Hmac('rmd160', key)
19714 }
19715 if (alg === 'md5') {
19716 return new Legacy(md5, key)
19717 }
19718 return new Hmac(alg, key)
19719}
8b095871 19720
9987f0c1
IC
19721},{"./legacy":86,"cipher-base":81,"create-hash/md5":84,"inherits":93,"ripemd160":97,"safe-buffer":98,"sha.js":100}],86:[function(require,module,exports){
19722'use strict'
19723var inherits = require('inherits')
19724var Buffer = require('safe-buffer').Buffer
8b095871 19725
9987f0c1 19726var Base = require('cipher-base')
8b095871 19727
9987f0c1
IC
19728var ZEROS = Buffer.alloc(128)
19729var blocksize = 64
8b095871 19730
9987f0c1
IC
19731function Hmac (alg, key) {
19732 Base.call(this, 'digest')
19733 if (typeof key === 'string') {
19734 key = Buffer.from(key)
8b095871
IC
19735 }
19736
9987f0c1
IC
19737 this._alg = alg
19738 this._key = key
8b095871 19739
9987f0c1
IC
19740 if (key.length > blocksize) {
19741 key = alg(key)
19742 } else if (key.length < blocksize) {
19743 key = Buffer.concat([key, ZEROS], blocksize)
19744 }
8b095871 19745
9987f0c1
IC
19746 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19747 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19748
9987f0c1
IC
19749 for (var i = 0; i < blocksize; i++) {
19750 ipad[i] = key[i] ^ 0x36
19751 opad[i] = key[i] ^ 0x5C
19752 }
8b095871 19753
9987f0c1 19754 this._hash = [ipad]
8b095871
IC
19755}
19756
9987f0c1 19757inherits(Hmac, Base)
8b095871 19758
9987f0c1
IC
19759Hmac.prototype._update = function (data) {
19760 this._hash.push(data)
8b095871
IC
19761}
19762
9987f0c1
IC
19763Hmac.prototype._final = function () {
19764 var h = this._alg(Buffer.concat(this._hash))
19765 return this._alg(Buffer.concat([this._opad, h]))
8b095871 19766}
9987f0c1 19767module.exports = Hmac
8b095871 19768
9987f0c1 19769},{"cipher-base":81,"inherits":93,"safe-buffer":98}],87:[function(require,module,exports){
8b095871 19770var assert = require('assert')
8b095871
IC
19771var BigInteger = require('bigi')
19772
9987f0c1 19773var Point = require('./point')
8b095871 19774
9987f0c1
IC
19775function Curve (p, a, b, Gx, Gy, n, h) {
19776 this.p = p
19777 this.a = a
19778 this.b = b
19779 this.G = Point.fromAffine(this, Gx, Gy)
19780 this.n = n
19781 this.h = h
8b095871 19782
9987f0c1 19783 this.infinity = new Point(this, null, null, BigInteger.ZERO)
8b095871 19784
9987f0c1
IC
19785 // result caching
19786 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
8b095871 19787
9987f0c1
IC
19788 // determine size of p in bytes
19789 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
19790}
8b095871 19791
9987f0c1
IC
19792Curve.prototype.pointFromX = function (isOdd, x) {
19793 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
19794 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
8b095871 19795
9987f0c1
IC
19796 var y = beta
19797 if (beta.isEven() ^ !isOdd) {
19798 y = this.p.subtract(y) // -y % p
8b095871 19799 }
9987f0c1
IC
19800
19801 return Point.fromAffine(this, x, y)
8b095871
IC
19802}
19803
9987f0c1
IC
19804Curve.prototype.isInfinity = function (Q) {
19805 if (Q === this.infinity) return true
8b095871 19806
9987f0c1
IC
19807 return Q.z.signum() === 0 && Q.y.signum() !== 0
19808}
8b095871 19809
9987f0c1
IC
19810Curve.prototype.isOnCurve = function (Q) {
19811 if (this.isInfinity(Q)) return true
8b095871 19812
9987f0c1
IC
19813 var x = Q.affineX
19814 var y = Q.affineY
19815 var a = this.a
19816 var b = this.b
19817 var p = this.p
8b095871 19818
9987f0c1
IC
19819 // Check that xQ and yQ are integers in the interval [0, p - 1]
19820 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
19821 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
8b095871 19822
9987f0c1
IC
19823 // and check that y^2 = x^3 + ax + b (mod p)
19824 var lhs = y.square().mod(p)
19825 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
19826 return lhs.equals(rhs)
19827}
8b095871 19828
9987f0c1
IC
19829/**
19830 * Validate an elliptic curve point.
19831 *
19832 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
19833 */
19834Curve.prototype.validate = function (Q) {
19835 // Check Q != O
19836 assert(!this.isInfinity(Q), 'Point is at infinity')
19837 assert(this.isOnCurve(Q), 'Point is not on the curve')
19838
19839 // Check nQ = O (where Q is a scalar multiple of G)
19840 var nQ = Q.multiply(this.n)
19841 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
8b095871 19842
9987f0c1
IC
19843 return true
19844}
8b095871 19845
9987f0c1 19846module.exports = Curve
8b095871 19847
9987f0c1
IC
19848},{"./point":91,"assert":1,"bigi":37}],88:[function(require,module,exports){
19849module.exports={
19850 "secp128r1": {
19851 "p": "fffffffdffffffffffffffffffffffff",
19852 "a": "fffffffdfffffffffffffffffffffffc",
19853 "b": "e87579c11079f43dd824993c2cee5ed3",
19854 "n": "fffffffe0000000075a30d1b9038a115",
19855 "h": "01",
19856 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
19857 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
19858 },
19859 "secp160k1": {
19860 "p": "fffffffffffffffffffffffffffffffeffffac73",
19861 "a": "00",
19862 "b": "07",
19863 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
19864 "h": "01",
19865 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
19866 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
19867 },
19868 "secp160r1": {
19869 "p": "ffffffffffffffffffffffffffffffff7fffffff",
19870 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
19871 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
19872 "n": "0100000000000000000001f4c8f927aed3ca752257",
19873 "h": "01",
19874 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
19875 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
19876 },
19877 "secp192k1": {
19878 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
19879 "a": "00",
19880 "b": "03",
19881 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
19882 "h": "01",
19883 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
19884 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
19885 },
19886 "secp192r1": {
19887 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
19888 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
19889 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
19890 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
19891 "h": "01",
19892 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
19893 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
19894 },
19895 "secp256k1": {
19896 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
19897 "a": "00",
19898 "b": "07",
19899 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
19900 "h": "01",
19901 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
19902 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
19903 },
19904 "secp256r1": {
19905 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
19906 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
19907 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
19908 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
19909 "h": "01",
19910 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
19911 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
19912 }
8b095871
IC
19913}
19914
9987f0c1
IC
19915},{}],89:[function(require,module,exports){
19916var Point = require('./point')
19917var Curve = require('./curve')
8b095871 19918
9987f0c1 19919var getCurveByName = require('./names')
8b095871 19920
9987f0c1
IC
19921module.exports = {
19922 Curve: Curve,
19923 Point: Point,
19924 getCurveByName: getCurveByName
8b095871
IC
19925}
19926
9987f0c1
IC
19927},{"./curve":87,"./names":90,"./point":91}],90:[function(require,module,exports){
19928var BigInteger = require('bigi')
8b095871 19929
9987f0c1
IC
19930var curves = require('./curves.json')
19931var Curve = require('./curve')
8b095871 19932
9987f0c1
IC
19933function getCurveByName (name) {
19934 var curve = curves[name]
19935 if (!curve) return null
8b095871 19936
9987f0c1
IC
19937 var p = new BigInteger(curve.p, 16)
19938 var a = new BigInteger(curve.a, 16)
19939 var b = new BigInteger(curve.b, 16)
19940 var n = new BigInteger(curve.n, 16)
19941 var h = new BigInteger(curve.h, 16)
19942 var Gx = new BigInteger(curve.Gx, 16)
19943 var Gy = new BigInteger(curve.Gy, 16)
8b095871 19944
9987f0c1 19945 return new Curve(p, a, b, Gx, Gy, n, h)
8b095871
IC
19946}
19947
9987f0c1 19948module.exports = getCurveByName
8b095871 19949
9987f0c1
IC
19950},{"./curve":87,"./curves.json":88,"bigi":37}],91:[function(require,module,exports){
19951(function (Buffer){
19952var assert = require('assert')
19953var BigInteger = require('bigi')
8b095871 19954
9987f0c1 19955var THREE = BigInteger.valueOf(3)
8b095871 19956
9987f0c1
IC
19957function Point (curve, x, y, z) {
19958 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
8b095871 19959
9987f0c1
IC
19960 this.curve = curve
19961 this.x = x
19962 this.y = y
19963 this.z = z
19964 this._zInv = null
8b095871 19965
9987f0c1 19966 this.compressed = true
8b095871
IC
19967}
19968
9987f0c1
IC
19969Object.defineProperty(Point.prototype, 'zInv', {
19970 get: function () {
19971 if (this._zInv === null) {
19972 this._zInv = this.z.modInverse(this.curve.p)
19973 }
8b095871 19974
9987f0c1
IC
19975 return this._zInv
19976 }
19977})
8b095871 19978
9987f0c1
IC
19979Object.defineProperty(Point.prototype, 'affineX', {
19980 get: function () {
19981 return this.x.multiply(this.zInv).mod(this.curve.p)
19982 }
19983})
19984
19985Object.defineProperty(Point.prototype, 'affineY', {
19986 get: function () {
19987 return this.y.multiply(this.zInv).mod(this.curve.p)
19988 }
19989})
19990
19991Point.fromAffine = function (curve, x, y) {
19992 return new Point(curve, x, y, BigInteger.ONE)
8b095871
IC
19993}
19994
9987f0c1
IC
19995Point.prototype.equals = function (other) {
19996 if (other === this) return true
19997 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
19998 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
8b095871 19999
9987f0c1
IC
20000 // u = Y2 * Z1 - Y1 * Z2
20001 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
8b095871 20002
9987f0c1 20003 if (u.signum() !== 0) return false
8b095871 20004
9987f0c1
IC
20005 // v = X2 * Z1 - X1 * Z2
20006 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
8b095871 20007
9987f0c1
IC
20008 return v.signum() === 0
20009}
8b095871 20010
9987f0c1
IC
20011Point.prototype.negate = function () {
20012 var y = this.curve.p.subtract(this.y)
8b095871 20013
9987f0c1 20014 return new Point(this.curve, this.x, y, this.z)
8b095871
IC
20015}
20016
9987f0c1
IC
20017Point.prototype.add = function (b) {
20018 if (this.curve.isInfinity(this)) return b
20019 if (this.curve.isInfinity(b)) return this
20020
20021 var x1 = this.x
20022 var y1 = this.y
20023 var x2 = b.x
20024 var y2 = b.y
8b095871 20025
9987f0c1
IC
20026 // u = Y2 * Z1 - Y1 * Z2
20027 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
20028 // v = X2 * Z1 - X1 * Z2
20029 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
8b095871 20030
9987f0c1
IC
20031 if (v.signum() === 0) {
20032 if (u.signum() === 0) {
20033 return this.twice() // this == b, so double
20034 }
8b095871 20035
9987f0c1 20036 return this.curve.infinity // this = -b, so infinity
8b095871 20037 }
9987f0c1
IC
20038
20039 var v2 = v.square()
20040 var v3 = v2.multiply(v)
20041 var x1v2 = x1.multiply(v2)
20042 var zu2 = u.square().multiply(this.z)
20043
20044 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
20045 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
20046 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
20047 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)
20048 // z3 = v^3 * z1 * z2
20049 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
20050
20051 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20052}
20053
9987f0c1
IC
20054Point.prototype.twice = function () {
20055 if (this.curve.isInfinity(this)) return this
20056 if (this.y.signum() === 0) return this.curve.infinity
8b095871 20057
9987f0c1
IC
20058 var x1 = this.x
20059 var y1 = this.y
8b095871 20060
9987f0c1
IC
20061 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
20062 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
20063 var a = this.curve.a
8b095871 20064
9987f0c1
IC
20065 // w = 3 * x1^2 + a * z1^2
20066 var w = x1.square().multiply(THREE)
8b095871 20067
9987f0c1
IC
20068 if (a.signum() !== 0) {
20069 w = w.add(this.z.square().multiply(a))
20070 }
8b095871 20071
9987f0c1
IC
20072 w = w.mod(this.curve.p)
20073 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
20074 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
20075 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
20076 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
20077 // z3 = 8 * (y1 * z1)^3
20078 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
8b095871 20079
9987f0c1 20080 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20081}
20082
9987f0c1
IC
20083// Simple NAF (Non-Adjacent Form) multiplication algorithm
20084// TODO: modularize the multiplication algorithm
20085Point.prototype.multiply = function (k) {
20086 if (this.curve.isInfinity(this)) return this
20087 if (k.signum() === 0) return this.curve.infinity
8b095871 20088
9987f0c1
IC
20089 var e = k
20090 var h = e.multiply(THREE)
8b095871 20091
9987f0c1
IC
20092 var neg = this.negate()
20093 var R = this
8b095871 20094
9987f0c1
IC
20095 for (var i = h.bitLength() - 2; i > 0; --i) {
20096 var hBit = h.testBit(i)
20097 var eBit = e.testBit(i)
8b095871 20098
9987f0c1 20099 R = R.twice()
8b095871 20100
9987f0c1
IC
20101 if (hBit !== eBit) {
20102 R = R.add(hBit ? this : neg)
20103 }
8b095871
IC
20104 }
20105
9987f0c1
IC
20106 return R
20107}
8b095871 20108
9987f0c1
IC
20109// Compute this*j + x*k (simultaneous multiplication)
20110Point.prototype.multiplyTwo = function (j, x, k) {
20111 var i = Math.max(j.bitLength(), k.bitLength()) - 1
20112 var R = this.curve.infinity
20113 var both = this.add(x)
20114
20115 while (i >= 0) {
20116 var jBit = j.testBit(i)
20117 var kBit = k.testBit(i)
20118
20119 R = R.twice()
20120
20121 if (jBit) {
20122 if (kBit) {
20123 R = R.add(both)
20124 } else {
20125 R = R.add(this)
20126 }
20127 } else if (kBit) {
20128 R = R.add(x)
20129 }
20130 --i
8b095871
IC
20131 }
20132
9987f0c1
IC
20133 return R
20134}
8b095871 20135
9987f0c1
IC
20136Point.prototype.getEncoded = function (compressed) {
20137 if (compressed == null) compressed = this.compressed
20138 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
8b095871 20139
9987f0c1
IC
20140 var x = this.affineX
20141 var y = this.affineY
20142 var byteLength = this.curve.pLength
20143 var buffer
20144
20145 // 0x02/0x03 | X
20146 if (compressed) {
20147 buffer = new Buffer(1 + byteLength)
20148 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
8b095871 20149
9987f0c1 20150 // 0x04 | X | Y
8b095871 20151 } else {
9987f0c1
IC
20152 buffer = new Buffer(1 + byteLength + byteLength)
20153 buffer.writeUInt8(0x04, 0)
8b095871 20154
9987f0c1 20155 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
8b095871
IC
20156 }
20157
9987f0c1 20158 x.toBuffer(byteLength).copy(buffer, 1)
8b095871 20159
9987f0c1 20160 return buffer
8b095871
IC
20161}
20162
9987f0c1
IC
20163Point.decodeFrom = function (curve, buffer) {
20164 var type = buffer.readUInt8(0)
20165 var compressed = (type !== 4)
8b095871 20166
9987f0c1
IC
20167 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
20168 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
8b095871 20169
9987f0c1
IC
20170 var Q
20171 if (compressed) {
20172 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
20173 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
8b095871 20174
9987f0c1
IC
20175 var isOdd = (type === 0x03)
20176 Q = curve.pointFromX(isOdd, x)
20177 } else {
20178 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
8b095871 20179
9987f0c1
IC
20180 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
20181 Q = Point.fromAffine(curve, x, y)
20182 }
8b095871 20183
9987f0c1
IC
20184 Q.compressed = compressed
20185 return Q
8b095871
IC
20186}
20187
9987f0c1
IC
20188Point.prototype.toString = function () {
20189 if (this.curve.isInfinity(this)) return '(INFINITY)'
8b095871 20190
9987f0c1
IC
20191 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
20192}
8b095871 20193
9987f0c1 20194module.exports = Point
8b095871 20195
9987f0c1
IC
20196}).call(this,require("buffer").Buffer)
20197},{"assert":1,"bigi":37,"buffer":4}],92:[function(require,module,exports){
20198(function (Buffer){
20199'use strict'
20200var Transform = require('stream').Transform
20201var inherits = require('inherits')
8b095871 20202
9987f0c1
IC
20203function HashBase (blockSize) {
20204 Transform.call(this)
8b095871 20205
9987f0c1
IC
20206 this._block = new Buffer(blockSize)
20207 this._blockSize = blockSize
20208 this._blockOffset = 0
20209 this._length = [0, 0, 0, 0]
8b095871 20210
9987f0c1
IC
20211 this._finalized = false
20212}
8b095871 20213
9987f0c1 20214inherits(HashBase, Transform)
8b095871 20215
9987f0c1
IC
20216HashBase.prototype._transform = function (chunk, encoding, callback) {
20217 var error = null
20218 try {
20219 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
20220 this.update(chunk)
20221 } catch (err) {
20222 error = err
20223 }
8b095871 20224
9987f0c1
IC
20225 callback(error)
20226}
8b095871 20227
9987f0c1
IC
20228HashBase.prototype._flush = function (callback) {
20229 var error = null
20230 try {
20231 this.push(this._digest())
20232 } catch (err) {
20233 error = err
8b095871
IC
20234 }
20235
9987f0c1 20236 callback(error)
8b095871
IC
20237}
20238
9987f0c1
IC
20239HashBase.prototype.update = function (data, encoding) {
20240 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
20241 if (this._finalized) throw new Error('Digest already called')
20242 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
8b095871 20243
9987f0c1
IC
20244 // consume data
20245 var block = this._block
20246 var offset = 0
20247 while (this._blockOffset + data.length - offset >= this._blockSize) {
20248 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
20249 this._update()
20250 this._blockOffset = 0
20251 }
20252 while (offset < data.length) block[this._blockOffset++] = data[offset++]
8b095871 20253
9987f0c1
IC
20254 // update length
20255 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
20256 this._length[j] += carry
20257 carry = (this._length[j] / 0x0100000000) | 0
20258 if (carry > 0) this._length[j] -= 0x0100000000 * carry
20259 }
8b095871 20260
9987f0c1
IC
20261 return this
20262}
8b095871 20263
9987f0c1
IC
20264HashBase.prototype._update = function (data) {
20265 throw new Error('_update is not implemented')
20266}
8b095871 20267
9987f0c1
IC
20268HashBase.prototype.digest = function (encoding) {
20269 if (this._finalized) throw new Error('Digest already called')
20270 this._finalized = true
8b095871 20271
9987f0c1
IC
20272 var digest = this._digest()
20273 if (encoding !== undefined) digest = digest.toString(encoding)
20274 return digest
20275}
8b095871 20276
9987f0c1
IC
20277HashBase.prototype._digest = function () {
20278 throw new Error('_digest is not implemented')
20279}
8b095871 20280
9987f0c1 20281module.exports = HashBase
8b095871 20282
9987f0c1
IC
20283}).call(this,require("buffer").Buffer)
20284},{"buffer":4,"inherits":93,"stream":27}],93:[function(require,module,exports){
20285arguments[4][8][0].apply(exports,arguments)
20286},{"dup":8}],94:[function(require,module,exports){
20287(function (Buffer){
20288// constant-space merkle root calculation algorithm
20289module.exports = function fastRoot (values, digestFn) {
20290 if (!Array.isArray(values)) throw TypeError('Expected values Array')
20291 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
8b095871 20292
9987f0c1
IC
20293 var length = values.length
20294 var results = values.concat()
8b095871 20295
9987f0c1
IC
20296 while (length > 1) {
20297 var j = 0
8b095871 20298
9987f0c1
IC
20299 for (var i = 0; i < length; i += 2, ++j) {
20300 var left = results[i]
20301 var right = i + 1 === length ? left : results[i + 1]
20302 var data = Buffer.concat([left, right])
8b095871 20303
9987f0c1 20304 results[j] = digestFn(data)
8b095871
IC
20305 }
20306
9987f0c1 20307 length = j
8b095871
IC
20308 }
20309
9987f0c1 20310 return results[0]
8b095871
IC
20311}
20312
8b095871 20313}).call(this,require("buffer").Buffer)
9987f0c1
IC
20314},{"buffer":4}],95:[function(require,module,exports){
20315var OPS = require('bitcoin-ops')
20316
20317function encodingLength (i) {
20318 return i < OPS.OP_PUSHDATA1 ? 1
20319 : i <= 0xff ? 2
20320 : i <= 0xffff ? 3
20321 : 5
8b095871
IC
20322}
20323
9987f0c1
IC
20324function encode (buffer, number, offset) {
20325 var size = encodingLength(number)
8b095871 20326
9987f0c1
IC
20327 // ~6 bit
20328 if (size === 1) {
20329 buffer.writeUInt8(number, offset)
8b095871 20330
9987f0c1
IC
20331 // 8 bit
20332 } else if (size === 2) {
20333 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
20334 buffer.writeUInt8(number, offset + 1)
20335
20336 // 16 bit
20337 } else if (size === 3) {
20338 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
20339 buffer.writeUInt16LE(number, offset + 1)
8b095871 20340
9987f0c1
IC
20341 // 32 bit
20342 } else {
20343 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
20344 buffer.writeUInt32LE(number, offset + 1)
20345 }
8b095871 20346
9987f0c1 20347 return size
8b095871
IC
20348}
20349
9987f0c1
IC
20350function decode (buffer, offset) {
20351 var opcode = buffer.readUInt8(offset)
20352 var number, size
8b095871 20353
9987f0c1
IC
20354 // ~6 bit
20355 if (opcode < OPS.OP_PUSHDATA1) {
20356 number = opcode
20357 size = 1
8b095871 20358
9987f0c1
IC
20359 // 8 bit
20360 } else if (opcode === OPS.OP_PUSHDATA1) {
20361 if (offset + 2 > buffer.length) return null
20362 number = buffer.readUInt8(offset + 1)
20363 size = 2
8b095871 20364
9987f0c1
IC
20365 // 16 bit
20366 } else if (opcode === OPS.OP_PUSHDATA2) {
20367 if (offset + 3 > buffer.length) return null
20368 number = buffer.readUInt16LE(offset + 1)
20369 size = 3
8b095871 20370
9987f0c1
IC
20371 // 32 bit
20372 } else {
20373 if (offset + 5 > buffer.length) return null
20374 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
8b095871 20375
9987f0c1
IC
20376 number = buffer.readUInt32LE(offset + 1)
20377 size = 5
20378 }
8b095871 20379
9987f0c1
IC
20380 return {
20381 opcode: opcode,
20382 number: number,
20383 size: size
20384 }
8b095871
IC
20385}
20386
20387module.exports = {
9987f0c1
IC
20388 encodingLength: encodingLength,
20389 encode: encode,
20390 decode: decode
8b095871
IC
20391}
20392
9987f0c1
IC
20393},{"bitcoin-ops":40}],96:[function(require,module,exports){
20394(function (process,global){
20395'use strict'
8b095871 20396
9987f0c1
IC
20397function oldBrowser () {
20398 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
8b095871
IC
20399}
20400
9987f0c1
IC
20401var Buffer = require('safe-buffer').Buffer
20402var crypto = global.crypto || global.msCrypto
8b095871 20403
9987f0c1
IC
20404if (crypto && crypto.getRandomValues) {
20405 module.exports = randomBytes
20406} else {
20407 module.exports = oldBrowser
20408}
8b095871 20409
9987f0c1
IC
20410function randomBytes (size, cb) {
20411 // phantomjs needs to throw
20412 if (size > 65536) throw new Error('requested too many random bytes')
20413 // in case browserify isn't using the Uint8Array version
20414 var rawBytes = new global.Uint8Array(size)
8b095871 20415
9987f0c1
IC
20416 // This will not work in older browsers.
20417 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
20418 if (size > 0) { // getRandomValues fails on IE if size == 0
20419 crypto.getRandomValues(rawBytes)
8b095871 20420 }
8b095871 20421
9987f0c1
IC
20422 // XXX: phantomjs doesn't like a buffer being passed here
20423 var bytes = Buffer.from(rawBytes.buffer)
8b095871 20424
9987f0c1
IC
20425 if (typeof cb === 'function') {
20426 return process.nextTick(function () {
20427 cb(null, bytes)
20428 })
20429 }
8b095871 20430
9987f0c1 20431 return bytes
8b095871
IC
20432}
20433
9987f0c1
IC
20434}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20435},{"_process":12,"safe-buffer":98}],97:[function(require,module,exports){
20436(function (Buffer){
20437'use strict'
20438var inherits = require('inherits')
20439var HashBase = require('hash-base')
8b095871 20440
9987f0c1
IC
20441function RIPEMD160 () {
20442 HashBase.call(this, 64)
8b095871 20443
9987f0c1
IC
20444 // state
20445 this._a = 0x67452301
20446 this._b = 0xefcdab89
20447 this._c = 0x98badcfe
20448 this._d = 0x10325476
20449 this._e = 0xc3d2e1f0
8b095871
IC
20450}
20451
9987f0c1
IC
20452inherits(RIPEMD160, HashBase)
20453
20454RIPEMD160.prototype._update = function () {
20455 var m = new Array(16)
20456 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
20457
20458 var al = this._a
20459 var bl = this._b
20460 var cl = this._c
20461 var dl = this._d
20462 var el = this._e
20463
20464 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
20465 // K = 0x00000000
20466 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
20467 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
20468 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
20469 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
20470 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
20471 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
20472 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
20473 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
20474 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
20475 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
20476 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
20477 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
20478 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
20479 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
20480 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
20481 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
20482 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
20483
20484 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
20485 // K = 0x5a827999
20486 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
20487 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
20488 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
20489 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
20490 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
20491 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
20492 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
20493 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
20494 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
20495 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
20496 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
20497 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
20498 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
20499 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
20500 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
20501 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
20502 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
20503
20504 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
20505 // K = 0x6ed9eba1
20506 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
20507 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
20508 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
20509 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
20510 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
20511 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
20512 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
20513 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
20514 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
20515 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
20516 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
20517 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
20518 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
20519 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
20520 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
20521 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
20522 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
20523
20524 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
20525 // K = 0x8f1bbcdc
20526 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
20527 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
20528 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
20529 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
20530 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
20531 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
20532 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
20533 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
20534 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20535 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
20536 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
20537 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
20538 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
20539 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20540 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
20541 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
20542 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
20543
20544 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
20545 // K = 0xa953fd4e
20546 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
20547 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
20548 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
20549 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
20550 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
20551 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
20552 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
20553 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
20554 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
20555 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
20556 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
20557 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
20558 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
20559 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
20560 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
20561 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
20562 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
20563
20564 var ar = this._a
20565 var br = this._b
20566 var cr = this._c
20567 var dr = this._d
20568 var er = this._e
20569
20570 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
20571 // K' = 0x50a28be6
20572 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
20573 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
20574 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
20575 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
20576 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
20577 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
20578 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
20579 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
20580 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
20581 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
20582 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
20583 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
20584 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
20585 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
20586 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
20587 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
20588 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
20589
20590 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
20591 // K' = 0x5c4dd124
20592 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
20593 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
20594 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
20595 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
20596 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
20597 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
20598 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
20599 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
20600 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
20601 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
20602 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
20603 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
20604 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
20605 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
20606 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
20607 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
20608 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
20609
20610 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
20611 // K' = 0x6d703ef3
20612 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
20613 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
20614 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
20615 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
20616 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
20617 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
20618 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
20619 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
20620 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
20621 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
20622 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
20623 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
20624 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
20625 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
20626 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
20627 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
20628 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
20629
20630 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
20631 // K' = 0x7a6d76e9
20632 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
20633 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
20634 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
20635 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
20636 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
20637 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
20638 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
20639 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
20640 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
20641 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
20642 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
20643 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
20644 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
20645 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
20646 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
20647 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
20648 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
20649
20650 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
20651 // K' = 0x00000000
20652 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
20653 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
20654 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
20655 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
20656 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
20657 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
20658 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
20659 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
20660 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
20661 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
20662 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
20663 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
20664 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
20665 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
20666 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
20667 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
20668 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
20669
20670 // change state
20671 var t = (this._b + cl + dr) | 0
20672 this._b = (this._c + dl + er) | 0
20673 this._c = (this._d + el + ar) | 0
20674 this._d = (this._e + al + br) | 0
20675 this._e = (this._a + bl + cr) | 0
20676 this._a = t
20677}
20678
20679RIPEMD160.prototype._digest = function () {
20680 // create padding and handle blocks
20681 this._block[this._blockOffset++] = 0x80
20682 if (this._blockOffset > 56) {
20683 this._block.fill(0, this._blockOffset, 64)
20684 this._update()
20685 this._blockOffset = 0
20686 }
20687
20688 this._block.fill(0, this._blockOffset, 56)
20689 this._block.writeUInt32LE(this._length[0], 56)
20690 this._block.writeUInt32LE(this._length[1], 60)
20691 this._update()
20692
20693 // produce result
20694 var buffer = new Buffer(20)
20695 buffer.writeInt32LE(this._a, 0)
20696 buffer.writeInt32LE(this._b, 4)
20697 buffer.writeInt32LE(this._c, 8)
20698 buffer.writeInt32LE(this._d, 12)
20699 buffer.writeInt32LE(this._e, 16)
20700 return buffer
20701}
8b095871 20702
9987f0c1
IC
20703function rotl (x, n) {
20704 return (x << n) | (x >>> (32 - n))
20705}
8b095871 20706
9987f0c1
IC
20707function fn1 (a, b, c, d, e, m, k, s) {
20708 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
20709}
8b095871 20710
9987f0c1
IC
20711function fn2 (a, b, c, d, e, m, k, s) {
20712 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
20713}
8b095871 20714
9987f0c1
IC
20715function fn3 (a, b, c, d, e, m, k, s) {
20716 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
20717}
8b095871 20718
9987f0c1
IC
20719function fn4 (a, b, c, d, e, m, k, s) {
20720 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
20721}
8b095871 20722
9987f0c1
IC
20723function fn5 (a, b, c, d, e, m, k, s) {
20724 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
20725}
8b095871 20726
9987f0c1 20727module.exports = RIPEMD160
8b095871 20728
9987f0c1
IC
20729}).call(this,require("buffer").Buffer)
20730},{"buffer":4,"hash-base":92,"inherits":93}],98:[function(require,module,exports){
20731arguments[4][26][0].apply(exports,arguments)
20732},{"buffer":4,"dup":26}],99:[function(require,module,exports){
20733(function (Buffer){
20734// prototype class for hash functions
20735function Hash (blockSize, finalSize) {
20736 this._block = new Buffer(blockSize)
20737 this._finalSize = finalSize
20738 this._blockSize = blockSize
20739 this._len = 0
20740 this._s = 0
20741}
20742
20743Hash.prototype.update = function (data, enc) {
20744 if (typeof data === 'string') {
20745 enc = enc || 'utf8'
20746 data = new Buffer(data, enc)
8b095871
IC
20747 }
20748
9987f0c1
IC
20749 var l = this._len += data.length
20750 var s = this._s || 0
20751 var f = 0
20752 var buffer = this._block
8b095871 20753
9987f0c1
IC
20754 while (s < l) {
20755 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
20756 var ch = (t - f)
8b095871 20757
9987f0c1
IC
20758 for (var i = 0; i < ch; i++) {
20759 buffer[(s % this._blockSize) + i] = data[i + f]
8b095871
IC
20760 }
20761
9987f0c1
IC
20762 s += ch
20763 f += ch
8b095871 20764
9987f0c1
IC
20765 if ((s % this._blockSize) === 0) {
20766 this._update(buffer)
20767 }
20768 }
20769 this._s = s
8b095871 20770
9987f0c1
IC
20771 return this
20772}
8b095871 20773
9987f0c1
IC
20774Hash.prototype.digest = function (enc) {
20775 // Suppose the length of the message M, in bits, is l
20776 var l = this._len * 8
8b095871 20777
9987f0c1
IC
20778 // Append the bit 1 to the end of the message
20779 this._block[this._len % this._blockSize] = 0x80
8b095871 20780
9987f0c1
IC
20781 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
20782 this._block.fill(0, this._len % this._blockSize + 1)
8b095871 20783
9987f0c1
IC
20784 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
20785 this._update(this._block)
20786 this._block.fill(0)
20787 }
8b095871 20788
9987f0c1
IC
20789 // to this append the block which is equal to the number l written in binary
20790 // TODO: handle case where l is > Math.pow(2, 29)
20791 this._block.writeInt32BE(l, this._blockSize - 4)
8b095871 20792
9987f0c1 20793 var hash = this._update(this._block) || this._hash()
8b095871 20794
9987f0c1 20795 return enc ? hash.toString(enc) : hash
8b095871
IC
20796}
20797
9987f0c1
IC
20798Hash.prototype._update = function () {
20799 throw new Error('_update must be implemented by subclass')
8b095871
IC
20800}
20801
9987f0c1 20802module.exports = Hash
8b095871 20803
9987f0c1
IC
20804}).call(this,require("buffer").Buffer)
20805},{"buffer":4}],100:[function(require,module,exports){
20806var exports = module.exports = function SHA (algorithm) {
20807 algorithm = algorithm.toLowerCase()
8b095871 20808
9987f0c1
IC
20809 var Algorithm = exports[algorithm]
20810 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8b095871 20811
9987f0c1 20812 return new Algorithm()
8b095871
IC
20813}
20814
9987f0c1
IC
20815exports.sha = require('./sha')
20816exports.sha1 = require('./sha1')
20817exports.sha224 = require('./sha224')
20818exports.sha256 = require('./sha256')
20819exports.sha384 = require('./sha384')
20820exports.sha512 = require('./sha512')
8b095871 20821
9987f0c1 20822},{"./sha":101,"./sha1":102,"./sha224":103,"./sha256":104,"./sha384":105,"./sha512":106}],101:[function(require,module,exports){
8b095871 20823(function (Buffer){
9987f0c1
IC
20824/*
20825 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
20826 * in FIPS PUB 180-1
20827 * This source code is derived from sha1.js of the same repository.
20828 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
20829 * operation was added.
20830 */
8b095871 20831
9987f0c1
IC
20832var inherits = require('inherits')
20833var Hash = require('./hash')
8b095871 20834
9987f0c1
IC
20835var K = [
20836 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20837]
8b095871 20838
9987f0c1 20839var W = new Array(80)
8b095871 20840
9987f0c1
IC
20841function Sha () {
20842 this.init()
20843 this._w = W
8b095871 20844
9987f0c1 20845 Hash.call(this, 64, 56)
8b095871
IC
20846}
20847
9987f0c1 20848inherits(Sha, Hash)
8b095871 20849
9987f0c1
IC
20850Sha.prototype.init = function () {
20851 this._a = 0x67452301
20852 this._b = 0xefcdab89
20853 this._c = 0x98badcfe
20854 this._d = 0x10325476
20855 this._e = 0xc3d2e1f0
8b095871 20856
9987f0c1 20857 return this
8b095871
IC
20858}
20859
9987f0c1
IC
20860function rotl5 (num) {
20861 return (num << 5) | (num >>> 27)
8b095871
IC
20862}
20863
9987f0c1
IC
20864function rotl30 (num) {
20865 return (num << 30) | (num >>> 2)
8b095871
IC
20866}
20867
9987f0c1
IC
20868function ft (s, b, c, d) {
20869 if (s === 0) return (b & c) | ((~b) & d)
20870 if (s === 2) return (b & c) | (b & d) | (c & d)
20871 return b ^ c ^ d
8b095871
IC
20872}
20873
9987f0c1
IC
20874Sha.prototype._update = function (M) {
20875 var W = this._w
8b095871 20876
9987f0c1
IC
20877 var a = this._a | 0
20878 var b = this._b | 0
20879 var c = this._c | 0
20880 var d = this._d | 0
20881 var e = this._e | 0
8b095871 20882
9987f0c1
IC
20883 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20884 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
8b095871 20885
9987f0c1
IC
20886 for (var j = 0; j < 80; ++j) {
20887 var s = ~~(j / 20)
20888 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20889
9987f0c1
IC
20890 e = d
20891 d = c
20892 c = rotl30(b)
20893 b = a
20894 a = t
20895 }
8b095871 20896
9987f0c1
IC
20897 this._a = (a + this._a) | 0
20898 this._b = (b + this._b) | 0
20899 this._c = (c + this._c) | 0
20900 this._d = (d + this._d) | 0
20901 this._e = (e + this._e) | 0
8b095871
IC
20902}
20903
9987f0c1
IC
20904Sha.prototype._hash = function () {
20905 var H = new Buffer(20)
8b095871 20906
9987f0c1
IC
20907 H.writeInt32BE(this._a | 0, 0)
20908 H.writeInt32BE(this._b | 0, 4)
20909 H.writeInt32BE(this._c | 0, 8)
20910 H.writeInt32BE(this._d | 0, 12)
20911 H.writeInt32BE(this._e | 0, 16)
8b095871 20912
9987f0c1 20913 return H
8b095871
IC
20914}
20915
9987f0c1 20916module.exports = Sha
8b095871 20917
9987f0c1
IC
20918}).call(this,require("buffer").Buffer)
20919},{"./hash":99,"buffer":4,"inherits":93}],102:[function(require,module,exports){
20920(function (Buffer){
20921/*
20922 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
20923 * in FIPS PUB 180-1
20924 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
20925 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
20926 * Distributed under the BSD License
20927 * See http://pajhome.org.uk/crypt/md5 for details.
20928 */
8b095871 20929
9987f0c1
IC
20930var inherits = require('inherits')
20931var Hash = require('./hash')
8b095871 20932
9987f0c1
IC
20933var K = [
20934 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20935]
8b095871 20936
9987f0c1 20937var W = new Array(80)
8b095871 20938
9987f0c1
IC
20939function Sha1 () {
20940 this.init()
20941 this._w = W
8b095871 20942
9987f0c1 20943 Hash.call(this, 64, 56)
8b095871
IC
20944}
20945
9987f0c1 20946inherits(Sha1, Hash)
8b095871 20947
9987f0c1
IC
20948Sha1.prototype.init = function () {
20949 this._a = 0x67452301
20950 this._b = 0xefcdab89
20951 this._c = 0x98badcfe
20952 this._d = 0x10325476
20953 this._e = 0xc3d2e1f0
8b095871 20954
9987f0c1 20955 return this
8b095871
IC
20956}
20957
9987f0c1
IC
20958function rotl1 (num) {
20959 return (num << 1) | (num >>> 31)
20960}
8b095871 20961
9987f0c1
IC
20962function rotl5 (num) {
20963 return (num << 5) | (num >>> 27)
8b095871
IC
20964}
20965
9987f0c1
IC
20966function rotl30 (num) {
20967 return (num << 30) | (num >>> 2)
8b095871
IC
20968}
20969
9987f0c1
IC
20970function ft (s, b, c, d) {
20971 if (s === 0) return (b & c) | ((~b) & d)
20972 if (s === 2) return (b & c) | (b & d) | (c & d)
20973 return b ^ c ^ d
8b095871
IC
20974}
20975
9987f0c1
IC
20976Sha1.prototype._update = function (M) {
20977 var W = this._w
8b095871 20978
9987f0c1
IC
20979 var a = this._a | 0
20980 var b = this._b | 0
20981 var c = this._c | 0
20982 var d = this._d | 0
20983 var e = this._e | 0
8b095871 20984
9987f0c1
IC
20985 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20986 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
8b095871 20987
9987f0c1
IC
20988 for (var j = 0; j < 80; ++j) {
20989 var s = ~~(j / 20)
20990 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20991
9987f0c1
IC
20992 e = d
20993 d = c
20994 c = rotl30(b)
20995 b = a
20996 a = t
20997 }
8b095871 20998
9987f0c1
IC
20999 this._a = (a + this._a) | 0
21000 this._b = (b + this._b) | 0
21001 this._c = (c + this._c) | 0
21002 this._d = (d + this._d) | 0
21003 this._e = (e + this._e) | 0
8b095871
IC
21004}
21005
9987f0c1
IC
21006Sha1.prototype._hash = function () {
21007 var H = new Buffer(20)
21008
21009 H.writeInt32BE(this._a | 0, 0)
21010 H.writeInt32BE(this._b | 0, 4)
21011 H.writeInt32BE(this._c | 0, 8)
21012 H.writeInt32BE(this._d | 0, 12)
21013 H.writeInt32BE(this._e | 0, 16)
8b095871 21014
9987f0c1 21015 return H
8b095871
IC
21016}
21017
9987f0c1 21018module.exports = Sha1
8b095871 21019
9987f0c1
IC
21020}).call(this,require("buffer").Buffer)
21021},{"./hash":99,"buffer":4,"inherits":93}],103:[function(require,module,exports){
21022(function (Buffer){
21023/**
21024 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21025 * in FIPS 180-2
21026 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21027 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21028 *
21029 */
8b095871 21030
9987f0c1
IC
21031var inherits = require('inherits')
21032var Sha256 = require('./sha256')
21033var Hash = require('./hash')
8b095871 21034
9987f0c1 21035var W = new Array(64)
8b095871 21036
9987f0c1
IC
21037function Sha224 () {
21038 this.init()
8b095871 21039
9987f0c1 21040 this._w = W // new Array(64)
8b095871 21041
9987f0c1 21042 Hash.call(this, 64, 56)
8b095871
IC
21043}
21044
9987f0c1 21045inherits(Sha224, Sha256)
8b095871 21046
9987f0c1
IC
21047Sha224.prototype.init = function () {
21048 this._a = 0xc1059ed8
21049 this._b = 0x367cd507
21050 this._c = 0x3070dd17
21051 this._d = 0xf70e5939
21052 this._e = 0xffc00b31
21053 this._f = 0x68581511
21054 this._g = 0x64f98fa7
21055 this._h = 0xbefa4fa4
21056
21057 return this
8b095871
IC
21058}
21059
9987f0c1
IC
21060Sha224.prototype._hash = function () {
21061 var H = new Buffer(28)
8b095871 21062
9987f0c1
IC
21063 H.writeInt32BE(this._a, 0)
21064 H.writeInt32BE(this._b, 4)
21065 H.writeInt32BE(this._c, 8)
21066 H.writeInt32BE(this._d, 12)
21067 H.writeInt32BE(this._e, 16)
21068 H.writeInt32BE(this._f, 20)
21069 H.writeInt32BE(this._g, 24)
8b095871 21070
9987f0c1 21071 return H
8b095871
IC
21072}
21073
9987f0c1 21074module.exports = Sha224
8b095871 21075
9987f0c1
IC
21076}).call(this,require("buffer").Buffer)
21077},{"./hash":99,"./sha256":104,"buffer":4,"inherits":93}],104:[function(require,module,exports){
21078(function (Buffer){
21079/**
21080 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21081 * in FIPS 180-2
21082 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21083 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21084 *
21085 */
8b095871 21086
9987f0c1
IC
21087var inherits = require('inherits')
21088var Hash = require('./hash')
8b095871 21089
9987f0c1
IC
21090var K = [
21091 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
21092 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
21093 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
21094 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
21095 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
21096 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
21097 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
21098 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
21099 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
21100 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
21101 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
21102 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
21103 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
21104 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
21105 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
21106 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
21107]
8b095871 21108
9987f0c1 21109var W = new Array(64)
8b095871 21110
9987f0c1
IC
21111function Sha256 () {
21112 this.init()
8b095871 21113
9987f0c1 21114 this._w = W // new Array(64)
8b095871 21115
9987f0c1
IC
21116 Hash.call(this, 64, 56)
21117}
8b095871 21118
9987f0c1 21119inherits(Sha256, Hash)
8b095871 21120
9987f0c1
IC
21121Sha256.prototype.init = function () {
21122 this._a = 0x6a09e667
21123 this._b = 0xbb67ae85
21124 this._c = 0x3c6ef372
21125 this._d = 0xa54ff53a
21126 this._e = 0x510e527f
21127 this._f = 0x9b05688c
21128 this._g = 0x1f83d9ab
21129 this._h = 0x5be0cd19
8b095871 21130
9987f0c1
IC
21131 return this
21132}
8b095871 21133
9987f0c1
IC
21134function ch (x, y, z) {
21135 return z ^ (x & (y ^ z))
8b095871
IC
21136}
21137
9987f0c1
IC
21138function maj (x, y, z) {
21139 return (x & y) | (z & (x | y))
8b095871
IC
21140}
21141
9987f0c1
IC
21142function sigma0 (x) {
21143 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
8b095871
IC
21144}
21145
9987f0c1
IC
21146function sigma1 (x) {
21147 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
21148}
8b095871 21149
9987f0c1
IC
21150function gamma0 (x) {
21151 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
21152}
8b095871 21153
9987f0c1
IC
21154function gamma1 (x) {
21155 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
21156}
8b095871 21157
9987f0c1
IC
21158Sha256.prototype._update = function (M) {
21159 var W = this._w
8b095871 21160
9987f0c1
IC
21161 var a = this._a | 0
21162 var b = this._b | 0
21163 var c = this._c | 0
21164 var d = this._d | 0
21165 var e = this._e | 0
21166 var f = this._f | 0
21167 var g = this._g | 0
21168 var h = this._h | 0
8b095871 21169
9987f0c1
IC
21170 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
21171 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
8b095871 21172
9987f0c1
IC
21173 for (var j = 0; j < 64; ++j) {
21174 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
21175 var T2 = (sigma0(a) + maj(a, b, c)) | 0
8b095871 21176
9987f0c1
IC
21177 h = g
21178 g = f
21179 f = e
21180 e = (d + T1) | 0
21181 d = c
21182 c = b
21183 b = a
21184 a = (T1 + T2) | 0
8b095871
IC
21185 }
21186
9987f0c1
IC
21187 this._a = (a + this._a) | 0
21188 this._b = (b + this._b) | 0
21189 this._c = (c + this._c) | 0
21190 this._d = (d + this._d) | 0
21191 this._e = (e + this._e) | 0
21192 this._f = (f + this._f) | 0
21193 this._g = (g + this._g) | 0
21194 this._h = (h + this._h) | 0
8b095871
IC
21195}
21196
9987f0c1
IC
21197Sha256.prototype._hash = function () {
21198 var H = new Buffer(32)
8b095871 21199
9987f0c1
IC
21200 H.writeInt32BE(this._a, 0)
21201 H.writeInt32BE(this._b, 4)
21202 H.writeInt32BE(this._c, 8)
21203 H.writeInt32BE(this._d, 12)
21204 H.writeInt32BE(this._e, 16)
21205 H.writeInt32BE(this._f, 20)
21206 H.writeInt32BE(this._g, 24)
21207 H.writeInt32BE(this._h, 28)
8b095871 21208
9987f0c1 21209 return H
8b095871
IC
21210}
21211
9987f0c1 21212module.exports = Sha256
8b095871 21213
9987f0c1
IC
21214}).call(this,require("buffer").Buffer)
21215},{"./hash":99,"buffer":4,"inherits":93}],105:[function(require,module,exports){
21216(function (Buffer){
21217var inherits = require('inherits')
21218var SHA512 = require('./sha512')
21219var Hash = require('./hash')
8b095871 21220
9987f0c1 21221var W = new Array(160)
8b095871 21222
9987f0c1
IC
21223function Sha384 () {
21224 this.init()
21225 this._w = W
8b095871 21226
9987f0c1
IC
21227 Hash.call(this, 128, 112)
21228}
8b095871 21229
9987f0c1 21230inherits(Sha384, SHA512)
8b095871 21231
9987f0c1
IC
21232Sha384.prototype.init = function () {
21233 this._ah = 0xcbbb9d5d
21234 this._bh = 0x629a292a
21235 this._ch = 0x9159015a
21236 this._dh = 0x152fecd8
21237 this._eh = 0x67332667
21238 this._fh = 0x8eb44a87
21239 this._gh = 0xdb0c2e0d
21240 this._hh = 0x47b5481d
8b095871 21241
9987f0c1
IC
21242 this._al = 0xc1059ed8
21243 this._bl = 0x367cd507
21244 this._cl = 0x3070dd17
21245 this._dl = 0xf70e5939
21246 this._el = 0xffc00b31
21247 this._fl = 0x68581511
21248 this._gl = 0x64f98fa7
21249 this._hl = 0xbefa4fa4
8b095871 21250
9987f0c1 21251 return this
8b095871
IC
21252}
21253
9987f0c1
IC
21254Sha384.prototype._hash = function () {
21255 var H = new Buffer(48)
8b095871 21256
9987f0c1
IC
21257 function writeInt64BE (h, l, offset) {
21258 H.writeInt32BE(h, offset)
21259 H.writeInt32BE(l, offset + 4)
21260 }
8b095871 21261
9987f0c1
IC
21262 writeInt64BE(this._ah, this._al, 0)
21263 writeInt64BE(this._bh, this._bl, 8)
21264 writeInt64BE(this._ch, this._cl, 16)
21265 writeInt64BE(this._dh, this._dl, 24)
21266 writeInt64BE(this._eh, this._el, 32)
21267 writeInt64BE(this._fh, this._fl, 40)
8b095871 21268
9987f0c1
IC
21269 return H
21270}
8b095871 21271
9987f0c1 21272module.exports = Sha384
8b095871 21273
9987f0c1
IC
21274}).call(this,require("buffer").Buffer)
21275},{"./hash":99,"./sha512":106,"buffer":4,"inherits":93}],106:[function(require,module,exports){
21276(function (Buffer){
21277var inherits = require('inherits')
21278var Hash = require('./hash')
8b095871 21279
9987f0c1
IC
21280var K = [
21281 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
21282 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
21283 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
21284 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
21285 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
21286 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
21287 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
21288 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
21289 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
21290 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
21291 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
21292 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
21293 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
21294 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
21295 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
21296 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
21297 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
21298 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
21299 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
21300 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
21301 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
21302 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
21303 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
21304 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
21305 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
21306 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
21307 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
21308 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
21309 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
21310 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
21311 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
21312 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
21313 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
21314 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
21315 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
21316 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
21317 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
21318 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
21319 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
21320 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
21321]
8b095871 21322
9987f0c1 21323var W = new Array(160)
8b095871 21324
9987f0c1
IC
21325function Sha512 () {
21326 this.init()
21327 this._w = W
8b095871 21328
9987f0c1
IC
21329 Hash.call(this, 128, 112)
21330}
8b095871 21331
9987f0c1 21332inherits(Sha512, Hash)
8b095871 21333
9987f0c1
IC
21334Sha512.prototype.init = function () {
21335 this._ah = 0x6a09e667
21336 this._bh = 0xbb67ae85
21337 this._ch = 0x3c6ef372
21338 this._dh = 0xa54ff53a
21339 this._eh = 0x510e527f
21340 this._fh = 0x9b05688c
21341 this._gh = 0x1f83d9ab
21342 this._hh = 0x5be0cd19
8b095871 21343
9987f0c1
IC
21344 this._al = 0xf3bcc908
21345 this._bl = 0x84caa73b
21346 this._cl = 0xfe94f82b
21347 this._dl = 0x5f1d36f1
21348 this._el = 0xade682d1
21349 this._fl = 0x2b3e6c1f
21350 this._gl = 0xfb41bd6b
21351 this._hl = 0x137e2179
8b095871 21352
9987f0c1 21353 return this
8b095871
IC
21354}
21355
9987f0c1
IC
21356function Ch (x, y, z) {
21357 return z ^ (x & (y ^ z))
8b095871
IC
21358}
21359
9987f0c1
IC
21360function maj (x, y, z) {
21361 return (x & y) | (z & (x | y))
8b095871
IC
21362}
21363
9987f0c1
IC
21364function sigma0 (x, xl) {
21365 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
21366}
8b095871 21367
9987f0c1
IC
21368function sigma1 (x, xl) {
21369 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
21370}
8b095871 21371
9987f0c1
IC
21372function Gamma0 (x, xl) {
21373 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
8b095871
IC
21374}
21375
9987f0c1
IC
21376function Gamma0l (x, xl) {
21377 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
21378}
8b095871 21379
9987f0c1
IC
21380function Gamma1 (x, xl) {
21381 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
21382}
8b095871 21383
9987f0c1
IC
21384function Gamma1l (x, xl) {
21385 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
21386}
8b095871 21387
9987f0c1
IC
21388function getCarry (a, b) {
21389 return (a >>> 0) < (b >>> 0) ? 1 : 0
8b095871
IC
21390}
21391
9987f0c1
IC
21392Sha512.prototype._update = function (M) {
21393 var W = this._w
8b095871 21394
9987f0c1
IC
21395 var ah = this._ah | 0
21396 var bh = this._bh | 0
21397 var ch = this._ch | 0
21398 var dh = this._dh | 0
21399 var eh = this._eh | 0
21400 var fh = this._fh | 0
21401 var gh = this._gh | 0
21402 var hh = this._hh | 0
8b095871 21403
9987f0c1
IC
21404 var al = this._al | 0
21405 var bl = this._bl | 0
21406 var cl = this._cl | 0
21407 var dl = this._dl | 0
21408 var el = this._el | 0
21409 var fl = this._fl | 0
21410 var gl = this._gl | 0
21411 var hl = this._hl | 0
8b095871 21412
9987f0c1
IC
21413 for (var i = 0; i < 32; i += 2) {
21414 W[i] = M.readInt32BE(i * 4)
21415 W[i + 1] = M.readInt32BE(i * 4 + 4)
21416 }
21417 for (; i < 160; i += 2) {
21418 var xh = W[i - 15 * 2]
21419 var xl = W[i - 15 * 2 + 1]
21420 var gamma0 = Gamma0(xh, xl)
21421 var gamma0l = Gamma0l(xl, xh)
8b095871 21422
9987f0c1
IC
21423 xh = W[i - 2 * 2]
21424 xl = W[i - 2 * 2 + 1]
21425 var gamma1 = Gamma1(xh, xl)
21426 var gamma1l = Gamma1l(xl, xh)
8b095871 21427
9987f0c1
IC
21428 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
21429 var Wi7h = W[i - 7 * 2]
21430 var Wi7l = W[i - 7 * 2 + 1]
8b095871 21431
9987f0c1
IC
21432 var Wi16h = W[i - 16 * 2]
21433 var Wi16l = W[i - 16 * 2 + 1]
8b095871 21434
9987f0c1
IC
21435 var Wil = (gamma0l + Wi7l) | 0
21436 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
21437 Wil = (Wil + gamma1l) | 0
21438 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
21439 Wil = (Wil + Wi16l) | 0
21440 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
8b095871 21441
9987f0c1
IC
21442 W[i] = Wih
21443 W[i + 1] = Wil
8b095871
IC
21444 }
21445
9987f0c1
IC
21446 for (var j = 0; j < 160; j += 2) {
21447 Wih = W[j]
21448 Wil = W[j + 1]
8b095871 21449
9987f0c1
IC
21450 var majh = maj(ah, bh, ch)
21451 var majl = maj(al, bl, cl)
8b095871 21452
9987f0c1
IC
21453 var sigma0h = sigma0(ah, al)
21454 var sigma0l = sigma0(al, ah)
21455 var sigma1h = sigma1(eh, el)
21456 var sigma1l = sigma1(el, eh)
8b095871 21457
9987f0c1
IC
21458 // t1 = h + sigma1 + ch + K[j] + W[j]
21459 var Kih = K[j]
21460 var Kil = K[j + 1]
8b095871 21461
9987f0c1
IC
21462 var chh = Ch(eh, fh, gh)
21463 var chl = Ch(el, fl, gl)
8b095871 21464
9987f0c1
IC
21465 var t1l = (hl + sigma1l) | 0
21466 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
21467 t1l = (t1l + chl) | 0
21468 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
21469 t1l = (t1l + Kil) | 0
21470 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
21471 t1l = (t1l + Wil) | 0
21472 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
8b095871 21473
9987f0c1
IC
21474 // t2 = sigma0 + maj
21475 var t2l = (sigma0l + majl) | 0
21476 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
21477
21478 hh = gh
21479 hl = gl
21480 gh = fh
21481 gl = fl
21482 fh = eh
21483 fl = el
21484 el = (dl + t1l) | 0
21485 eh = (dh + t1h + getCarry(el, dl)) | 0
21486 dh = ch
21487 dl = cl
21488 ch = bh
21489 cl = bl
21490 bh = ah
21491 bl = al
21492 al = (t1l + t2l) | 0
21493 ah = (t1h + t2h + getCarry(al, t1l)) | 0
21494 }
8b095871 21495
9987f0c1
IC
21496 this._al = (this._al + al) | 0
21497 this._bl = (this._bl + bl) | 0
21498 this._cl = (this._cl + cl) | 0
21499 this._dl = (this._dl + dl) | 0
21500 this._el = (this._el + el) | 0
21501 this._fl = (this._fl + fl) | 0
21502 this._gl = (this._gl + gl) | 0
21503 this._hl = (this._hl + hl) | 0
8b095871 21504
9987f0c1
IC
21505 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
21506 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
21507 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
21508 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
21509 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
21510 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
21511 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
21512 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
21513}
8b095871 21514
9987f0c1
IC
21515Sha512.prototype._hash = function () {
21516 var H = new Buffer(64)
8b095871 21517
9987f0c1
IC
21518 function writeInt64BE (h, l, offset) {
21519 H.writeInt32BE(h, offset)
21520 H.writeInt32BE(l, offset + 4)
8b095871
IC
21521 }
21522
9987f0c1
IC
21523 writeInt64BE(this._ah, this._al, 0)
21524 writeInt64BE(this._bh, this._bl, 8)
21525 writeInt64BE(this._ch, this._cl, 16)
21526 writeInt64BE(this._dh, this._dl, 24)
21527 writeInt64BE(this._eh, this._el, 32)
21528 writeInt64BE(this._fh, this._fl, 40)
21529 writeInt64BE(this._gh, this._gl, 48)
21530 writeInt64BE(this._hh, this._hl, 56)
21531
21532 return H
8b095871
IC
21533}
21534
9987f0c1 21535module.exports = Sha512
8b095871 21536
9987f0c1
IC
21537}).call(this,require("buffer").Buffer)
21538},{"./hash":99,"buffer":4,"inherits":93}],107:[function(require,module,exports){
21539var inherits = require('inherits')
21540var native = require('./native')
8b095871 21541
9987f0c1
IC
21542function TfTypeError (type, value, valueTypeName) {
21543 this.__error = Error.call(this)
21544 this.__type = type
21545 this.__value = value
21546 this.__valueTypeName = valueTypeName
8b095871 21547
9987f0c1
IC
21548 var message
21549 Object.defineProperty(this, 'message', {
21550 enumerable: true,
21551 get: function () {
21552 if (message) return message
8b095871 21553
9987f0c1
IC
21554 valueTypeName = valueTypeName || getValueTypeName(value)
21555 message = tfErrorString(type, value, valueTypeName)
8b095871 21556
9987f0c1
IC
21557 return message
21558 }
8b095871 21559 })
9987f0c1 21560}
8b095871 21561
9987f0c1
IC
21562function TfPropertyTypeError (type, property, label, value, error, valueTypeName) {
21563 this.__error = error || Error.call(this)
21564 this.__label = label
21565 this.__property = property
21566 this.__type = type
21567 this.__value = value
21568 this.__valueTypeName = valueTypeName
8b095871 21569
9987f0c1
IC
21570 var message
21571 Object.defineProperty(this, 'message', {
21572 enumerable: true,
21573 get: function () {
21574 if (message) return message
21575 if (type) {
21576 valueTypeName = valueTypeName || getValueTypeName(value)
21577 message = tfPropertyErrorString(type, label, property, value, valueTypeName)
21578 } else {
21579 message = 'Unexpected property "' + property + '"'
21580 }
8b095871 21581
9987f0c1
IC
21582 return message
21583 }
8b095871 21584 })
8b095871
IC
21585}
21586
9987f0c1
IC
21587// inherit from Error, assign stack
21588[TfTypeError, TfPropertyTypeError].forEach(function (tfErrorType) {
21589 inherits(tfErrorType, Error)
21590 Object.defineProperty(tfErrorType, 'stack', {
21591 get: function () { return this.__error.stack }
21592 })
21593})
8b095871 21594
9987f0c1
IC
21595function tfCustomError (expected, actual) {
21596 return new TfTypeError(expected, {}, actual)
21597}
8b095871 21598
9987f0c1
IC
21599function tfSubError (e, property, label) {
21600 // sub child?
21601 if (e instanceof TfPropertyTypeError) {
21602 property = property + '.' + e.__property
21603 label = e.__label
8b095871 21604
9987f0c1
IC
21605 return new TfPropertyTypeError(
21606 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21607 )
8b095871
IC
21608 }
21609
9987f0c1
IC
21610 // child?
21611 if (e instanceof TfTypeError) {
21612 return new TfPropertyTypeError(
21613 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21614 )
21615 }
8b095871 21616
9987f0c1
IC
21617 return e
21618}
8b095871 21619
9987f0c1
IC
21620function getTypeName (fn) {
21621 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
21622}
8b095871 21623
9987f0c1
IC
21624function getValueTypeName (value) {
21625 return native.Nil(value) ? '' : getTypeName(value.constructor)
21626}
8b095871 21627
9987f0c1
IC
21628function getValue (value) {
21629 if (native.Function(value)) return ''
21630 if (native.String(value)) return JSON.stringify(value)
21631 if (value && native.Object(value)) return ''
21632 return value
21633}
8b095871 21634
9987f0c1
IC
21635function tfJSON (type) {
21636 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
21637 if (native.Array(type)) return 'Array'
21638 if (type && native.Object(type)) return 'Object'
8b095871 21639
9987f0c1
IC
21640 return type !== undefined ? type : ''
21641}
8b095871 21642
9987f0c1
IC
21643function tfErrorString (type, value, valueTypeName) {
21644 var valueJson = getValue(value)
8b095871 21645
9987f0c1
IC
21646 return 'Expected ' + tfJSON(type) + ', got' +
21647 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
21648 (valueJson !== '' ? ' ' + valueJson : '')
8b095871
IC
21649}
21650
9987f0c1
IC
21651function tfPropertyErrorString (type, label, name, value, valueTypeName) {
21652 var description = '" of type '
21653 if (label === 'key') description = '" with key type '
8b095871 21654
9987f0c1 21655 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
8b095871
IC
21656}
21657
9987f0c1
IC
21658module.exports = {
21659 TfTypeError: TfTypeError,
21660 TfPropertyTypeError: TfPropertyTypeError,
21661 tfCustomError: tfCustomError,
21662 tfSubError: tfSubError,
21663 tfJSON: tfJSON,
21664 getValueTypeName: getValueTypeName
8b095871
IC
21665}
21666
9987f0c1
IC
21667},{"./native":110,"inherits":93}],108:[function(require,module,exports){
21668(function (Buffer){
21669var NATIVE = require('./native')
21670var ERRORS = require('./errors')
21671
21672function _Buffer (value) {
21673 return Buffer.isBuffer(value)
8b095871
IC
21674}
21675
9987f0c1
IC
21676function Hex (value) {
21677 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
21678}
8b095871 21679
9987f0c1
IC
21680function _LengthN (type, length) {
21681 var name = type.toJSON()
8b095871 21682
9987f0c1
IC
21683 function Length (value) {
21684 if (!type(value)) return false
21685 if (value.length === length) return true
8b095871 21686
9987f0c1
IC
21687 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
21688 }
21689 Length.toJSON = function () { return name }
8b095871 21690
9987f0c1
IC
21691 return Length
21692}
8b095871 21693
9987f0c1
IC
21694var _ArrayN = _LengthN.bind(null, NATIVE.Array)
21695var _BufferN = _LengthN.bind(null, _Buffer)
21696var _HexN = _LengthN.bind(null, Hex)
8b095871 21697
9987f0c1 21698var UINT53_MAX = Math.pow(2, 53) - 1
8b095871 21699
9987f0c1
IC
21700function Finite (value) {
21701 return typeof value === 'number' && isFinite(value)
21702}
21703function Int8 (value) { return ((value << 24) >> 24) === value }
21704function Int16 (value) { return ((value << 16) >> 16) === value }
21705function Int32 (value) { return (value | 0) === value }
21706function UInt8 (value) { return (value & 0xff) === value }
21707function UInt16 (value) { return (value & 0xffff) === value }
21708function UInt32 (value) { return (value >>> 0) === value }
21709function UInt53 (value) {
21710 return typeof value === 'number' &&
21711 value >= 0 &&
21712 value <= UINT53_MAX &&
21713 Math.floor(value) === value
21714}
8b095871 21715
9987f0c1
IC
21716var types = {
21717 ArrayN: _ArrayN,
21718 Buffer: _Buffer,
21719 BufferN: _BufferN,
21720 Finite: Finite,
21721 Hex: Hex,
21722 HexN: _HexN,
21723 Int8: Int8,
21724 Int16: Int16,
21725 Int32: Int32,
21726 UInt8: UInt8,
21727 UInt16: UInt16,
21728 UInt32: UInt32,
21729 UInt53: UInt53
21730}
8b095871 21731
9987f0c1
IC
21732for (var typeName in types) {
21733 types[typeName].toJSON = function (t) {
21734 return t
21735 }.bind(null, typeName)
21736}
8b095871 21737
9987f0c1 21738module.exports = types
8b095871 21739
9987f0c1
IC
21740}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
21741},{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":9,"./errors":107,"./native":110}],109:[function(require,module,exports){
21742var ERRORS = require('./errors')
21743var NATIVE = require('./native')
8b095871 21744
9987f0c1
IC
21745// short-hand
21746var tfJSON = ERRORS.tfJSON
21747var TfTypeError = ERRORS.TfTypeError
21748var TfPropertyTypeError = ERRORS.TfPropertyTypeError
21749var tfSubError = ERRORS.tfSubError
21750var getValueTypeName = ERRORS.getValueTypeName
8b095871 21751
9987f0c1
IC
21752var TYPES = {
21753 arrayOf: function arrayOf (type) {
21754 type = compile(type)
8b095871 21755
9987f0c1
IC
21756 function _arrayOf (array, strict) {
21757 if (!NATIVE.Array(array)) return false
8b095871 21758
9987f0c1
IC
21759 return array.every(function (value, i) {
21760 try {
21761 return typeforce(type, value, strict)
21762 } catch (e) {
21763 throw tfSubError(e, i)
21764 }
21765 })
8b095871 21766 }
9987f0c1 21767 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
8b095871 21768
9987f0c1
IC
21769 return _arrayOf
21770 },
8b095871 21771
9987f0c1
IC
21772 maybe: function maybe (type) {
21773 type = compile(type)
8b095871 21774
9987f0c1
IC
21775 function _maybe (value, strict) {
21776 return NATIVE.Nil(value) || type(value, strict, maybe)
21777 }
21778 _maybe.toJSON = function () { return '?' + tfJSON(type) }
8b095871 21779
9987f0c1
IC
21780 return _maybe
21781 },
8b095871 21782
9987f0c1
IC
21783 map: function map (propertyType, propertyKeyType) {
21784 propertyType = compile(propertyType)
21785 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
8b095871 21786
9987f0c1
IC
21787 function _map (value, strict) {
21788 if (!NATIVE.Object(value, strict)) return false
21789 if (NATIVE.Nil(value, strict)) return false
8b095871 21790
9987f0c1
IC
21791 for (var propertyName in value) {
21792 try {
21793 if (propertyKeyType) {
21794 typeforce(propertyKeyType, propertyName, strict)
21795 }
21796 } catch (e) {
21797 throw tfSubError(e, propertyName, 'key')
8b095871
IC
21798 }
21799
9987f0c1
IC
21800 try {
21801 var propertyValue = value[propertyName]
21802 typeforce(propertyType, propertyValue, strict)
21803 } catch (e) {
21804 throw tfSubError(e, propertyName)
8b095871
IC
21805 }
21806 }
21807
9987f0c1
IC
21808 return true
21809 }
8b095871 21810
9987f0c1
IC
21811 if (propertyKeyType) {
21812 _map.toJSON = function () {
21813 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
8b095871 21814 }
9987f0c1
IC
21815 } else {
21816 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
8b095871
IC
21817 }
21818
9987f0c1
IC
21819 return _map
21820 },
8b095871 21821
9987f0c1
IC
21822 object: function object (uncompiled) {
21823 var type = {}
8b095871 21824
9987f0c1
IC
21825 for (var typePropertyName in uncompiled) {
21826 type[typePropertyName] = compile(uncompiled[typePropertyName])
21827 }
8b095871 21828
9987f0c1
IC
21829 function _object (value, strict) {
21830 if (!NATIVE.Object(value)) return false
21831 if (NATIVE.Nil(value)) return false
8b095871 21832
9987f0c1 21833 var propertyName
8b095871 21834
9987f0c1
IC
21835 try {
21836 for (propertyName in type) {
21837 var propertyType = type[propertyName]
21838 var propertyValue = value[propertyName]
8b095871 21839
9987f0c1
IC
21840 typeforce(propertyType, propertyValue, strict)
21841 }
21842 } catch (e) {
21843 throw tfSubError(e, propertyName)
21844 }
8b095871 21845
9987f0c1
IC
21846 if (strict) {
21847 for (propertyName in value) {
21848 if (type[propertyName]) continue
8b095871 21849
9987f0c1
IC
21850 throw new TfPropertyTypeError(undefined, propertyName)
21851 }
21852 }
8b095871 21853
9987f0c1
IC
21854 return true
21855 }
21856 _object.toJSON = function () { return tfJSON(type) }
8b095871 21857
9987f0c1
IC
21858 return _object
21859 },
8b095871 21860
9987f0c1
IC
21861 oneOf: function oneOf () {
21862 var types = [].slice.call(arguments).map(compile)
8b095871 21863
9987f0c1
IC
21864 function _oneOf (value, strict) {
21865 return types.some(function (type) {
21866 try {
21867 return typeforce(type, value, strict)
21868 } catch (e) {
21869 return false
21870 }
21871 })
21872 }
21873 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
8b095871 21874
9987f0c1
IC
21875 return _oneOf
21876 },
8b095871 21877
9987f0c1
IC
21878 quacksLike: function quacksLike (type) {
21879 function _quacksLike (value) {
21880 return type === getValueTypeName(value)
21881 }
21882 _quacksLike.toJSON = function () { return type }
8b095871 21883
9987f0c1
IC
21884 return _quacksLike
21885 },
8b095871 21886
9987f0c1
IC
21887 tuple: function tuple () {
21888 var types = [].slice.call(arguments).map(compile)
8b095871 21889
9987f0c1
IC
21890 function _tuple (values, strict) {
21891 return types.every(function (type, i) {
21892 try {
21893 return typeforce(type, values[i], strict)
21894 } catch (e) {
21895 throw tfSubError(e, i)
21896 }
21897 }) && (!strict || values.length === arguments.length)
21898 }
21899 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
8b095871 21900
9987f0c1
IC
21901 return _tuple
21902 },
8b095871 21903
9987f0c1
IC
21904 value: function value (expected) {
21905 function _value (actual) {
21906 return actual === expected
21907 }
21908 _value.toJSON = function () { return expected }
8b095871 21909
9987f0c1 21910 return _value
8b095871
IC
21911 }
21912}
21913
9987f0c1
IC
21914function compile (type) {
21915 if (NATIVE.String(type)) {
21916 if (type[0] === '?') return TYPES.maybe(compile(type.slice(1)))
8b095871 21917
9987f0c1
IC
21918 return NATIVE[type] || TYPES.quacksLike(type)
21919 } else if (type && NATIVE.Object(type)) {
21920 if (NATIVE.Array(type)) return TYPES.arrayOf(compile(type[0]))
8b095871 21921
9987f0c1
IC
21922 return TYPES.object(type)
21923 } else if (NATIVE.Function(type)) {
21924 return type
21925 }
8b095871 21926
9987f0c1
IC
21927 return TYPES.value(type)
21928}
8b095871 21929
9987f0c1
IC
21930function typeforce (type, value, strict, surrogate) {
21931 if (NATIVE.Function(type)) {
21932 if (type(value, strict)) return true
8b095871 21933
9987f0c1 21934 throw new TfTypeError(surrogate || type, value)
ab78acc6 21935 }
8b095871 21936
9987f0c1
IC
21937 // JIT
21938 return typeforce(compile(type), value, strict)
21939}
8b095871 21940
9987f0c1
IC
21941// assign types to typeforce function
21942for (var typeName in NATIVE) {
21943 typeforce[typeName] = NATIVE[typeName]
8b095871
IC
21944}
21945
9987f0c1
IC
21946for (typeName in TYPES) {
21947 typeforce[typeName] = TYPES[typeName]
8b095871
IC
21948}
21949
9987f0c1
IC
21950var EXTRA = require('./extra')
21951for (typeName in EXTRA) {
21952 typeforce[typeName] = EXTRA[typeName]
8b095871
IC
21953}
21954
9987f0c1
IC
21955// async wrapper
21956function __async (type, value, strict, callback) {
21957 // default to falsy strict if using shorthand overload
21958 if (typeof strict === 'function') return __async(type, value, false, strict)
8b095871 21959
9987f0c1
IC
21960 try {
21961 typeforce(type, value, strict)
21962 } catch (e) {
21963 return callback(e)
21964 }
8b095871 21965
9987f0c1
IC
21966 callback()
21967}
8b095871 21968
9987f0c1
IC
21969typeforce.async = __async
21970typeforce.compile = compile
21971typeforce.TfTypeError = TfTypeError
21972typeforce.TfPropertyTypeError = TfPropertyTypeError
8b095871 21973
9987f0c1 21974module.exports = typeforce
8b095871 21975
9987f0c1
IC
21976},{"./errors":107,"./extra":108,"./native":110}],110:[function(require,module,exports){
21977var types = {
21978 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
21979 Boolean: function (value) { return typeof value === 'boolean' },
21980 Function: function (value) { return typeof value === 'function' },
21981 Nil: function (value) { return value === undefined || value === null },
21982 Number: function (value) { return typeof value === 'number' },
21983 Object: function (value) { return typeof value === 'object' },
21984 String: function (value) { return typeof value === 'string' },
21985 '': function () { return true }
21986}
8b095871 21987
9987f0c1
IC
21988// TODO: deprecate
21989types.Null = types.Nil
8b095871 21990
9987f0c1
IC
21991for (var typeName in types) {
21992 types[typeName].toJSON = function (t) {
21993 return t
21994 }.bind(null, typeName)
21995}
8b095871 21996
9987f0c1 21997module.exports = types
8b095871 21998
9987f0c1
IC
21999},{}],111:[function(require,module,exports){
22000(function (Buffer){
22001'use strict'
8b095871 22002
9987f0c1
IC
22003// Number.MAX_SAFE_INTEGER
22004var MAX_SAFE_INTEGER = 9007199254740991
8b095871 22005
9987f0c1
IC
22006function checkUInt53 (n) {
22007 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
8b095871
IC
22008}
22009
9987f0c1
IC
22010function encode (number, buffer, offset) {
22011 checkUInt53(number)
8b095871 22012
9987f0c1
IC
22013 if (!buffer) buffer = new Buffer(encodingLength(number))
22014 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22015 if (!offset) offset = 0
8b095871 22016
9987f0c1
IC
22017 // 8 bit
22018 if (number < 0xfd) {
22019 buffer.writeUInt8(number, offset)
22020 encode.bytes = 1
8b095871 22021
9987f0c1
IC
22022 // 16 bit
22023 } else if (number <= 0xffff) {
22024 buffer.writeUInt8(0xfd, offset)
22025 buffer.writeUInt16LE(number, offset + 1)
22026 encode.bytes = 3
8b095871 22027
9987f0c1
IC
22028 // 32 bit
22029 } else if (number <= 0xffffffff) {
22030 buffer.writeUInt8(0xfe, offset)
22031 buffer.writeUInt32LE(number, offset + 1)
22032 encode.bytes = 5
8b095871 22033
9987f0c1
IC
22034 // 64 bit
22035 } else {
22036 buffer.writeUInt8(0xff, offset)
22037 buffer.writeUInt32LE(number >>> 0, offset + 1)
22038 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
22039 encode.bytes = 9
ab78acc6 22040 }
8b095871 22041
9987f0c1 22042 return buffer
8b095871
IC
22043}
22044
9987f0c1
IC
22045function decode (buffer, offset) {
22046 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22047 if (!offset) offset = 0
8b095871 22048
9987f0c1 22049 var first = buffer.readUInt8(offset)
8b095871 22050
9987f0c1
IC
22051 // 8 bit
22052 if (first < 0xfd) {
22053 decode.bytes = 1
22054 return first
8b095871 22055
9987f0c1
IC
22056 // 16 bit
22057 } else if (first === 0xfd) {
22058 decode.bytes = 3
22059 return buffer.readUInt16LE(offset + 1)
8b095871 22060
9987f0c1
IC
22061 // 32 bit
22062 } else if (first === 0xfe) {
22063 decode.bytes = 5
22064 return buffer.readUInt32LE(offset + 1)
8b095871 22065
9987f0c1
IC
22066 // 64 bit
22067 } else {
22068 decode.bytes = 9
22069 var lo = buffer.readUInt32LE(offset + 1)
22070 var hi = buffer.readUInt32LE(offset + 5)
22071 var number = hi * 0x0100000000 + lo
22072 checkUInt53(number)
8b095871 22073
9987f0c1 22074 return number
8b095871 22075 }
ab78acc6
IC
22076}
22077
9987f0c1
IC
22078function encodingLength (number) {
22079 checkUInt53(number)
8b095871 22080
9987f0c1
IC
22081 return (
22082 number < 0xfd ? 1
22083 : number <= 0xffff ? 3
22084 : number <= 0xffffffff ? 5
22085 : 9
22086 )
ab78acc6 22087}
3af2954a 22088
9987f0c1 22089module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
3af2954a 22090
9987f0c1
IC
22091}).call(this,require("buffer").Buffer)
22092},{"buffer":4}],112:[function(require,module,exports){
22093(function (Buffer){
22094var bs58check = require('bs58check')
3af2954a 22095
9987f0c1
IC
22096function decodeRaw (buffer, version) {
22097 // check version only if defined
22098 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
3af2954a 22099
9987f0c1
IC
22100 // uncompressed
22101 if (buffer.length === 33) {
22102 return {
22103 version: buffer[0],
22104 privateKey: buffer.slice(1, 33),
22105 compressed: false
ab78acc6 22106 }
9987f0c1 22107 }
8b095871 22108
9987f0c1
IC
22109 // invalid length
22110 if (buffer.length !== 34) throw new Error('Invalid WIF length')
8b095871 22111
9987f0c1
IC
22112 // invalid compression flag
22113 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
8b095871 22114
9987f0c1
IC
22115 return {
22116 version: buffer[0],
22117 privateKey: buffer.slice(1, 33),
22118 compressed: true
22119 }
22120}
3af2954a 22121
9987f0c1
IC
22122function encodeRaw (version, privateKey, compressed) {
22123 var result = new Buffer(compressed ? 34 : 33)
8b095871 22124
9987f0c1
IC
22125 result.writeUInt8(version, 0)
22126 privateKey.copy(result, 1)
3af2954a 22127
9987f0c1
IC
22128 if (compressed) {
22129 result[33] = 0x01
22130 }
8b095871 22131
9987f0c1
IC
22132 return result
22133}
8b095871 22134
9987f0c1
IC
22135function decode (string, version) {
22136 return decodeRaw(bs58check.decode(string), version)
ab78acc6 22137}
3af2954a 22138
9987f0c1
IC
22139function encode (version, privateKey, compressed) {
22140 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
8b095871 22141
9987f0c1
IC
22142 return bs58check.encode(
22143 encodeRaw(
22144 version.version,
22145 version.privateKey,
22146 version.compressed
22147 )
22148 )
ab78acc6 22149}
3af2954a 22150
9987f0c1
IC
22151module.exports = {
22152 decode: decode,
22153 decodeRaw: decodeRaw,
22154 encode: encode,
22155 encodeRaw: encodeRaw
22156}
8b095871
IC
22157
22158}).call(this,require("buffer").Buffer)
9987f0c1 22159},{"bs58check":80,"buffer":4}]},{},[33])(33)
8d18f379
IC
22160});
22161</script>
9987f0c1 22162 <script>bitcoinjs.bitcoin.networks.shadow = {
861750ae 22163 messagePrefix: 'unused',
8b095871
IC
22164 bip32: {
22165 public: 0xEE80286A,
22166 private: 0xEE8031E8
22167 },
22168 pubKeyHash: 0x3f,
22169 scriptHash: 0x7d,
861750ae 22170 wif: 0xbf
8b095871
IC
22171};
22172
9987f0c1 22173bitcoinjs.bitcoin.networks.shadowtn = {
861750ae 22174 messagePrefix: 'unused',
8b095871
IC
22175 bip32: {
22176 public: 0x76C0FDFB,
22177 private: 0x76C1077A
22178 },
22179 pubKeyHash: 0x7f,
22180 scriptHash: 0xc4,
861750ae 22181 wif: 0xff
8b095871 22182};
3af2954a 22183
9987f0c1 22184bitcoinjs.bitcoin.networks.clam = {
861750ae 22185 messagePrefix: 'unused',
8b095871
IC
22186 bip32: {
22187 public: 0xa8c26d64,
22188 private: 0xa8c17826
22189 },
22190 pubKeyHash: 0x89,
9987f0c1 22191 scriptHash: 0x00, // TODO set this correctly
861750ae 22192 wif: 0x85
8b095871 22193};
3af2954a 22194
9987f0c1 22195bitcoinjs.bitcoin.networks.crown = {
861750ae 22196 messagePrefix: 'unused',
0921f370 22197 bip32: {
22198 public: 0x0488b21e,
22199 private: 0x0488ade4
22200 },
22201 pubKeyHash: 0x00,
22202 scriptHash: 0x05,
861750ae 22203 wif: 0x80
0921f370 22204};
22205
9987f0c1 22206bitcoinjs.bitcoin.networks.dash = {
861750ae 22207 messagePrefix: 'unused',
8b095871
IC
22208 bip32: {
22209 public: 0x0488b21e,
22210 private: 0x0488ade4
22211 },
22212 pubKeyHash: 0x4c,
22213 scriptHash: 0x10,
861750ae 22214 wif: 0xcc
8b095871 22215};
ab78acc6 22216
56ad9601 22217bitcoinjs.bitcoin.networks.maza = {
861750ae 22218 messagePrefix: 'unused',
56ad9601
JS
22219 bip32: {
22220 public: 0x0488b21e,
22221 private: 0x0488ade4
22222 },
22223 pubKeyHash: 0x32,
22224 scriptHash: 0x09,
861750ae 22225 wif: 0xe0
56ad9601
JS
22226};
22227
9987f0c1 22228bitcoinjs.bitcoin.networks.dashtn = {
861750ae 22229 messagePrefix: 'unused',
c0386f3b
KR
22230 bip32: {
22231 public: 0x043587cf,
22232 private: 0x04358394
22233 },
22234 pubKeyHash: 0x8c,
22235 scriptHash: 0x13,
861750ae 22236 wif: 0xef
c0386f3b
KR
22237};
22238
9987f0c1 22239bitcoinjs.bitcoin.networks.game = {
861750ae 22240 messagePrefix: 'unused',
f88fab20 22241 bip32: {
22242 public: 0x0488b21e,
22243 private: 0x0488ade4
22244 },
22245 pubKeyHash: 0x26,
22246 scriptHash: 0x05,
861750ae 22247 wif: 0xa6
f88fab20 22248};
22249
9987f0c1 22250bitcoinjs.bitcoin.networks.namecoin = {
861750ae 22251 messagePrefix: 'unused',
8b095871
IC
22252 bip32: {
22253 public: 0x0488b21e,
22254 private: 0x0488ade4
22255 },
22256 pubKeyHash: 0x34,
9987f0c1 22257 scriptHash: 0x00, // TODO set this correctly
861750ae 22258 wif: 0x80
8b095871 22259};
3af2954a 22260
9987f0c1 22261bitcoinjs.bitcoin.networks.peercoin = {
861750ae 22262 messagePrefix: 'unused',
8b095871
IC
22263 bip32: {
22264 public: 0x0488b21e,
22265 private: 0x0488ade4
22266 },
22267 pubKeyHash: 0x37,
9987f0c1 22268 scriptHash: 0x00, // TODO set this correctly
861750ae 22269 wif: 0xb7
8b095871 22270};
3af2954a 22271
9987f0c1 22272bitcoinjs.bitcoin.networks.slimcoin = {
861750ae 22273 messagePrefix: 'unused',
01e81e53
GH
22274 bip32: {
22275 public: 0xef6adf10,
22276 private: 0xef69ea80
22277 },
22278 pubKeyHash: 0x3f,
22279 scriptHash: 0x7d,
861750ae 22280 wif: 0x46
01e81e53
GH
22281};
22282
9987f0c1 22283bitcoinjs.bitcoin.networks.slimcointn = {
861750ae 22284 messagePrefix: 'unused',
01e81e53
GH
22285 bip32: {
22286 public: 0x043587CF,
22287 private: 0x04358394
22288 },
22289 pubKeyHash: 0x6f,
22290 scriptHash: 0xc4,
861750ae 22291 wif: 0x57
01e81e53
GH
22292};
22293
9987f0c1
IC
22294bitcoinjs.bitcoin.networks.dogecoin = {
22295 messagePrefix: '\x19Dogecoin Signed Message:\n',
22296 bip32: {
22297 public: 0x02facafd,
22298 private: 0x02fac398
22299 },
22300 pubKeyHash: 0x1e,
22301 scriptHash: 0x16,
861750ae
JC
22302 wif: 0x9e
22303};
9987f0c1
IC
22304
22305bitcoinjs.bitcoin.networks.viacoin = {
22306 messagePrefix: '\x18Viacoin Signed Message:\n',
22307 bip32: {
22308 public: 0x0488b21e,
22309 private: 0x0488ade4
22310 },
22311 pubKeyHash: 0x47,
22312 scriptHash: 0x21,
861750ae
JC
22313 wif: 0xc7
22314};
9987f0c1
IC
22315
22316bitcoinjs.bitcoin.networks.viacointestnet = {
22317 messagePrefix: '\x18Viacoin Signed Message:\n',
22318 bip32: {
22319 public: 0x043587cf,
22320 private: 0x04358394
22321 },
22322 pubKeyHash: 0x7f,
22323 scriptHash: 0xc4,
861750ae
JC
22324 wif: 0xff
22325};
9987f0c1
IC
22326
22327bitcoinjs.bitcoin.networks.gamerscoin = {
22328 messagePrefix: '\x19Gamerscoin Signed Message:\n',
22329 bip32: {
22330 public: 0x019da462,
22331 private: 0x019d9cfe
22332 },
22333 pubKeyHash: 0x26,
22334 scriptHash: 0x05,
861750ae
JC
22335 wif: 0xA6
22336};
9987f0c1
IC
22337
22338bitcoinjs.bitcoin.networks.jumbucks = {
22339 messagePrefix: '\x19Jumbucks Signed Message:\n',
22340 bip32: {
22341 public: 0x037a689a,
22342 private: 0x037a6460
22343 },
22344 pubKeyHash: 0x2b,
22345 scriptHash: 0x05,
861750ae
JC
22346 wif: 0xab
22347};
9987f0c1
IC
22348
22349bitcoinjs.bitcoin.networks.zetacoin = {
22350 messagePrefix: '\x18Zetacoin Signed Message:\n',
22351 bip32: {
22352 public: 0x0488b21e,
22353 private: 0x0488ade4
22354 },
22355 pubKeyHash: 0x50,
22356 scriptHash: 0x09,
861750ae
JC
22357 wif: 0xe0
22358};
b3cc3930
IC
22359
22360bitcoinjs.bitcoin.networks.myriadcoin = {
861750ae 22361 messagePrefix: 'unused',
b3cc3930
IC
22362 bip32: {
22363 public: 0x0488b21e,
22364 private: 0x0488ade4
22365 },
22366 pubKeyHash: 0x32,
22367 scriptHash: 0x00, // TODO set this correctly
861750ae 22368 wif: 0xb2
b3cc3930 22369};
f128bd58
IC
22370
22371bitcoinjs.bitcoin.networks.pivx = {
861750ae 22372 messagePrefix: 'unused',
f128bd58
IC
22373 bip32: {
22374 public: 0x022d2533,
22375 private: 0x0221312b
22376 },
22377 pubKeyHash: 0x1e,
22378 scriptHash: 0x0d,
861750ae 22379 wif: 0xd4
f128bd58
IC
22380};
22381
22382bitcoinjs.bitcoin.networks.pivxtestnet = {
861750ae 22383 messagePrefix: 'unused',
f128bd58
IC
22384 bip32: {
22385 public: 0x3a8061a0,
22386 private: 0x3a805837
22387 },
22388 pubKeyHash: 0x8b,
22389 scriptHash: 0x13,
861750ae 22390 wif: 0xef
f128bd58 22391};
1102f201
IC
22392
22393bitcoinjs.bitcoin.networks.fujicoin = {
22394 messagePrefix: '\x19FujiCoin Signed Message:\n',
22395 bip32: {
22396 public: 0x0488b21e,
22397 private: 0x0488ade4
22398 },
22399 pubKeyHash: 0x24,
22400 scriptHash: 0x10,
22401 wif: 0xa4
22402};
8b095871
IC
22403</script>
22404 <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){
22405(function (global){
22406'use strict';
3af2954a 22407
8b095871
IC
22408// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
22409// original notice:
3af2954a 22410
8b095871
IC
22411/*!
22412 * The buffer module from node.js, for the browser.
22413 *
22414 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22415 * @license MIT
22416 */
22417function compare(a, b) {
22418 if (a === b) {
22419 return 0;
22420 }
3af2954a 22421
8b095871
IC
22422 var x = a.length;
22423 var y = b.length;
3af2954a 22424
8b095871
IC
22425 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
22426 if (a[i] !== b[i]) {
22427 x = a[i];
22428 y = b[i];
22429 break;
22430 }
22431 }
3af2954a 22432
8b095871
IC
22433 if (x < y) {
22434 return -1;
22435 }
22436 if (y < x) {
22437 return 1;
22438 }
22439 return 0;
ab78acc6 22440}
8b095871
IC
22441function isBuffer(b) {
22442 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
22443 return global.Buffer.isBuffer(b);
22444 }
22445 return !!(b != null && b._isBuffer);
ab78acc6 22446}
3af2954a 22447
8b095871
IC
22448// based on node assert, original notice:
22449
22450// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
22451//
22452// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
22453//
22454// Originally from narwhal.js (http://narwhaljs.org)
22455// Copyright (c) 2009 Thomas Robinson <280north.com>
22456//
22457// Permission is hereby granted, free of charge, to any person obtaining a copy
22458// of this software and associated documentation files (the 'Software'), to
22459// deal in the Software without restriction, including without limitation the
22460// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
22461// sell copies of the Software, and to permit persons to whom the Software is
22462// furnished to do so, subject to the following conditions:
22463//
22464// The above copyright notice and this permission notice shall be included in
22465// all copies or substantial portions of the Software.
22466//
22467// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22468// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22469// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22470// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
22471// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22472// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22473
22474var util = require('util/');
22475var hasOwn = Object.prototype.hasOwnProperty;
22476var pSlice = Array.prototype.slice;
22477var functionsHaveNames = (function () {
22478 return function foo() {}.name === 'foo';
22479}());
22480function pToString (obj) {
22481 return Object.prototype.toString.call(obj);
22482}
22483function isView(arrbuf) {
22484 if (isBuffer(arrbuf)) {
22485 return false;
ab78acc6 22486 }
8b095871
IC
22487 if (typeof global.ArrayBuffer !== 'function') {
22488 return false;
22489 }
22490 if (typeof ArrayBuffer.isView === 'function') {
22491 return ArrayBuffer.isView(arrbuf);
22492 }
22493 if (!arrbuf) {
22494 return false;
22495 }
22496 if (arrbuf instanceof DataView) {
22497 return true;
22498 }
22499 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
22500 return true;
22501 }
22502 return false;
ab78acc6 22503}
8b095871
IC
22504// 1. The assert module provides functions that throw
22505// AssertionError's when particular conditions are not met. The
22506// assert module must conform to the following interface.
3af2954a 22507
8b095871 22508var assert = module.exports = ok;
3af2954a 22509
8b095871
IC
22510// 2. The AssertionError is defined in assert.
22511// new assert.AssertionError({ message: message,
22512// actual: actual,
22513// expected: expected })
22514
22515var regex = /\s*function\s+([^\(\s]*)\s*/;
22516// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
22517function getName(func) {
22518 if (!util.isFunction(func)) {
22519 return;
22520 }
22521 if (functionsHaveNames) {
22522 return func.name;
22523 }
22524 var str = func.toString();
22525 var match = str.match(regex);
22526 return match && match[1];
ab78acc6 22527}
8b095871
IC
22528assert.AssertionError = function AssertionError(options) {
22529 this.name = 'AssertionError';
22530 this.actual = options.actual;
22531 this.expected = options.expected;
22532 this.operator = options.operator;
22533 if (options.message) {
22534 this.message = options.message;
22535 this.generatedMessage = false;
22536 } else {
22537 this.message = getMessage(this);
22538 this.generatedMessage = true;
22539 }
22540 var stackStartFunction = options.stackStartFunction || fail;
22541 if (Error.captureStackTrace) {
22542 Error.captureStackTrace(this, stackStartFunction);
22543 } else {
22544 // non v8 browsers so we can have a stacktrace
22545 var err = new Error();
22546 if (err.stack) {
22547 var out = err.stack;
22548
22549 // try to strip useless frames
22550 var fn_name = getName(stackStartFunction);
22551 var idx = out.indexOf('\n' + fn_name);
22552 if (idx >= 0) {
22553 // once we have located the function frame
22554 // we need to strip out everything before it (and its line)
22555 var next_line = out.indexOf('\n', idx + 1);
22556 out = out.substring(next_line + 1);
22557 }
3af2954a 22558
8b095871
IC
22559 this.stack = out;
22560 }
22561 }
22562};
3af2954a 22563
8b095871
IC
22564// assert.AssertionError instanceof Error
22565util.inherits(assert.AssertionError, Error);
3af2954a 22566
8b095871
IC
22567function truncate(s, n) {
22568 if (typeof s === 'string') {
22569 return s.length < n ? s : s.slice(0, n);
22570 } else {
22571 return s;
3af2954a 22572 }
ab78acc6 22573}
8b095871
IC
22574function inspect(something) {
22575 if (functionsHaveNames || !util.isFunction(something)) {
22576 return util.inspect(something);
22577 }
22578 var rawname = getName(something);
22579 var name = rawname ? ': ' + rawname : '';
22580 return '[Function' + name + ']';
22581}
22582function getMessage(self) {
22583 return truncate(inspect(self.actual), 128) + ' ' +
22584 self.operator + ' ' +
22585 truncate(inspect(self.expected), 128);
ab78acc6 22586}
3af2954a 22587
8b095871
IC
22588// At present only the three keys mentioned above are used and
22589// understood by the spec. Implementations or sub modules can pass
22590// other keys to the AssertionError's constructor - they will be
22591// ignored.
3af2954a 22592
8b095871
IC
22593// 3. All of the following functions must throw an AssertionError
22594// when a corresponding condition is not met, with a message that
22595// may be undefined if not provided. All assertion methods provide
22596// both the actual and expected values to the assertion error for
22597// display purposes.
3af2954a 22598
8b095871
IC
22599function fail(actual, expected, message, operator, stackStartFunction) {
22600 throw new assert.AssertionError({
22601 message: message,
22602 actual: actual,
22603 expected: expected,
22604 operator: operator,
22605 stackStartFunction: stackStartFunction
22606 });
ab78acc6 22607}
3af2954a 22608
8b095871
IC
22609// EXTENSION! allows for well behaved errors defined elsewhere.
22610assert.fail = fail;
3af2954a 22611
8b095871
IC
22612// 4. Pure assertion tests whether a value is truthy, as determined
22613// by !!guard.
22614// assert.ok(guard, message_opt);
22615// This statement is equivalent to assert.equal(true, !!guard,
22616// message_opt);. To test strictly for the value true, use
22617// assert.strictEqual(true, guard, message_opt);.
3af2954a 22618
8b095871
IC
22619function ok(value, message) {
22620 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 22621}
8b095871 22622assert.ok = ok;
3af2954a 22623
8b095871
IC
22624// 5. The equality assertion tests shallow, coercive equality with
22625// ==.
22626// assert.equal(actual, expected, message_opt);
3af2954a 22627
8b095871
IC
22628assert.equal = function equal(actual, expected, message) {
22629 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
22630};
3af2954a 22631
8b095871
IC
22632// 6. The non-equality assertion tests for whether two objects are not equal
22633// with != assert.notEqual(actual, expected, message_opt);
3af2954a 22634
8b095871
IC
22635assert.notEqual = function notEqual(actual, expected, message) {
22636 if (actual == expected) {
22637 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 22638 }
8b095871
IC
22639};
22640
22641// 7. The equivalence assertion tests a deep equality relation.
22642// assert.deepEqual(actual, expected, message_opt);
22643
22644assert.deepEqual = function deepEqual(actual, expected, message) {
22645 if (!_deepEqual(actual, expected, false)) {
22646 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 22647 }
8b095871 22648};
3af2954a 22649
8b095871
IC
22650assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
22651 if (!_deepEqual(actual, expected, true)) {
22652 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 22653 }
8b095871
IC
22654};
22655
22656function _deepEqual(actual, expected, strict, memos) {
22657 // 7.1. All identical values are equivalent, as determined by ===.
22658 if (actual === expected) {
22659 return true;
22660 } else if (isBuffer(actual) && isBuffer(expected)) {
22661 return compare(actual, expected) === 0;
22662
22663 // 7.2. If the expected value is a Date object, the actual value is
22664 // equivalent if it is also a Date object that refers to the same time.
22665 } else if (util.isDate(actual) && util.isDate(expected)) {
22666 return actual.getTime() === expected.getTime();
22667
22668 // 7.3 If the expected value is a RegExp object, the actual value is
22669 // equivalent if it is also a RegExp object with the same source and
22670 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
22671 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
22672 return actual.source === expected.source &&
22673 actual.global === expected.global &&
22674 actual.multiline === expected.multiline &&
22675 actual.lastIndex === expected.lastIndex &&
22676 actual.ignoreCase === expected.ignoreCase;
22677
22678 // 7.4. Other pairs that do not both pass typeof value == 'object',
22679 // equivalence is determined by ==.
22680 } else if ((actual === null || typeof actual !== 'object') &&
22681 (expected === null || typeof expected !== 'object')) {
22682 return strict ? actual === expected : actual == expected;
22683
22684 // If both values are instances of typed arrays, wrap their underlying
22685 // ArrayBuffers in a Buffer each to increase performance
22686 // This optimization requires the arrays to have the same type as checked by
22687 // Object.prototype.toString (aka pToString). Never perform binary
22688 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
22689 // bit patterns are not identical.
22690 } else if (isView(actual) && isView(expected) &&
22691 pToString(actual) === pToString(expected) &&
22692 !(actual instanceof Float32Array ||
22693 actual instanceof Float64Array)) {
22694 return compare(new Uint8Array(actual.buffer),
22695 new Uint8Array(expected.buffer)) === 0;
22696
22697 // 7.5 For all other Object pairs, including Array objects, equivalence is
22698 // determined by having the same number of owned properties (as verified
22699 // with Object.prototype.hasOwnProperty.call), the same set of keys
22700 // (although not necessarily the same order), equivalent values for every
22701 // corresponding key, and an identical 'prototype' property. Note: this
22702 // accounts for both named and indexed properties on Arrays.
22703 } else if (isBuffer(actual) !== isBuffer(expected)) {
22704 return false;
22705 } else {
22706 memos = memos || {actual: [], expected: []};
3af2954a 22707
8b095871
IC
22708 var actualIndex = memos.actual.indexOf(actual);
22709 if (actualIndex !== -1) {
22710 if (actualIndex === memos.expected.indexOf(expected)) {
22711 return true;
ab78acc6 22712 }
3af2954a 22713 }
8b095871
IC
22714
22715 memos.actual.push(actual);
22716 memos.expected.push(expected);
22717
22718 return objEquiv(actual, expected, strict, memos);
3af2954a 22719 }
ab78acc6 22720}
3af2954a 22721
8b095871
IC
22722function isArguments(object) {
22723 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 22724}
3af2954a 22725
8b095871
IC
22726function objEquiv(a, b, strict, actualVisitedObjects) {
22727 if (a === null || a === undefined || b === null || b === undefined)
22728 return false;
22729 // if one is a primitive, the other must be same
22730 if (util.isPrimitive(a) || util.isPrimitive(b))
22731 return a === b;
22732 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
22733 return false;
22734 var aIsArgs = isArguments(a);
22735 var bIsArgs = isArguments(b);
22736 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
22737 return false;
22738 if (aIsArgs) {
22739 a = pSlice.call(a);
22740 b = pSlice.call(b);
22741 return _deepEqual(a, b, strict);
22742 }
22743 var ka = objectKeys(a);
22744 var kb = objectKeys(b);
22745 var key, i;
22746 // having the same number of owned properties (keys incorporates
22747 // hasOwnProperty)
22748 if (ka.length !== kb.length)
22749 return false;
22750 //the same set of keys (although not necessarily the same order),
22751 ka.sort();
22752 kb.sort();
22753 //~~~cheap key test
22754 for (i = ka.length - 1; i >= 0; i--) {
22755 if (ka[i] !== kb[i])
22756 return false;
22757 }
22758 //equivalent values for every corresponding key, and
22759 //~~~possibly expensive deep test
22760 for (i = ka.length - 1; i >= 0; i--) {
22761 key = ka[i];
22762 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
22763 return false;
22764 }
22765 return true;
ab78acc6 22766}
3af2954a 22767
8b095871
IC
22768// 8. The non-equivalence assertion tests for any deep inequality.
22769// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 22770
8b095871
IC
22771assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
22772 if (_deepEqual(actual, expected, false)) {
22773 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 22774 }
8b095871 22775};
3af2954a 22776
8b095871
IC
22777assert.notDeepStrictEqual = notDeepStrictEqual;
22778function notDeepStrictEqual(actual, expected, message) {
22779 if (_deepEqual(actual, expected, true)) {
22780 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
22781 }
ab78acc6 22782}
3af2954a 22783
3af2954a 22784
8b095871
IC
22785// 9. The strict equality assertion tests strict equality, as determined by ===.
22786// assert.strictEqual(actual, expected, message_opt);
3af2954a 22787
8b095871
IC
22788assert.strictEqual = function strictEqual(actual, expected, message) {
22789 if (actual !== expected) {
22790 fail(actual, expected, message, '===', assert.strictEqual);
22791 }
22792};
3af2954a 22793
8b095871
IC
22794// 10. The strict non-equality assertion tests for strict inequality, as
22795// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 22796
8b095871
IC
22797assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
22798 if (actual === expected) {
22799 fail(actual, expected, message, '!==', assert.notStrictEqual);
22800 }
22801};
3af2954a 22802
8b095871
IC
22803function expectedException(actual, expected) {
22804 if (!actual || !expected) {
22805 return false;
22806 }
3af2954a 22807
8b095871
IC
22808 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
22809 return expected.test(actual);
22810 }
3af2954a 22811
8b095871
IC
22812 try {
22813 if (actual instanceof expected) {
22814 return true;
22815 }
22816 } catch (e) {
22817 // Ignore. The instanceof check doesn't work for arrow functions.
22818 }
3af2954a 22819
8b095871
IC
22820 if (Error.isPrototypeOf(expected)) {
22821 return false;
22822 }
22823
22824 return expected.call({}, actual) === true;
ab78acc6 22825}
3af2954a 22826
8b095871
IC
22827function _tryBlock(block) {
22828 var error;
22829 try {
22830 block();
22831 } catch (e) {
22832 error = e;
22833 }
22834 return error;
ab78acc6 22835}
3af2954a 22836
8b095871
IC
22837function _throws(shouldThrow, block, expected, message) {
22838 var actual;
22839
22840 if (typeof block !== 'function') {
22841 throw new TypeError('"block" argument must be a function');
3af2954a 22842 }
8b095871
IC
22843
22844 if (typeof expected === 'string') {
22845 message = expected;
22846 expected = null;
ab78acc6 22847 }
8b095871
IC
22848
22849 actual = _tryBlock(block);
22850
22851 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
22852 (message ? ' ' + message : '.');
22853
22854 if (shouldThrow && !actual) {
22855 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 22856 }
8b095871
IC
22857
22858 var userProvidedMessage = typeof message === 'string';
22859 var isUnwantedException = !shouldThrow && util.isError(actual);
22860 var isUnexpectedException = !shouldThrow && actual && !expected;
22861
22862 if ((isUnwantedException &&
22863 userProvidedMessage &&
22864 expectedException(actual, expected)) ||
22865 isUnexpectedException) {
22866 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 22867 }
3af2954a 22868
8b095871
IC
22869 if ((shouldThrow && actual && expected &&
22870 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
22871 throw actual;
22872 }
ab78acc6 22873}
3af2954a 22874
8b095871
IC
22875// 11. Expected to throw an error:
22876// assert.throws(block, Error_opt, message_opt);
22877
22878assert.throws = function(block, /*optional*/error, /*optional*/message) {
22879 _throws(true, block, error, message);
22880};
22881
22882// EXTENSION! This is annoying to write outside this module.
22883assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
22884 _throws(false, block, error, message);
22885};
22886
22887assert.ifError = function(err) { if (err) throw err; };
22888
22889var objectKeys = Object.keys || function (obj) {
22890 var keys = [];
22891 for (var key in obj) {
22892 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 22893 }
8b095871
IC
22894 return keys;
22895};
3af2954a 22896
8b095871
IC
22897}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22898},{"util/":30}],2:[function(require,module,exports){
22899'use strict'
22900
22901exports.byteLength = byteLength
22902exports.toByteArray = toByteArray
22903exports.fromByteArray = fromByteArray
22904
22905var lookup = []
22906var revLookup = []
22907var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
22908
22909var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
22910for (var i = 0, len = code.length; i < len; ++i) {
22911 lookup[i] = code[i]
22912 revLookup[code.charCodeAt(i)] = i
22913}
22914
22915revLookup['-'.charCodeAt(0)] = 62
22916revLookup['_'.charCodeAt(0)] = 63
22917
22918function placeHoldersCount (b64) {
22919 var len = b64.length
22920 if (len % 4 > 0) {
22921 throw new Error('Invalid string. Length must be a multiple of 4')
22922 }
22923
22924 // the number of equal signs (place holders)
22925 // if there are two placeholders, than the two characters before it
22926 // represent one byte
22927 // if there is only one, then the three characters before it represent 2 bytes
22928 // this is just a cheap hack to not do indexOf twice
22929 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
22930}
22931
8b095871
IC
22932function byteLength (b64) {
22933 // base64 is 4/3 + up to two characters of the original data
22934 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 22935}
3af2954a 22936
8b095871
IC
22937function toByteArray (b64) {
22938 var i, j, l, tmp, placeHolders, arr
22939 var len = b64.length
22940 placeHolders = placeHoldersCount(b64)
22941
22942 arr = new Arr(len * 3 / 4 - placeHolders)
22943
22944 // if there are placeholders, only get up to the last complete 4 chars
22945 l = placeHolders > 0 ? len - 4 : len
22946
22947 var L = 0
22948
22949 for (i = 0, j = 0; i < l; i += 4, j += 3) {
22950 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
22951 arr[L++] = (tmp >> 16) & 0xFF
22952 arr[L++] = (tmp >> 8) & 0xFF
22953 arr[L++] = tmp & 0xFF
22954 }
22955
22956 if (placeHolders === 2) {
22957 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
22958 arr[L++] = tmp & 0xFF
22959 } else if (placeHolders === 1) {
22960 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
22961 arr[L++] = (tmp >> 8) & 0xFF
22962 arr[L++] = tmp & 0xFF
22963 }
22964
22965 return arr
ab78acc6 22966}
3af2954a 22967
8b095871
IC
22968function tripletToBase64 (num) {
22969 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 22970}
3af2954a 22971
8b095871
IC
22972function encodeChunk (uint8, start, end) {
22973 var tmp
22974 var output = []
22975 for (var i = start; i < end; i += 3) {
22976 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
22977 output.push(tripletToBase64(tmp))
22978 }
22979 return output.join('')
ab78acc6 22980}
3af2954a 22981
8b095871
IC
22982function fromByteArray (uint8) {
22983 var tmp
22984 var len = uint8.length
22985 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
22986 var output = ''
22987 var parts = []
22988 var maxChunkLength = 16383 // must be multiple of 3
22989
22990 // go through the array every three bytes, we'll deal with trailing stuff later
22991 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
22992 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
22993 }
22994
22995 // pad the end with zeros, but make sure to not forget the extra bytes
22996 if (extraBytes === 1) {
22997 tmp = uint8[len - 1]
22998 output += lookup[tmp >> 2]
22999 output += lookup[(tmp << 4) & 0x3F]
23000 output += '=='
23001 } else if (extraBytes === 2) {
23002 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
23003 output += lookup[tmp >> 10]
23004 output += lookup[(tmp >> 4) & 0x3F]
23005 output += lookup[(tmp << 2) & 0x3F]
23006 output += '='
23007 }
23008
23009 parts.push(output)
23010
23011 return parts.join('')
ab78acc6 23012}
3af2954a 23013
8b095871 23014},{}],3:[function(require,module,exports){
3af2954a 23015
8b095871
IC
23016},{}],4:[function(require,module,exports){
23017(function (global){
23018'use strict';
23019
23020var buffer = require('buffer');
23021var Buffer = buffer.Buffer;
23022var SlowBuffer = buffer.SlowBuffer;
23023var MAX_LEN = buffer.kMaxLength || 2147483647;
23024exports.alloc = function alloc(size, fill, encoding) {
23025 if (typeof Buffer.alloc === 'function') {
23026 return Buffer.alloc(size, fill, encoding);
ab78acc6 23027 }
8b095871
IC
23028 if (typeof encoding === 'number') {
23029 throw new TypeError('encoding must not be number');
23030 }
23031 if (typeof size !== 'number') {
23032 throw new TypeError('size must be a number');
23033 }
23034 if (size > MAX_LEN) {
23035 throw new RangeError('size is too large');
23036 }
23037 var enc = encoding;
23038 var _fill = fill;
23039 if (_fill === undefined) {
23040 enc = undefined;
23041 _fill = 0;
23042 }
23043 var buf = new Buffer(size);
23044 if (typeof _fill === 'string') {
23045 var fillBuf = new Buffer(_fill, enc);
23046 var flen = fillBuf.length;
23047 var i = -1;
23048 while (++i < size) {
23049 buf[i] = fillBuf[i % flen];
ab78acc6 23050 }
ab78acc6 23051 } else {
8b095871 23052 buf.fill(_fill);
ab78acc6 23053 }
8b095871 23054 return buf;
ab78acc6 23055}
8b095871
IC
23056exports.allocUnsafe = function allocUnsafe(size) {
23057 if (typeof Buffer.allocUnsafe === 'function') {
23058 return Buffer.allocUnsafe(size);
23059 }
23060 if (typeof size !== 'number') {
23061 throw new TypeError('size must be a number');
23062 }
23063 if (size > MAX_LEN) {
23064 throw new RangeError('size is too large');
23065 }
23066 return new Buffer(size);
ab78acc6 23067}
8b095871
IC
23068exports.from = function from(value, encodingOrOffset, length) {
23069 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
23070 return Buffer.from(value, encodingOrOffset, length);
23071 }
23072 if (typeof value === 'number') {
23073 throw new TypeError('"value" argument must not be a number');
23074 }
23075 if (typeof value === 'string') {
23076 return new Buffer(value, encodingOrOffset);
23077 }
23078 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
23079 var offset = encodingOrOffset;
23080 if (arguments.length === 1) {
23081 return new Buffer(value);
23082 }
23083 if (typeof offset === 'undefined') {
23084 offset = 0;
23085 }
23086 var len = length;
23087 if (typeof len === 'undefined') {
23088 len = value.byteLength - offset;
23089 }
23090 if (offset >= value.byteLength) {
23091 throw new RangeError('\'offset\' is out of bounds');
23092 }
23093 if (len > value.byteLength - offset) {
23094 throw new RangeError('\'length\' is out of bounds');
23095 }
23096 return new Buffer(value.slice(offset, offset + len));
23097 }
23098 if (Buffer.isBuffer(value)) {
23099 var out = new Buffer(value.length);
23100 value.copy(out, 0, 0, value.length);
23101 return out;
23102 }
23103 if (value) {
23104 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
23105 return new Buffer(value);
23106 }
23107 if (value.type === 'Buffer' && Array.isArray(value.data)) {
23108 return new Buffer(value.data);
23109 }
23110 }
3af2954a 23111
8b095871 23112 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 23113}
8b095871
IC
23114exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
23115 if (typeof Buffer.allocUnsafeSlow === 'function') {
23116 return Buffer.allocUnsafeSlow(size);
23117 }
23118 if (typeof size !== 'number') {
23119 throw new TypeError('size must be a number');
23120 }
23121 if (size >= MAX_LEN) {
23122 throw new RangeError('size is too large');
23123 }
23124 return new SlowBuffer(size);
ab78acc6 23125}
3af2954a 23126
8b095871
IC
23127}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23128},{"buffer":5}],5:[function(require,module,exports){
23129/*!
23130 * The buffer module from node.js, for the browser.
23131 *
23132 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
23133 * @license MIT
23134 */
23135/* eslint-disable no-proto */
3af2954a 23136
8b095871 23137'use strict'
3af2954a 23138
8b095871
IC
23139var base64 = require('base64-js')
23140var ieee754 = require('ieee754')
3af2954a 23141
8b095871
IC
23142exports.Buffer = Buffer
23143exports.SlowBuffer = SlowBuffer
23144exports.INSPECT_MAX_BYTES = 50
23145
23146var K_MAX_LENGTH = 0x7fffffff
23147exports.kMaxLength = K_MAX_LENGTH
23148
23149/**
23150 * If `Buffer.TYPED_ARRAY_SUPPORT`:
23151 * === true Use Uint8Array implementation (fastest)
23152 * === false Print warning and recommend using `buffer` v4.x which has an Object
23153 * implementation (most compatible, even IE6)
23154 *
23155 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
23156 * Opera 11.6+, iOS 4.2+.
23157 *
23158 * We report that the browser does not support typed arrays if the are not subclassable
23159 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
23160 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
23161 * for __proto__ and has a buggy typed array implementation.
23162 */
23163Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
23164
23165if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
23166 typeof console.error === 'function') {
23167 console.error(
23168 'This browser lacks typed array (Uint8Array) support which is required by ' +
23169 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
23170 )
ab78acc6 23171}
3af2954a 23172
8b095871
IC
23173function typedArraySupport () {
23174 // Can typed array instances can be augmented?
23175 try {
23176 var arr = new Uint8Array(1)
23177 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
23178 return arr.foo() === 42
23179 } catch (e) {
23180 return false
23181 }
ab78acc6 23182}
3af2954a 23183
8b095871
IC
23184function createBuffer (length) {
23185 if (length > K_MAX_LENGTH) {
23186 throw new RangeError('Invalid typed array length')
3af2954a 23187 }
8b095871
IC
23188 // Return an augmented `Uint8Array` instance
23189 var buf = new Uint8Array(length)
23190 buf.__proto__ = Buffer.prototype
23191 return buf
ab78acc6 23192}
3af2954a 23193
8b095871
IC
23194/**
23195 * The Buffer constructor returns instances of `Uint8Array` that have their
23196 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
23197 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
23198 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
23199 * returns a single octet.
23200 *
23201 * The `Uint8Array` prototype remains unmodified.
23202 */
3af2954a 23203
8b095871
IC
23204function Buffer (arg, encodingOrOffset, length) {
23205 // Common case.
23206 if (typeof arg === 'number') {
23207 if (typeof encodingOrOffset === 'string') {
23208 throw new Error(
23209 'If encoding is specified then the first argument must be a string'
23210 )
23211 }
23212 return allocUnsafe(arg)
23213 }
23214 return from(arg, encodingOrOffset, length)
ab78acc6 23215}
3af2954a 23216
8b095871
IC
23217// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
23218if (typeof Symbol !== 'undefined' && Symbol.species &&
23219 Buffer[Symbol.species] === Buffer) {
23220 Object.defineProperty(Buffer, Symbol.species, {
23221 value: null,
23222 configurable: true,
23223 enumerable: false,
23224 writable: false
23225 })
ab78acc6 23226}
3af2954a 23227
8b095871 23228Buffer.poolSize = 8192 // not used by this implementation
3af2954a 23229
8b095871
IC
23230function from (value, encodingOrOffset, length) {
23231 if (typeof value === 'number') {
23232 throw new TypeError('"value" argument must not be a number')
23233 }
3af2954a 23234
8b095871
IC
23235 if (value instanceof ArrayBuffer) {
23236 return fromArrayBuffer(value, encodingOrOffset, length)
23237 }
3af2954a 23238
8b095871
IC
23239 if (typeof value === 'string') {
23240 return fromString(value, encodingOrOffset)
23241 }
3af2954a 23242
8b095871 23243 return fromObject(value)
ab78acc6 23244}
3af2954a 23245
8b095871
IC
23246/**
23247 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
23248 * if value is a number.
23249 * Buffer.from(str[, encoding])
23250 * Buffer.from(array)
23251 * Buffer.from(buffer)
23252 * Buffer.from(arrayBuffer[, byteOffset[, length]])
23253 **/
23254Buffer.from = function (value, encodingOrOffset, length) {
23255 return from(value, encodingOrOffset, length)
ab78acc6 23256}
3af2954a 23257
8b095871
IC
23258// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
23259// https://github.com/feross/buffer/pull/148
23260Buffer.prototype.__proto__ = Uint8Array.prototype
23261Buffer.__proto__ = Uint8Array
23262
23263function assertSize (size) {
23264 if (typeof size !== 'number') {
23265 throw new TypeError('"size" argument must be a number')
23266 } else if (size < 0) {
23267 throw new RangeError('"size" argument must not be negative')
23268 }
23269}
23270
23271function alloc (size, fill, encoding) {
23272 assertSize(size)
23273 if (size <= 0) {
23274 return createBuffer(size)
3af2954a 23275 }
8b095871
IC
23276 if (fill !== undefined) {
23277 // Only pay attention to encoding if it's a string. This
23278 // prevents accidentally sending in a number that would
23279 // be interpretted as a start offset.
23280 return typeof encoding === 'string'
23281 ? createBuffer(size).fill(fill, encoding)
23282 : createBuffer(size).fill(fill)
23283 }
23284 return createBuffer(size)
ab78acc6 23285}
3af2954a 23286
8b095871
IC
23287/**
23288 * Creates a new filled Buffer instance.
23289 * alloc(size[, fill[, encoding]])
23290 **/
23291Buffer.alloc = function (size, fill, encoding) {
23292 return alloc(size, fill, encoding)
ab78acc6 23293}
3af2954a 23294
8b095871
IC
23295function allocUnsafe (size) {
23296 assertSize(size)
23297 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 23298}
3af2954a 23299
8b095871
IC
23300/**
23301 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
23302 * */
23303Buffer.allocUnsafe = function (size) {
23304 return allocUnsafe(size)
23305}
23306/**
23307 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
23308 */
23309Buffer.allocUnsafeSlow = function (size) {
23310 return allocUnsafe(size)
ab78acc6 23311}
3af2954a 23312
8b095871
IC
23313function fromString (string, encoding) {
23314 if (typeof encoding !== 'string' || encoding === '') {
23315 encoding = 'utf8'
23316 }
23317
23318 if (!Buffer.isEncoding(encoding)) {
23319 throw new TypeError('"encoding" must be a valid string encoding')
23320 }
23321
23322 var length = byteLength(string, encoding) | 0
23323 var buf = createBuffer(length)
23324
23325 var actual = buf.write(string, encoding)
23326
23327 if (actual !== length) {
23328 // Writing a hex string, for example, that contains invalid characters will
23329 // cause everything after the first invalid character to be ignored. (e.g.
23330 // 'abxxcd' will be treated as 'ab')
23331 buf = buf.slice(0, actual)
23332 }
23333
23334 return buf
ab78acc6 23335}
3af2954a 23336
8b095871
IC
23337function fromArrayLike (array) {
23338 var length = array.length < 0 ? 0 : checked(array.length) | 0
23339 var buf = createBuffer(length)
23340 for (var i = 0; i < length; i += 1) {
23341 buf[i] = array[i] & 255
23342 }
23343 return buf
23344}
3af2954a 23345
8b095871
IC
23346function fromArrayBuffer (array, byteOffset, length) {
23347 if (byteOffset < 0 || array.byteLength < byteOffset) {
23348 throw new RangeError('\'offset\' is out of bounds')
23349 }
3af2954a 23350
8b095871
IC
23351 if (array.byteLength < byteOffset + (length || 0)) {
23352 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
23353 }
23354
8b095871
IC
23355 var buf
23356 if (byteOffset === undefined && length === undefined) {
23357 buf = new Uint8Array(array)
23358 } else if (length === undefined) {
23359 buf = new Uint8Array(array, byteOffset)
23360 } else {
23361 buf = new Uint8Array(array, byteOffset, length)
23362 }
3af2954a 23363
8b095871
IC
23364 // Return an augmented `Uint8Array` instance
23365 buf.__proto__ = Buffer.prototype
23366 return buf
23367}
23368
23369function fromObject (obj) {
23370 if (Buffer.isBuffer(obj)) {
23371 var len = checked(obj.length) | 0
23372 var buf = createBuffer(len)
23373
23374 if (buf.length === 0) {
23375 return buf
ab78acc6 23376 }
8b095871
IC
23377
23378 obj.copy(buf, 0, 0, len)
23379 return buf
23380 }
23381
23382 if (obj) {
23383 if (ArrayBuffer.isView(obj) || 'length' in obj) {
23384 if (typeof obj.length !== 'number' || isnan(obj.length)) {
23385 return createBuffer(0)
ab78acc6 23386 }
8b095871 23387 return fromArrayLike(obj)
ab78acc6 23388 }
3af2954a 23389
8b095871
IC
23390 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
23391 return fromArrayLike(obj.data)
3af2954a
IC
23392 }
23393 }
8b095871
IC
23394
23395 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 23396}
3af2954a 23397
8b095871
IC
23398function checked (length) {
23399 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
23400 // length is NaN (which is otherwise coerced to zero.)
23401 if (length >= K_MAX_LENGTH) {
23402 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
23403 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 23404 }
8b095871
IC
23405 return length | 0
23406}
23407
23408function SlowBuffer (length) {
23409 if (+length != length) { // eslint-disable-line eqeqeq
23410 length = 0
3af2954a 23411 }
8b095871 23412 return Buffer.alloc(+length)
ab78acc6 23413}
3af2954a 23414
8b095871
IC
23415Buffer.isBuffer = function isBuffer (b) {
23416 return b != null && b._isBuffer === true
ab78acc6 23417}
3af2954a 23418
8b095871
IC
23419Buffer.compare = function compare (a, b) {
23420 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
23421 throw new TypeError('Arguments must be Buffers')
23422 }
23423
23424 if (a === b) return 0
23425
23426 var x = a.length
23427 var y = b.length
23428
23429 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
23430 if (a[i] !== b[i]) {
23431 x = a[i]
23432 y = b[i]
23433 break
ab78acc6
IC
23434 }
23435 }
8b095871
IC
23436
23437 if (x < y) return -1
23438 if (y < x) return 1
23439 return 0
23440}
23441
23442Buffer.isEncoding = function isEncoding (encoding) {
23443 switch (String(encoding).toLowerCase()) {
23444 case 'hex':
23445 case 'utf8':
23446 case 'utf-8':
23447 case 'ascii':
23448 case 'latin1':
23449 case 'binary':
23450 case 'base64':
23451 case 'ucs2':
23452 case 'ucs-2':
23453 case 'utf16le':
23454 case 'utf-16le':
23455 return true
23456 default:
23457 return false
23458 }
ab78acc6
IC
23459}
23460
8b095871
IC
23461Buffer.concat = function concat (list, length) {
23462 if (!Array.isArray(list)) {
23463 throw new TypeError('"list" argument must be an Array of Buffers')
23464 }
ab78acc6 23465
8b095871
IC
23466 if (list.length === 0) {
23467 return Buffer.alloc(0)
23468 }
ab78acc6 23469
8b095871
IC
23470 var i
23471 if (length === undefined) {
23472 length = 0
23473 for (i = 0; i < list.length; ++i) {
23474 length += list[i].length
23475 }
3af2954a 23476 }
8b095871
IC
23477
23478 var buffer = Buffer.allocUnsafe(length)
23479 var pos = 0
23480 for (i = 0; i < list.length; ++i) {
23481 var buf = list[i]
23482 if (!Buffer.isBuffer(buf)) {
23483 throw new TypeError('"list" argument must be an Array of Buffers')
23484 }
23485 buf.copy(buffer, pos)
23486 pos += buf.length
ab78acc6 23487 }
8b095871 23488 return buffer
ab78acc6
IC
23489}
23490
8b095871
IC
23491function byteLength (string, encoding) {
23492 if (Buffer.isBuffer(string)) {
23493 return string.length
23494 }
23495 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
23496 return string.byteLength
23497 }
23498 if (typeof string !== 'string') {
23499 string = '' + string
23500 }
23501
23502 var len = string.length
23503 if (len === 0) return 0
23504
23505 // Use a for loop to avoid recursion
23506 var loweredCase = false
23507 for (;;) {
23508 switch (encoding) {
23509 case 'ascii':
23510 case 'latin1':
23511 case 'binary':
23512 return len
23513 case 'utf8':
23514 case 'utf-8':
23515 case undefined:
23516 return utf8ToBytes(string).length
23517 case 'ucs2':
23518 case 'ucs-2':
23519 case 'utf16le':
23520 case 'utf-16le':
23521 return len * 2
23522 case 'hex':
23523 return len >>> 1
23524 case 'base64':
23525 return base64ToBytes(string).length
23526 default:
23527 if (loweredCase) return utf8ToBytes(string).length // assume utf8
23528 encoding = ('' + encoding).toLowerCase()
23529 loweredCase = true
ab78acc6 23530 }
3af2954a 23531 }
ab78acc6 23532}
8b095871 23533Buffer.byteLength = byteLength
3af2954a 23534
8b095871
IC
23535function slowToString (encoding, start, end) {
23536 var loweredCase = false
3af2954a 23537
8b095871
IC
23538 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
23539 // property of a typed array.
3af2954a 23540
8b095871
IC
23541 // This behaves neither like String nor Uint8Array in that we set start/end
23542 // to their upper/lower bounds if the value passed is out of range.
23543 // undefined is handled specially as per ECMA-262 6th Edition,
23544 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
23545 if (start === undefined || start < 0) {
23546 start = 0
23547 }
23548 // Return early if start > this.length. Done here to prevent potential uint32
23549 // coercion fail below.
23550 if (start > this.length) {
23551 return ''
23552 }
3af2954a 23553
8b095871
IC
23554 if (end === undefined || end > this.length) {
23555 end = this.length
23556 }
3af2954a 23557
8b095871
IC
23558 if (end <= 0) {
23559 return ''
23560 }
3af2954a 23561
8b095871
IC
23562 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
23563 end >>>= 0
23564 start >>>= 0
3af2954a 23565
8b095871
IC
23566 if (end <= start) {
23567 return ''
3af2954a
IC
23568 }
23569
8b095871 23570 if (!encoding) encoding = 'utf8'
3af2954a 23571
8b095871
IC
23572 while (true) {
23573 switch (encoding) {
23574 case 'hex':
23575 return hexSlice(this, start, end)
23576
23577 case 'utf8':
23578 case 'utf-8':
23579 return utf8Slice(this, start, end)
23580
23581 case 'ascii':
23582 return asciiSlice(this, start, end)
23583
23584 case 'latin1':
23585 case 'binary':
23586 return latin1Slice(this, start, end)
23587
23588 case 'base64':
23589 return base64Slice(this, start, end)
23590
23591 case 'ucs2':
23592 case 'ucs-2':
23593 case 'utf16le':
23594 case 'utf-16le':
23595 return utf16leSlice(this, start, end)
23596
23597 default:
23598 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23599 encoding = (encoding + '').toLowerCase()
23600 loweredCase = true
23601 }
23602 }
ab78acc6 23603}
3af2954a 23604
8b095871
IC
23605// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
23606// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
23607// reliably in a browserify context because there could be multiple different
23608// copies of the 'buffer' package in use. This method works even for Buffer
23609// instances that were created from another copy of the `buffer` package.
23610// See: https://github.com/feross/buffer/issues/154
23611Buffer.prototype._isBuffer = true
23612
23613function swap (b, n, m) {
23614 var i = b[n]
23615 b[n] = b[m]
23616 b[m] = i
ab78acc6 23617}
3af2954a 23618
8b095871
IC
23619Buffer.prototype.swap16 = function swap16 () {
23620 var len = this.length
23621 if (len % 2 !== 0) {
23622 throw new RangeError('Buffer size must be a multiple of 16-bits')
23623 }
23624 for (var i = 0; i < len; i += 2) {
23625 swap(this, i, i + 1)
23626 }
23627 return this
23628}
3af2954a 23629
8b095871
IC
23630Buffer.prototype.swap32 = function swap32 () {
23631 var len = this.length
23632 if (len % 4 !== 0) {
23633 throw new RangeError('Buffer size must be a multiple of 32-bits')
23634 }
23635 for (var i = 0; i < len; i += 4) {
23636 swap(this, i, i + 3)
23637 swap(this, i + 1, i + 2)
23638 }
23639 return this
23640}
3af2954a 23641
8b095871
IC
23642Buffer.prototype.swap64 = function swap64 () {
23643 var len = this.length
23644 if (len % 8 !== 0) {
23645 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 23646 }
8b095871
IC
23647 for (var i = 0; i < len; i += 8) {
23648 swap(this, i, i + 7)
23649 swap(this, i + 1, i + 6)
23650 swap(this, i + 2, i + 5)
23651 swap(this, i + 3, i + 4)
23652 }
23653 return this
23654}
3af2954a 23655
8b095871
IC
23656Buffer.prototype.toString = function toString () {
23657 var length = this.length
23658 if (length === 0) return ''
23659 if (arguments.length === 0) return utf8Slice(this, 0, length)
23660 return slowToString.apply(this, arguments)
ab78acc6 23661}
3af2954a 23662
8b095871
IC
23663Buffer.prototype.equals = function equals (b) {
23664 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
23665 if (this === b) return true
23666 return Buffer.compare(this, b) === 0
23667}
3af2954a 23668
8b095871
IC
23669Buffer.prototype.inspect = function inspect () {
23670 var str = ''
23671 var max = exports.INSPECT_MAX_BYTES
23672 if (this.length > 0) {
23673 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
23674 if (this.length > max) str += ' ... '
23675 }
23676 return '<Buffer ' + str + '>'
ab78acc6 23677}
3af2954a 23678
8b095871
IC
23679Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
23680 if (!Buffer.isBuffer(target)) {
23681 throw new TypeError('Argument must be a Buffer')
23682 }
3af2954a 23683
8b095871
IC
23684 if (start === undefined) {
23685 start = 0
23686 }
23687 if (end === undefined) {
23688 end = target ? target.length : 0
23689 }
23690 if (thisStart === undefined) {
23691 thisStart = 0
23692 }
23693 if (thisEnd === undefined) {
23694 thisEnd = this.length
23695 }
3af2954a 23696
8b095871
IC
23697 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
23698 throw new RangeError('out of range index')
23699 }
3af2954a 23700
8b095871
IC
23701 if (thisStart >= thisEnd && start >= end) {
23702 return 0
23703 }
23704 if (thisStart >= thisEnd) {
23705 return -1
23706 }
23707 if (start >= end) {
23708 return 1
23709 }
3af2954a 23710
8b095871
IC
23711 start >>>= 0
23712 end >>>= 0
23713 thisStart >>>= 0
23714 thisEnd >>>= 0
3af2954a 23715
8b095871 23716 if (this === target) return 0
3af2954a 23717
8b095871
IC
23718 var x = thisEnd - thisStart
23719 var y = end - start
23720 var len = Math.min(x, y)
23721
23722 var thisCopy = this.slice(thisStart, thisEnd)
23723 var targetCopy = target.slice(start, end)
23724
23725 for (var i = 0; i < len; ++i) {
23726 if (thisCopy[i] !== targetCopy[i]) {
23727 x = thisCopy[i]
23728 y = targetCopy[i]
23729 break
3af2954a 23730 }
8b095871
IC
23731 }
23732
23733 if (x < y) return -1
23734 if (y < x) return 1
23735 return 0
ab78acc6 23736}
3af2954a 23737
8b095871
IC
23738// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
23739// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 23740//
8b095871
IC
23741// Arguments:
23742// - buffer - a Buffer to search
23743// - val - a string, Buffer, or number
23744// - byteOffset - an index into `buffer`; will be clamped to an int32
23745// - encoding - an optional encoding, relevant is val is a string
23746// - dir - true for indexOf, false for lastIndexOf
23747function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
23748 // Empty buffer means no match
23749 if (buffer.length === 0) return -1
23750
23751 // Normalize byteOffset
23752 if (typeof byteOffset === 'string') {
23753 encoding = byteOffset
23754 byteOffset = 0
23755 } else if (byteOffset > 0x7fffffff) {
23756 byteOffset = 0x7fffffff
23757 } else if (byteOffset < -0x80000000) {
23758 byteOffset = -0x80000000
23759 }
23760 byteOffset = +byteOffset // Coerce to Number.
23761 if (isNaN(byteOffset)) {
23762 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
23763 byteOffset = dir ? 0 : (buffer.length - 1)
23764 }
23765
23766 // Normalize byteOffset: negative offsets start from the end of the buffer
23767 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
23768 if (byteOffset >= buffer.length) {
23769 if (dir) return -1
23770 else byteOffset = buffer.length - 1
23771 } else if (byteOffset < 0) {
23772 if (dir) byteOffset = 0
23773 else return -1
23774 }
23775
23776 // Normalize val
23777 if (typeof val === 'string') {
23778 val = Buffer.from(val, encoding)
23779 }
3af2954a 23780
8b095871
IC
23781 // Finally, search either indexOf (if dir is true) or lastIndexOf
23782 if (Buffer.isBuffer(val)) {
23783 // Special case: looking for empty string/buffer always fails
23784 if (val.length === 0) {
23785 return -1
23786 }
23787 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
23788 } else if (typeof val === 'number') {
23789 val = val & 0xFF // Search for a byte value [0-255]
23790 if (typeof Uint8Array.prototype.indexOf === 'function') {
23791 if (dir) {
23792 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
23793 } else {
23794 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
23795 }
23796 }
23797 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
23798 }
3af2954a 23799
8b095871
IC
23800 throw new TypeError('val must be string, number or Buffer')
23801}
3af2954a 23802
8b095871
IC
23803function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
23804 var indexSize = 1
23805 var arrLength = arr.length
23806 var valLength = val.length
3af2954a 23807
8b095871
IC
23808 if (encoding !== undefined) {
23809 encoding = String(encoding).toLowerCase()
23810 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
23811 encoding === 'utf16le' || encoding === 'utf-16le') {
23812 if (arr.length < 2 || val.length < 2) {
23813 return -1
23814 }
23815 indexSize = 2
23816 arrLength /= 2
23817 valLength /= 2
23818 byteOffset /= 2
23819 }
23820 }
3af2954a 23821
8b095871
IC
23822 function read (buf, i) {
23823 if (indexSize === 1) {
23824 return buf[i]
23825 } else {
23826 return buf.readUInt16BE(i * indexSize)
23827 }
23828 }
3af2954a 23829
8b095871
IC
23830 var i
23831 if (dir) {
23832 var foundIndex = -1
23833 for (i = byteOffset; i < arrLength; i++) {
23834 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
23835 if (foundIndex === -1) foundIndex = i
23836 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
23837 } else {
23838 if (foundIndex !== -1) i -= i - foundIndex
23839 foundIndex = -1
23840 }
23841 }
ab78acc6 23842 } else {
8b095871
IC
23843 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
23844 for (i = byteOffset; i >= 0; i--) {
23845 var found = true
23846 for (var j = 0; j < valLength; j++) {
23847 if (read(arr, i + j) !== read(val, j)) {
23848 found = false
23849 break
23850 }
23851 }
23852 if (found) return i
23853 }
ab78acc6 23854 }
3af2954a 23855
8b095871
IC
23856 return -1
23857}
3af2954a 23858
8b095871
IC
23859Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
23860 return this.indexOf(val, byteOffset, encoding) !== -1
23861}
23862
23863Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
23864 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
23865}
3af2954a 23866
8b095871
IC
23867Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
23868 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
23869}
23870
23871function hexWrite (buf, string, offset, length) {
23872 offset = Number(offset) || 0
23873 var remaining = buf.length - offset
23874 if (!length) {
23875 length = remaining
23876 } else {
23877 length = Number(length)
23878 if (length > remaining) {
23879 length = remaining
3af2954a 23880 }
3af2954a
IC
23881 }
23882
8b095871
IC
23883 // must be an even number of digits
23884 var strLen = string.length
23885 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 23886
8b095871
IC
23887 if (length > strLen / 2) {
23888 length = strLen / 2
ab78acc6 23889 }
8b095871
IC
23890 for (var i = 0; i < length; ++i) {
23891 var parsed = parseInt(string.substr(i * 2, 2), 16)
23892 if (isNaN(parsed)) return i
23893 buf[offset + i] = parsed
ab78acc6 23894 }
8b095871 23895 return i
ab78acc6 23896}
3af2954a 23897
8b095871
IC
23898function utf8Write (buf, string, offset, length) {
23899 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 23900}
3af2954a 23901
8b095871
IC
23902function asciiWrite (buf, string, offset, length) {
23903 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 23904}
3af2954a 23905
8b095871
IC
23906function latin1Write (buf, string, offset, length) {
23907 return asciiWrite(buf, string, offset, length)
ab78acc6 23908}
3af2954a 23909
8b095871
IC
23910function base64Write (buf, string, offset, length) {
23911 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 23912}
3af2954a 23913
8b095871
IC
23914function ucs2Write (buf, string, offset, length) {
23915 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
23916}
3af2954a 23917
8b095871
IC
23918Buffer.prototype.write = function write (string, offset, length, encoding) {
23919 // Buffer#write(string)
23920 if (offset === undefined) {
23921 encoding = 'utf8'
23922 length = this.length
23923 offset = 0
23924 // Buffer#write(string, encoding)
23925 } else if (length === undefined && typeof offset === 'string') {
23926 encoding = offset
23927 length = this.length
23928 offset = 0
23929 // Buffer#write(string, offset[, length][, encoding])
23930 } else if (isFinite(offset)) {
23931 offset = offset >>> 0
23932 if (isFinite(length)) {
23933 length = length >>> 0
23934 if (encoding === undefined) encoding = 'utf8'
23935 } else {
23936 encoding = length
23937 length = undefined
23938 }
23939 } else {
23940 throw new Error(
23941 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
23942 )
3af2954a
IC
23943 }
23944
8b095871
IC
23945 var remaining = this.length - offset
23946 if (length === undefined || length > remaining) length = remaining
3af2954a 23947
8b095871
IC
23948 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
23949 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 23950 }
3af2954a 23951
8b095871 23952 if (!encoding) encoding = 'utf8'
3af2954a 23953
8b095871
IC
23954 var loweredCase = false
23955 for (;;) {
23956 switch (encoding) {
23957 case 'hex':
23958 return hexWrite(this, string, offset, length)
3af2954a 23959
8b095871
IC
23960 case 'utf8':
23961 case 'utf-8':
23962 return utf8Write(this, string, offset, length)
3af2954a 23963
8b095871
IC
23964 case 'ascii':
23965 return asciiWrite(this, string, offset, length)
3af2954a 23966
8b095871
IC
23967 case 'latin1':
23968 case 'binary':
23969 return latin1Write(this, string, offset, length)
3af2954a 23970
8b095871
IC
23971 case 'base64':
23972 // Warning: maxLength not taken into account in base64Write
23973 return base64Write(this, string, offset, length)
3af2954a 23974
8b095871
IC
23975 case 'ucs2':
23976 case 'ucs-2':
23977 case 'utf16le':
23978 case 'utf-16le':
23979 return ucs2Write(this, string, offset, length)
3af2954a 23980
8b095871
IC
23981 default:
23982 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23983 encoding = ('' + encoding).toLowerCase()
23984 loweredCase = true
23985 }
3af2954a 23986 }
ab78acc6 23987}
3af2954a 23988
8b095871
IC
23989Buffer.prototype.toJSON = function toJSON () {
23990 return {
23991 type: 'Buffer',
23992 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 23993 }
ab78acc6
IC
23994}
23995
8b095871
IC
23996function base64Slice (buf, start, end) {
23997 if (start === 0 && end === buf.length) {
23998 return base64.fromByteArray(buf)
23999 } else {
24000 return base64.fromByteArray(buf.slice(start, end))
3af2954a 24001 }
8b095871 24002}
3af2954a 24003
8b095871
IC
24004function utf8Slice (buf, start, end) {
24005 end = Math.min(buf.length, end)
24006 var res = []
3af2954a 24007
8b095871
IC
24008 var i = start
24009 while (i < end) {
24010 var firstByte = buf[i]
24011 var codePoint = null
24012 var bytesPerSequence = (firstByte > 0xEF) ? 4
24013 : (firstByte > 0xDF) ? 3
24014 : (firstByte > 0xBF) ? 2
24015 : 1
3af2954a 24016
8b095871
IC
24017 if (i + bytesPerSequence <= end) {
24018 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 24019
8b095871
IC
24020 switch (bytesPerSequence) {
24021 case 1:
24022 if (firstByte < 0x80) {
24023 codePoint = firstByte
24024 }
24025 break
24026 case 2:
24027 secondByte = buf[i + 1]
24028 if ((secondByte & 0xC0) === 0x80) {
24029 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
24030 if (tempCodePoint > 0x7F) {
24031 codePoint = tempCodePoint
24032 }
24033 }
24034 break
24035 case 3:
24036 secondByte = buf[i + 1]
24037 thirdByte = buf[i + 2]
24038 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
24039 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
24040 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
24041 codePoint = tempCodePoint
24042 }
24043 }
24044 break
24045 case 4:
24046 secondByte = buf[i + 1]
24047 thirdByte = buf[i + 2]
24048 fourthByte = buf[i + 3]
24049 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
24050 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
24051 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
24052 codePoint = tempCodePoint
24053 }
24054 }
24055 }
24056 }
3af2954a 24057
8b095871
IC
24058 if (codePoint === null) {
24059 // we did not generate a valid codePoint so insert a
24060 // replacement char (U+FFFD) and advance only 1 byte
24061 codePoint = 0xFFFD
24062 bytesPerSequence = 1
24063 } else if (codePoint > 0xFFFF) {
24064 // encode to utf16 (surrogate pair dance)
24065 codePoint -= 0x10000
24066 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
24067 codePoint = 0xDC00 | codePoint & 0x3FF
24068 }
24069
24070 res.push(codePoint)
24071 i += bytesPerSequence
3af2954a
IC
24072 }
24073
8b095871 24074 return decodeCodePointsArray(res)
ab78acc6 24075}
3af2954a 24076
8b095871
IC
24077// Based on http://stackoverflow.com/a/22747272/680742, the browser with
24078// the lowest limit is Chrome, with 0x10000 args.
24079// We go 1 magnitude less, for safety
24080var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 24081
8b095871
IC
24082function decodeCodePointsArray (codePoints) {
24083 var len = codePoints.length
24084 if (len <= MAX_ARGUMENTS_LENGTH) {
24085 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
24086 }
24087
8b095871
IC
24088 // Decode in chunks to avoid "call stack size exceeded".
24089 var res = ''
24090 var i = 0
24091 while (i < len) {
24092 res += String.fromCharCode.apply(
24093 String,
24094 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
24095 )
3af2954a 24096 }
8b095871
IC
24097 return res
24098}
3af2954a 24099
8b095871
IC
24100function asciiSlice (buf, start, end) {
24101 var ret = ''
24102 end = Math.min(buf.length, end)
3af2954a 24103
8b095871
IC
24104 for (var i = start; i < end; ++i) {
24105 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 24106 }
8b095871
IC
24107 return ret
24108}
3af2954a 24109
8b095871
IC
24110function latin1Slice (buf, start, end) {
24111 var ret = ''
24112 end = Math.min(buf.length, end)
3af2954a 24113
8b095871
IC
24114 for (var i = start; i < end; ++i) {
24115 ret += String.fromCharCode(buf[i])
3af2954a 24116 }
8b095871 24117 return ret
ab78acc6 24118}
3af2954a 24119
8b095871
IC
24120function hexSlice (buf, start, end) {
24121 var len = buf.length
3af2954a 24122
8b095871
IC
24123 if (!start || start < 0) start = 0
24124 if (!end || end < 0 || end > len) end = len
3af2954a 24125
8b095871
IC
24126 var out = ''
24127 for (var i = start; i < end; ++i) {
24128 out += toHex(buf[i])
3af2954a 24129 }
8b095871
IC
24130 return out
24131}
3af2954a 24132
8b095871
IC
24133function utf16leSlice (buf, start, end) {
24134 var bytes = buf.slice(start, end)
24135 var res = ''
24136 for (var i = 0; i < bytes.length; i += 2) {
24137 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
24138 }
24139 return res
24140}
3af2954a 24141
8b095871
IC
24142Buffer.prototype.slice = function slice (start, end) {
24143 var len = this.length
24144 start = ~~start
24145 end = end === undefined ? len : ~~end
3af2954a 24146
8b095871
IC
24147 if (start < 0) {
24148 start += len
24149 if (start < 0) start = 0
24150 } else if (start > len) {
24151 start = len
24152 }
3af2954a 24153
8b095871
IC
24154 if (end < 0) {
24155 end += len
24156 if (end < 0) end = 0
24157 } else if (end > len) {
24158 end = len
24159 }
3af2954a 24160
8b095871 24161 if (end < start) end = start
3af2954a 24162
8b095871
IC
24163 var newBuf = this.subarray(start, end)
24164 // Return an augmented `Uint8Array` instance
24165 newBuf.__proto__ = Buffer.prototype
24166 return newBuf
24167}
3af2954a 24168
8b095871
IC
24169/*
24170 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 24171 */
8b095871
IC
24172function checkOffset (offset, ext, length) {
24173 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
24174 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 24175}
3af2954a 24176
8b095871
IC
24177Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
24178 offset = offset >>> 0
24179 byteLength = byteLength >>> 0
24180 if (!noAssert) checkOffset(offset, byteLength, this.length)
24181
24182 var val = this[offset]
24183 var mul = 1
24184 var i = 0
24185 while (++i < byteLength && (mul *= 0x100)) {
24186 val += this[offset + i] * mul
3af2954a
IC
24187 }
24188
8b095871
IC
24189 return val
24190}
3af2954a 24191
8b095871
IC
24192Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
24193 offset = offset >>> 0
24194 byteLength = byteLength >>> 0
24195 if (!noAssert) {
24196 checkOffset(offset, byteLength, this.length)
ab78acc6 24197 }
3af2954a 24198
8b095871
IC
24199 var val = this[offset + --byteLength]
24200 var mul = 1
24201 while (byteLength > 0 && (mul *= 0x100)) {
24202 val += this[offset + --byteLength] * mul
ab78acc6 24203 }
3af2954a 24204
8b095871 24205 return val
ab78acc6 24206}
3af2954a 24207
8b095871
IC
24208Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
24209 offset = offset >>> 0
24210 if (!noAssert) checkOffset(offset, 1, this.length)
24211 return this[offset]
ab78acc6 24212}
3af2954a 24213
8b095871
IC
24214Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
24215 offset = offset >>> 0
24216 if (!noAssert) checkOffset(offset, 2, this.length)
24217 return this[offset] | (this[offset + 1] << 8)
24218}
3af2954a 24219
8b095871
IC
24220Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
24221 offset = offset >>> 0
24222 if (!noAssert) checkOffset(offset, 2, this.length)
24223 return (this[offset] << 8) | this[offset + 1]
24224}
3af2954a 24225
8b095871
IC
24226Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
24227 offset = offset >>> 0
24228 if (!noAssert) checkOffset(offset, 4, this.length)
24229
24230 return ((this[offset]) |
24231 (this[offset + 1] << 8) |
24232 (this[offset + 2] << 16)) +
24233 (this[offset + 3] * 0x1000000)
ab78acc6 24234}
3af2954a 24235
8b095871
IC
24236Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
24237 offset = offset >>> 0
24238 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24239
8b095871
IC
24240 return (this[offset] * 0x1000000) +
24241 ((this[offset + 1] << 16) |
24242 (this[offset + 2] << 8) |
24243 this[offset + 3])
24244}
3af2954a 24245
8b095871
IC
24246Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
24247 offset = offset >>> 0
24248 byteLength = byteLength >>> 0
24249 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24250
8b095871
IC
24251 var val = this[offset]
24252 var mul = 1
24253 var i = 0
24254 while (++i < byteLength && (mul *= 0x100)) {
24255 val += this[offset + i] * mul
3af2954a 24256 }
8b095871 24257 mul *= 0x80
3af2954a 24258
8b095871 24259 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 24260
8b095871 24261 return val
ab78acc6 24262}
3af2954a 24263
8b095871
IC
24264Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
24265 offset = offset >>> 0
24266 byteLength = byteLength >>> 0
24267 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24268
8b095871
IC
24269 var i = byteLength
24270 var mul = 1
24271 var val = this[offset + --i]
24272 while (i > 0 && (mul *= 0x100)) {
24273 val += this[offset + --i] * mul
3af2954a 24274 }
8b095871 24275 mul *= 0x80
3af2954a 24276
8b095871
IC
24277 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
24278
24279 return val
ab78acc6 24280}
3af2954a 24281
8b095871
IC
24282Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
24283 offset = offset >>> 0
24284 if (!noAssert) checkOffset(offset, 1, this.length)
24285 if (!(this[offset] & 0x80)) return (this[offset])
24286 return ((0xff - this[offset] + 1) * -1)
ab78acc6 24287}
3af2954a 24288
8b095871
IC
24289Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
24290 offset = offset >>> 0
24291 if (!noAssert) checkOffset(offset, 2, this.length)
24292 var val = this[offset] | (this[offset + 1] << 8)
24293 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 24294}
3af2954a 24295
8b095871
IC
24296Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
24297 offset = offset >>> 0
24298 if (!noAssert) checkOffset(offset, 2, this.length)
24299 var val = this[offset + 1] | (this[offset] << 8)
24300 return (val & 0x8000) ? val | 0xFFFF0000 : val
24301}
ab78acc6 24302
8b095871
IC
24303Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
24304 offset = offset >>> 0
24305 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24306
8b095871
IC
24307 return (this[offset]) |
24308 (this[offset + 1] << 8) |
24309 (this[offset + 2] << 16) |
24310 (this[offset + 3] << 24)
ab78acc6 24311}
3af2954a 24312
8b095871
IC
24313Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
24314 offset = offset >>> 0
24315 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24316
8b095871
IC
24317 return (this[offset] << 24) |
24318 (this[offset + 1] << 16) |
24319 (this[offset + 2] << 8) |
24320 (this[offset + 3])
24321}
3af2954a 24322
8b095871
IC
24323Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
24324 offset = offset >>> 0
24325 if (!noAssert) checkOffset(offset, 4, this.length)
24326 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 24327}
3af2954a 24328
8b095871
IC
24329Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
24330 offset = offset >>> 0
24331 if (!noAssert) checkOffset(offset, 4, this.length)
24332 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 24333}
3af2954a 24334
8b095871
IC
24335Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
24336 offset = offset >>> 0
24337 if (!noAssert) checkOffset(offset, 8, this.length)
24338 return ieee754.read(this, offset, true, 52, 8)
24339}
3af2954a 24340
8b095871
IC
24341Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
24342 offset = offset >>> 0
24343 if (!noAssert) checkOffset(offset, 8, this.length)
24344 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 24345}
3af2954a 24346
8b095871
IC
24347function checkInt (buf, value, offset, ext, max, min) {
24348 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
24349 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
24350 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 24351}
3af2954a 24352
8b095871
IC
24353Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
24354 value = +value
24355 offset = offset >>> 0
24356 byteLength = byteLength >>> 0
24357 if (!noAssert) {
24358 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24359 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
24360 }
24361
8b095871 24362 var mul = 1
ab78acc6 24363 var i = 0
8b095871
IC
24364 this[offset] = value & 0xFF
24365 while (++i < byteLength && (mul *= 0x100)) {
24366 this[offset + i] = (value / mul) & 0xFF
24367 }
3af2954a 24368
8b095871
IC
24369 return offset + byteLength
24370}
24371
24372Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
24373 value = +value
24374 offset = offset >>> 0
24375 byteLength = byteLength >>> 0
24376 if (!noAssert) {
24377 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24378 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 24379 }
3af2954a 24380
8b095871
IC
24381 var i = byteLength - 1
24382 var mul = 1
24383 this[offset + i] = value & 0xFF
24384 while (--i >= 0 && (mul *= 0x100)) {
24385 this[offset + i] = (value / mul) & 0xFF
ab78acc6 24386 }
3af2954a 24387
8b095871
IC
24388 return offset + byteLength
24389}
24390
24391Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
24392 value = +value
24393 offset = offset >>> 0
24394 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
24395 this[offset] = (value & 0xff)
24396 return offset + 1
24397}
24398
24399Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
24400 value = +value
24401 offset = offset >>> 0
24402 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24403 this[offset] = (value & 0xff)
24404 this[offset + 1] = (value >>> 8)
24405 return offset + 2
24406}
24407
24408Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
24409 value = +value
24410 offset = offset >>> 0
24411 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24412 this[offset] = (value >>> 8)
24413 this[offset + 1] = (value & 0xff)
24414 return offset + 2
ab78acc6 24415}
3af2954a 24416
8b095871
IC
24417Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
24418 value = +value
24419 offset = offset >>> 0
24420 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24421 this[offset + 3] = (value >>> 24)
24422 this[offset + 2] = (value >>> 16)
24423 this[offset + 1] = (value >>> 8)
24424 this[offset] = (value & 0xff)
24425 return offset + 4
ab78acc6 24426}
3af2954a 24427
8b095871
IC
24428Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
24429 value = +value
24430 offset = offset >>> 0
24431 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24432 this[offset] = (value >>> 24)
24433 this[offset + 1] = (value >>> 16)
24434 this[offset + 2] = (value >>> 8)
24435 this[offset + 3] = (value & 0xff)
24436 return offset + 4
24437}
3af2954a 24438
8b095871
IC
24439Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
24440 value = +value
24441 offset = offset >>> 0
24442 if (!noAssert) {
24443 var limit = Math.pow(2, (8 * byteLength) - 1)
24444
24445 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
24446 }
24447
8b095871
IC
24448 var i = 0
24449 var mul = 1
24450 var sub = 0
24451 this[offset] = value & 0xFF
24452 while (++i < byteLength && (mul *= 0x100)) {
24453 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
24454 sub = 1
ab78acc6 24455 }
8b095871 24456 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
24457 }
24458
8b095871 24459 return offset + byteLength
ab78acc6 24460}
3af2954a 24461
8b095871
IC
24462Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
24463 value = +value
24464 offset = offset >>> 0
24465 if (!noAssert) {
24466 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 24467
8b095871
IC
24468 checkInt(this, value, offset, byteLength, limit - 1, -limit)
24469 }
ab78acc6 24470
8b095871
IC
24471 var i = byteLength - 1
24472 var mul = 1
24473 var sub = 0
24474 this[offset + i] = value & 0xFF
24475 while (--i >= 0 && (mul *= 0x100)) {
24476 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
24477 sub = 1
3af2954a 24478 }
8b095871 24479 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 24480 }
3af2954a 24481
8b095871
IC
24482 return offset + byteLength
24483}
3af2954a 24484
8b095871
IC
24485Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
24486 value = +value
24487 offset = offset >>> 0
24488 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
24489 if (value < 0) value = 0xff + value + 1
24490 this[offset] = (value & 0xff)
24491 return offset + 1
24492}
3af2954a 24493
8b095871
IC
24494Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
24495 value = +value
24496 offset = offset >>> 0
24497 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24498 this[offset] = (value & 0xff)
24499 this[offset + 1] = (value >>> 8)
24500 return offset + 2
24501}
3af2954a 24502
8b095871
IC
24503Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
24504 value = +value
24505 offset = offset >>> 0
24506 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24507 this[offset] = (value >>> 8)
24508 this[offset + 1] = (value & 0xff)
24509 return offset + 2
24510}
3af2954a 24511
8b095871
IC
24512Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
24513 value = +value
24514 offset = offset >>> 0
24515 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24516 this[offset] = (value & 0xff)
24517 this[offset + 1] = (value >>> 8)
24518 this[offset + 2] = (value >>> 16)
24519 this[offset + 3] = (value >>> 24)
24520 return offset + 4
24521}
3af2954a 24522
8b095871
IC
24523Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
24524 value = +value
24525 offset = offset >>> 0
24526 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24527 if (value < 0) value = 0xffffffff + value + 1
24528 this[offset] = (value >>> 24)
24529 this[offset + 1] = (value >>> 16)
24530 this[offset + 2] = (value >>> 8)
24531 this[offset + 3] = (value & 0xff)
24532 return offset + 4
24533}
3af2954a 24534
8b095871
IC
24535function checkIEEE754 (buf, value, offset, ext, max, min) {
24536 if (offset + ext > buf.length) throw new RangeError('Index out of range')
24537 if (offset < 0) throw new RangeError('Index out of range')
24538}
3af2954a 24539
8b095871
IC
24540function writeFloat (buf, value, offset, littleEndian, noAssert) {
24541 value = +value
24542 offset = offset >>> 0
24543 if (!noAssert) {
24544 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 24545 }
8b095871
IC
24546 ieee754.write(buf, value, offset, littleEndian, 23, 4)
24547 return offset + 4
ab78acc6 24548}
3af2954a 24549
8b095871
IC
24550Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
24551 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 24552}
3af2954a 24553
8b095871
IC
24554Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
24555 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 24556}
3af2954a 24557
8b095871
IC
24558function writeDouble (buf, value, offset, littleEndian, noAssert) {
24559 value = +value
24560 offset = offset >>> 0
24561 if (!noAssert) {
24562 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 24563 }
8b095871
IC
24564 ieee754.write(buf, value, offset, littleEndian, 52, 8)
24565 return offset + 8
ab78acc6 24566}
3af2954a 24567
8b095871
IC
24568Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
24569 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 24570}
3af2954a 24571
8b095871
IC
24572Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
24573 return writeDouble(this, value, offset, false, noAssert)
24574}
3af2954a 24575
8b095871
IC
24576// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
24577Buffer.prototype.copy = function copy (target, targetStart, start, end) {
24578 if (!start) start = 0
24579 if (!end && end !== 0) end = this.length
24580 if (targetStart >= target.length) targetStart = target.length
24581 if (!targetStart) targetStart = 0
24582 if (end > 0 && end < start) end = start
3af2954a 24583
8b095871
IC
24584 // Copy 0 bytes; we're done
24585 if (end === start) return 0
24586 if (target.length === 0 || this.length === 0) return 0
3af2954a 24587
8b095871
IC
24588 // Fatal error conditions
24589 if (targetStart < 0) {
24590 throw new RangeError('targetStart out of bounds')
3af2954a 24591 }
8b095871
IC
24592 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
24593 if (end < 0) throw new RangeError('sourceEnd out of bounds')
24594
24595 // Are we oob?
24596 if (end > this.length) end = this.length
24597 if (target.length - targetStart < end - start) {
24598 end = target.length - targetStart + start
3af2954a 24599 }
8b095871
IC
24600
24601 var len = end - start
24602 var i
24603
24604 if (this === target && start < targetStart && targetStart < end) {
24605 // descending copy from end
24606 for (i = len - 1; i >= 0; --i) {
24607 target[i + targetStart] = this[i + start]
3af2954a 24608 }
8b095871
IC
24609 } else if (len < 1000) {
24610 // ascending copy from start
24611 for (i = 0; i < len; ++i) {
24612 target[i + targetStart] = this[i + start]
24613 }
24614 } else {
24615 Uint8Array.prototype.set.call(
24616 target,
24617 this.subarray(start, start + len),
24618 targetStart
24619 )
3af2954a
IC
24620 }
24621
8b095871
IC
24622 return len
24623}
24624
24625// Usage:
24626// buffer.fill(number[, offset[, end]])
24627// buffer.fill(buffer[, offset[, end]])
24628// buffer.fill(string[, offset[, end]][, encoding])
24629Buffer.prototype.fill = function fill (val, start, end, encoding) {
24630 // Handle string cases:
24631 if (typeof val === 'string') {
24632 if (typeof start === 'string') {
24633 encoding = start
24634 start = 0
24635 end = this.length
24636 } else if (typeof end === 'string') {
24637 encoding = end
24638 end = this.length
24639 }
24640 if (val.length === 1) {
24641 var code = val.charCodeAt(0)
24642 if (code < 256) {
24643 val = code
3af2954a 24644 }
3af2954a 24645 }
8b095871
IC
24646 if (encoding !== undefined && typeof encoding !== 'string') {
24647 throw new TypeError('encoding must be a string')
24648 }
24649 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
24650 throw new TypeError('Unknown encoding: ' + encoding)
24651 }
24652 } else if (typeof val === 'number') {
24653 val = val & 255
ab78acc6 24654 }
3af2954a 24655
8b095871
IC
24656 // Invalid ranges are not set to a default, so can range check early.
24657 if (start < 0 || this.length < start || this.length < end) {
24658 throw new RangeError('Out of range index')
24659 }
3af2954a 24660
8b095871
IC
24661 if (end <= start) {
24662 return this
24663 }
3af2954a 24664
8b095871
IC
24665 start = start >>> 0
24666 end = end === undefined ? this.length : end >>> 0
3af2954a 24667
8b095871
IC
24668 if (!val) val = 0
24669
24670 var i
24671 if (typeof val === 'number') {
24672 for (i = start; i < end; ++i) {
24673 this[i] = val
24674 }
ab78acc6 24675 } else {
8b095871
IC
24676 var bytes = Buffer.isBuffer(val)
24677 ? val
24678 : new Buffer(val, encoding)
24679 var len = bytes.length
24680 for (i = 0; i < end - start; ++i) {
24681 this[i + start] = bytes[i % len]
ab78acc6
IC
24682 }
24683 }
3af2954a 24684
8b095871
IC
24685 return this
24686}
3af2954a 24687
8b095871
IC
24688// HELPER FUNCTIONS
24689// ================
24690
24691var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
24692
24693function base64clean (str) {
24694 // Node strips out invalid characters like \n and \t from the string, base64-js does not
24695 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
24696 // Node converts strings with length < 2 to ''
24697 if (str.length < 2) return ''
24698 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
24699 while (str.length % 4 !== 0) {
24700 str = str + '='
3af2954a 24701 }
8b095871 24702 return str
ab78acc6
IC
24703}
24704
8b095871
IC
24705function stringtrim (str) {
24706 if (str.trim) return str.trim()
24707 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 24708}
3af2954a 24709
8b095871
IC
24710function toHex (n) {
24711 if (n < 16) return '0' + n.toString(16)
24712 return n.toString(16)
ab78acc6 24713}
3af2954a 24714
8b095871
IC
24715function utf8ToBytes (string, units) {
24716 units = units || Infinity
24717 var codePoint
24718 var length = string.length
24719 var leadSurrogate = null
24720 var bytes = []
3af2954a 24721
8b095871
IC
24722 for (var i = 0; i < length; ++i) {
24723 codePoint = string.charCodeAt(i)
3af2954a 24724
8b095871
IC
24725 // is surrogate component
24726 if (codePoint > 0xD7FF && codePoint < 0xE000) {
24727 // last char was a lead
24728 if (!leadSurrogate) {
24729 // no lead yet
24730 if (codePoint > 0xDBFF) {
24731 // unexpected trail
24732 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24733 continue
24734 } else if (i + 1 === length) {
24735 // unpaired lead
24736 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24737 continue
24738 }
3af2954a 24739
8b095871
IC
24740 // valid lead
24741 leadSurrogate = codePoint
24742
24743 continue
24744 }
24745
24746 // 2 leads in a row
24747 if (codePoint < 0xDC00) {
24748 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24749 leadSurrogate = codePoint
24750 continue
24751 }
24752
24753 // valid surrogate pair
24754 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
24755 } else if (leadSurrogate) {
24756 // valid bmp char, but last char was a lead
24757 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24758 }
24759
24760 leadSurrogate = null
24761
24762 // encode utf8
24763 if (codePoint < 0x80) {
24764 if ((units -= 1) < 0) break
24765 bytes.push(codePoint)
24766 } else if (codePoint < 0x800) {
24767 if ((units -= 2) < 0) break
24768 bytes.push(
24769 codePoint >> 0x6 | 0xC0,
24770 codePoint & 0x3F | 0x80
24771 )
24772 } else if (codePoint < 0x10000) {
24773 if ((units -= 3) < 0) break
24774 bytes.push(
24775 codePoint >> 0xC | 0xE0,
24776 codePoint >> 0x6 & 0x3F | 0x80,
24777 codePoint & 0x3F | 0x80
24778 )
24779 } else if (codePoint < 0x110000) {
24780 if ((units -= 4) < 0) break
24781 bytes.push(
24782 codePoint >> 0x12 | 0xF0,
24783 codePoint >> 0xC & 0x3F | 0x80,
24784 codePoint >> 0x6 & 0x3F | 0x80,
24785 codePoint & 0x3F | 0x80
24786 )
ab78acc6 24787 } else {
8b095871 24788 throw new Error('Invalid code point')
ab78acc6 24789 }
3af2954a
IC
24790 }
24791
8b095871
IC
24792 return bytes
24793}
3af2954a 24794
8b095871
IC
24795function asciiToBytes (str) {
24796 var byteArray = []
24797 for (var i = 0; i < str.length; ++i) {
24798 // Node's code seems to be doing this and not & 0x7F..
24799 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 24800 }
8b095871
IC
24801 return byteArray
24802}
3af2954a 24803
8b095871
IC
24804function utf16leToBytes (str, units) {
24805 var c, hi, lo
24806 var byteArray = []
24807 for (var i = 0; i < str.length; ++i) {
24808 if ((units -= 2) < 0) break
3af2954a 24809
8b095871
IC
24810 c = str.charCodeAt(i)
24811 hi = c >> 8
24812 lo = c % 256
24813 byteArray.push(lo)
24814 byteArray.push(hi)
24815 }
ebd8d4e8 24816
8b095871
IC
24817 return byteArray
24818}
24819
24820function base64ToBytes (str) {
24821 return base64.toByteArray(base64clean(str))
24822}
24823
24824function blitBuffer (src, dst, offset, length) {
24825 for (var i = 0; i < length; ++i) {
24826 if ((i + offset >= dst.length) || (i >= src.length)) break
24827 dst[i + offset] = src[i]
24828 }
24829 return i
24830}
24831
24832function isnan (val) {
24833 return val !== val // eslint-disable-line no-self-compare
24834}
24835
24836},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
24837(function (Buffer){
24838// Copyright Joyent, Inc. and other Node contributors.
24839//
24840// Permission is hereby granted, free of charge, to any person obtaining a
24841// copy of this software and associated documentation files (the
24842// "Software"), to deal in the Software without restriction, including
24843// without limitation the rights to use, copy, modify, merge, publish,
24844// distribute, sublicense, and/or sell copies of the Software, and to permit
24845// persons to whom the Software is furnished to do so, subject to the
24846// following conditions:
24847//
24848// The above copyright notice and this permission notice shall be included
24849// in all copies or substantial portions of the Software.
24850//
24851// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24852// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24853// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24854// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24855// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24856// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24857// USE OR OTHER DEALINGS IN THE SOFTWARE.
24858
24859// NOTE: These type checking functions intentionally don't use `instanceof`
24860// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 24861
8b095871
IC
24862function isArray(arg) {
24863 if (Array.isArray) {
24864 return Array.isArray(arg);
24865 }
24866 return objectToString(arg) === '[object Array]';
24867}
24868exports.isArray = isArray;
ebd8d4e8 24869
8b095871
IC
24870function isBoolean(arg) {
24871 return typeof arg === 'boolean';
24872}
24873exports.isBoolean = isBoolean;
ebd8d4e8 24874
8b095871
IC
24875function isNull(arg) {
24876 return arg === null;
24877}
24878exports.isNull = isNull;
ebd8d4e8 24879
8b095871
IC
24880function isNullOrUndefined(arg) {
24881 return arg == null;
24882}
24883exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 24884
8b095871
IC
24885function isNumber(arg) {
24886 return typeof arg === 'number';
ab78acc6 24887}
8b095871 24888exports.isNumber = isNumber;
212b1b46 24889
8b095871
IC
24890function isString(arg) {
24891 return typeof arg === 'string';
ab78acc6 24892}
8b095871 24893exports.isString = isString;
212b1b46 24894
8b095871
IC
24895function isSymbol(arg) {
24896 return typeof arg === 'symbol';
ab78acc6 24897}
8b095871 24898exports.isSymbol = isSymbol;
ab78acc6 24899
8b095871
IC
24900function isUndefined(arg) {
24901 return arg === void 0;
24902}
24903exports.isUndefined = isUndefined;
ab78acc6 24904
8b095871
IC
24905function isRegExp(re) {
24906 return objectToString(re) === '[object RegExp]';
24907}
24908exports.isRegExp = isRegExp;
ab78acc6 24909
8b095871
IC
24910function isObject(arg) {
24911 return typeof arg === 'object' && arg !== null;
24912}
24913exports.isObject = isObject;
212b1b46 24914
8b095871
IC
24915function isDate(d) {
24916 return objectToString(d) === '[object Date]';
24917}
24918exports.isDate = isDate;
212b1b46 24919
8b095871
IC
24920function isError(e) {
24921 return (objectToString(e) === '[object Error]' || e instanceof Error);
24922}
24923exports.isError = isError;
212b1b46 24924
8b095871
IC
24925function isFunction(arg) {
24926 return typeof arg === 'function';
24927}
24928exports.isFunction = isFunction;
212b1b46 24929
8b095871
IC
24930function isPrimitive(arg) {
24931 return arg === null ||
24932 typeof arg === 'boolean' ||
24933 typeof arg === 'number' ||
24934 typeof arg === 'string' ||
24935 typeof arg === 'symbol' || // ES6 symbol
24936 typeof arg === 'undefined';
ab78acc6 24937}
8b095871 24938exports.isPrimitive = isPrimitive;
212b1b46 24939
8b095871 24940exports.isBuffer = Buffer.isBuffer;
ab78acc6 24941
8b095871
IC
24942function objectToString(o) {
24943 return Object.prototype.toString.call(o);
ab78acc6 24944}
212b1b46 24945
8b095871
IC
24946}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
24947},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
24948// Copyright Joyent, Inc. and other Node contributors.
24949//
24950// Permission is hereby granted, free of charge, to any person obtaining a
24951// copy of this software and associated documentation files (the
24952// "Software"), to deal in the Software without restriction, including
24953// without limitation the rights to use, copy, modify, merge, publish,
24954// distribute, sublicense, and/or sell copies of the Software, and to permit
24955// persons to whom the Software is furnished to do so, subject to the
24956// following conditions:
24957//
24958// The above copyright notice and this permission notice shall be included
24959// in all copies or substantial portions of the Software.
24960//
24961// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24962// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24963// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24964// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24965// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24966// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24967// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 24968
8b095871
IC
24969function EventEmitter() {
24970 this._events = this._events || {};
24971 this._maxListeners = this._maxListeners || undefined;
ab78acc6 24972}
8b095871 24973module.exports = EventEmitter;
212b1b46 24974
8b095871
IC
24975// Backwards-compat with node 0.10.x
24976EventEmitter.EventEmitter = EventEmitter;
212b1b46 24977
8b095871
IC
24978EventEmitter.prototype._events = undefined;
24979EventEmitter.prototype._maxListeners = undefined;
212b1b46 24980
8b095871
IC
24981// By default EventEmitters will print a warning if more than 10 listeners are
24982// added to it. This is a useful default which helps finding memory leaks.
24983EventEmitter.defaultMaxListeners = 10;
212b1b46 24984
8b095871
IC
24985// Obviously not all Emitters should be limited to 10. This function allows
24986// that to be increased. Set to zero for unlimited.
24987EventEmitter.prototype.setMaxListeners = function(n) {
24988 if (!isNumber(n) || n < 0 || isNaN(n))
24989 throw TypeError('n must be a positive number');
24990 this._maxListeners = n;
24991 return this;
24992};
212b1b46 24993
8b095871
IC
24994EventEmitter.prototype.emit = function(type) {
24995 var er, handler, len, args, i, listeners;
212b1b46 24996
8b095871
IC
24997 if (!this._events)
24998 this._events = {};
212b1b46 24999
8b095871
IC
25000 // If there is no 'error' event listener then throw.
25001 if (type === 'error') {
25002 if (!this._events.error ||
25003 (isObject(this._events.error) && !this._events.error.length)) {
25004 er = arguments[1];
25005 if (er instanceof Error) {
25006 throw er; // Unhandled 'error' event
25007 } else {
25008 // At least give some kind of context to the user
25009 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
25010 err.context = er;
25011 throw err;
25012 }
25013 }
ab78acc6 25014 }
212b1b46 25015
8b095871 25016 handler = this._events[type];
212b1b46 25017
8b095871
IC
25018 if (isUndefined(handler))
25019 return false;
25020
25021 if (isFunction(handler)) {
25022 switch (arguments.length) {
25023 // fast cases
25024 case 1:
25025 handler.call(this);
25026 break;
25027 case 2:
25028 handler.call(this, arguments[1]);
25029 break;
25030 case 3:
25031 handler.call(this, arguments[1], arguments[2]);
25032 break;
25033 // slower
25034 default:
25035 args = Array.prototype.slice.call(arguments, 1);
25036 handler.apply(this, args);
3af2954a 25037 }
8b095871
IC
25038 } else if (isObject(handler)) {
25039 args = Array.prototype.slice.call(arguments, 1);
25040 listeners = handler.slice();
25041 len = listeners.length;
25042 for (i = 0; i < len; i++)
25043 listeners[i].apply(this, args);
3af2954a 25044 }
212b1b46 25045
8b095871
IC
25046 return true;
25047};
ebd8d4e8 25048
8b095871
IC
25049EventEmitter.prototype.addListener = function(type, listener) {
25050 var m;
ebd8d4e8 25051
8b095871
IC
25052 if (!isFunction(listener))
25053 throw TypeError('listener must be a function');
ebd8d4e8 25054
8b095871
IC
25055 if (!this._events)
25056 this._events = {};
3af2954a 25057
8b095871
IC
25058 // To avoid recursion in the case that type === "newListener"! Before
25059 // adding it to the listeners, first emit "newListener".
25060 if (this._events.newListener)
25061 this.emit('newListener', type,
25062 isFunction(listener.listener) ?
25063 listener.listener : listener);
3af2954a 25064
8b095871
IC
25065 if (!this._events[type])
25066 // Optimize the case of one listener. Don't need the extra array object.
25067 this._events[type] = listener;
25068 else if (isObject(this._events[type]))
25069 // If we've already got an array, just append.
25070 this._events[type].push(listener);
25071 else
25072 // Adding the second element, need to change to array.
25073 this._events[type] = [this._events[type], listener];
3af2954a 25074
8b095871
IC
25075 // Check for listener leak
25076 if (isObject(this._events[type]) && !this._events[type].warned) {
25077 if (!isUndefined(this._maxListeners)) {
25078 m = this._maxListeners;
25079 } else {
25080 m = EventEmitter.defaultMaxListeners;
25081 }
3af2954a 25082
8b095871
IC
25083 if (m && m > 0 && this._events[type].length > m) {
25084 this._events[type].warned = true;
25085 console.error('(node) warning: possible EventEmitter memory ' +
25086 'leak detected. %d listeners added. ' +
25087 'Use emitter.setMaxListeners() to increase limit.',
25088 this._events[type].length);
25089 if (typeof console.trace === 'function') {
25090 // not supported in IE 10
25091 console.trace();
25092 }
25093 }
3af2954a
IC
25094 }
25095
8b095871
IC
25096 return this;
25097};
3af2954a 25098
8b095871 25099EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 25100
8b095871
IC
25101EventEmitter.prototype.once = function(type, listener) {
25102 if (!isFunction(listener))
25103 throw TypeError('listener must be a function');
3af2954a 25104
8b095871 25105 var fired = false;
ebd8d4e8 25106
8b095871
IC
25107 function g() {
25108 this.removeListener(type, g);
3af2954a 25109
8b095871
IC
25110 if (!fired) {
25111 fired = true;
25112 listener.apply(this, arguments);
25113 }
25114 }
3af2954a 25115
8b095871
IC
25116 g.listener = listener;
25117 this.on(type, g);
ebd8d4e8 25118
8b095871
IC
25119 return this;
25120};
ebd8d4e8 25121
8b095871
IC
25122// emits a 'removeListener' event iff the listener was removed
25123EventEmitter.prototype.removeListener = function(type, listener) {
25124 var list, position, length, i;
ebd8d4e8 25125
8b095871
IC
25126 if (!isFunction(listener))
25127 throw TypeError('listener must be a function');
ebd8d4e8 25128
8b095871
IC
25129 if (!this._events || !this._events[type])
25130 return this;
ab78acc6 25131
8b095871
IC
25132 list = this._events[type];
25133 length = list.length;
25134 position = -1;
ebd8d4e8 25135
8b095871
IC
25136 if (list === listener ||
25137 (isFunction(list.listener) && list.listener === listener)) {
25138 delete this._events[type];
25139 if (this._events.removeListener)
25140 this.emit('removeListener', type, listener);
ebd8d4e8 25141
8b095871
IC
25142 } else if (isObject(list)) {
25143 for (i = length; i-- > 0;) {
25144 if (list[i] === listener ||
25145 (list[i].listener && list[i].listener === listener)) {
25146 position = i;
25147 break;
25148 }
25149 }
25150
25151 if (position < 0)
25152 return this;
25153
25154 if (list.length === 1) {
25155 list.length = 0;
25156 delete this._events[type];
25157 } else {
25158 list.splice(position, 1);
25159 }
25160
25161 if (this._events.removeListener)
25162 this.emit('removeListener', type, listener);
ab78acc6 25163 }
ebd8d4e8 25164
8b095871
IC
25165 return this;
25166};
ebd8d4e8 25167
8b095871
IC
25168EventEmitter.prototype.removeAllListeners = function(type) {
25169 var key, listeners;
ebd8d4e8 25170
8b095871
IC
25171 if (!this._events)
25172 return this;
ab78acc6 25173
8b095871
IC
25174 // not listening for removeListener, no need to emit
25175 if (!this._events.removeListener) {
25176 if (arguments.length === 0)
25177 this._events = {};
25178 else if (this._events[type])
25179 delete this._events[type];
25180 return this;
25181 }
ab78acc6 25182
8b095871
IC
25183 // emit removeListener for all listeners on all events
25184 if (arguments.length === 0) {
25185 for (key in this._events) {
25186 if (key === 'removeListener') continue;
25187 this.removeAllListeners(key);
25188 }
25189 this.removeAllListeners('removeListener');
25190 this._events = {};
25191 return this;
25192 }
ebd8d4e8 25193
8b095871 25194 listeners = this._events[type];
ebd8d4e8 25195
8b095871
IC
25196 if (isFunction(listeners)) {
25197 this.removeListener(type, listeners);
25198 } else if (listeners) {
25199 // LIFO order
25200 while (listeners.length)
25201 this.removeListener(type, listeners[listeners.length - 1]);
25202 }
25203 delete this._events[type];
ebd8d4e8 25204
8b095871
IC
25205 return this;
25206};
ebd8d4e8 25207
8b095871
IC
25208EventEmitter.prototype.listeners = function(type) {
25209 var ret;
25210 if (!this._events || !this._events[type])
25211 ret = [];
25212 else if (isFunction(this._events[type]))
25213 ret = [this._events[type]];
25214 else
25215 ret = this._events[type].slice();
25216 return ret;
25217};
ebd8d4e8 25218
8b095871
IC
25219EventEmitter.prototype.listenerCount = function(type) {
25220 if (this._events) {
25221 var evlistener = this._events[type];
ebd8d4e8 25222
8b095871
IC
25223 if (isFunction(evlistener))
25224 return 1;
25225 else if (evlistener)
25226 return evlistener.length;
25227 }
25228 return 0;
25229};
25230
25231EventEmitter.listenerCount = function(emitter, type) {
25232 return emitter.listenerCount(type);
25233};
25234
25235function isFunction(arg) {
25236 return typeof arg === 'function';
ebd8d4e8
IC
25237}
25238
8b095871
IC
25239function isNumber(arg) {
25240 return typeof arg === 'number';
ebd8d4e8
IC
25241}
25242
8b095871
IC
25243function isObject(arg) {
25244 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
25245}
25246
8b095871
IC
25247function isUndefined(arg) {
25248 return arg === void 0;
ebd8d4e8
IC
25249}
25250
8b095871
IC
25251},{}],8:[function(require,module,exports){
25252exports.read = function (buffer, offset, isLE, mLen, nBytes) {
25253 var e, m
25254 var eLen = nBytes * 8 - mLen - 1
25255 var eMax = (1 << eLen) - 1
25256 var eBias = eMax >> 1
25257 var nBits = -7
25258 var i = isLE ? (nBytes - 1) : 0
25259 var d = isLE ? -1 : 1
25260 var s = buffer[offset + i]
ebd8d4e8 25261
8b095871 25262 i += d
ebd8d4e8 25263
8b095871
IC
25264 e = s & ((1 << (-nBits)) - 1)
25265 s >>= (-nBits)
25266 nBits += eLen
25267 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25268
8b095871
IC
25269 m = e & ((1 << (-nBits)) - 1)
25270 e >>= (-nBits)
25271 nBits += mLen
25272 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25273
8b095871
IC
25274 if (e === 0) {
25275 e = 1 - eBias
25276 } else if (e === eMax) {
25277 return m ? NaN : ((s ? -1 : 1) * Infinity)
25278 } else {
25279 m = m + Math.pow(2, mLen)
25280 e = e - eBias
ab78acc6 25281 }
8b095871 25282 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
25283}
25284
8b095871
IC
25285exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
25286 var e, m, c
25287 var eLen = nBytes * 8 - mLen - 1
25288 var eMax = (1 << eLen) - 1
25289 var eBias = eMax >> 1
25290 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
25291 var i = isLE ? 0 : (nBytes - 1)
25292 var d = isLE ? 1 : -1
25293 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 25294
8b095871 25295 value = Math.abs(value)
ebd8d4e8 25296
8b095871
IC
25297 if (isNaN(value) || value === Infinity) {
25298 m = isNaN(value) ? 1 : 0
25299 e = eMax
ab78acc6 25300 } else {
8b095871
IC
25301 e = Math.floor(Math.log(value) / Math.LN2)
25302 if (value * (c = Math.pow(2, -e)) < 1) {
25303 e--
25304 c *= 2
25305 }
25306 if (e + eBias >= 1) {
25307 value += rt / c
25308 } else {
25309 value += rt * Math.pow(2, 1 - eBias)
25310 }
25311 if (value * c >= 2) {
25312 e++
25313 c /= 2
25314 }
ebd8d4e8 25315
8b095871
IC
25316 if (e + eBias >= eMax) {
25317 m = 0
25318 e = eMax
25319 } else if (e + eBias >= 1) {
25320 m = (value * c - 1) * Math.pow(2, mLen)
25321 e = e + eBias
25322 } else {
25323 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
25324 e = 0
25325 }
ebd8d4e8 25326 }
ebd8d4e8 25327
8b095871 25328 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 25329
8b095871
IC
25330 e = (e << mLen) | m
25331 eLen += mLen
25332 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 25333
8b095871 25334 buffer[offset + i - d] |= s * 128
ab78acc6
IC
25335}
25336
8b095871
IC
25337},{}],9:[function(require,module,exports){
25338if (typeof Object.create === 'function') {
25339 // implementation from standard node.js 'util' module
25340 module.exports = function inherits(ctor, superCtor) {
25341 ctor.super_ = superCtor
25342 ctor.prototype = Object.create(superCtor.prototype, {
25343 constructor: {
25344 value: ctor,
25345 enumerable: false,
25346 writable: true,
25347 configurable: true
25348 }
25349 });
25350 };
25351} else {
25352 // old school shim for old browsers
25353 module.exports = function inherits(ctor, superCtor) {
25354 ctor.super_ = superCtor
25355 var TempCtor = function () {}
25356 TempCtor.prototype = superCtor.prototype
25357 ctor.prototype = new TempCtor()
25358 ctor.prototype.constructor = ctor
ebd8d4e8 25359 }
8b095871 25360}
ab78acc6 25361
8b095871
IC
25362},{}],10:[function(require,module,exports){
25363/*!
25364 * Determine if an object is a Buffer
25365 *
25366 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
25367 * @license MIT
25368 */
ebd8d4e8 25369
8b095871
IC
25370// The _isBuffer check is for Safari 5-7 support, because it's missing
25371// Object.prototype.constructor. Remove this eventually
25372module.exports = function (obj) {
25373 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
25374}
25375
8b095871
IC
25376function isBuffer (obj) {
25377 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
25378}
ebd8d4e8 25379
8b095871
IC
25380// For Node v0.10 support. Remove this eventually.
25381function isSlowBuffer (obj) {
25382 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
25383}
ebd8d4e8 25384
8b095871
IC
25385},{}],11:[function(require,module,exports){
25386var toString = {}.toString;
ab78acc6 25387
8b095871
IC
25388module.exports = Array.isArray || function (arr) {
25389 return toString.call(arr) == '[object Array]';
25390};
ebd8d4e8 25391
8b095871
IC
25392},{}],12:[function(require,module,exports){
25393(function (process){
25394'use strict';
ebd8d4e8 25395
8b095871
IC
25396if (!process.version ||
25397 process.version.indexOf('v0.') === 0 ||
25398 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
25399 module.exports = nextTick;
25400} else {
25401 module.exports = process.nextTick;
25402}
25403
25404function nextTick(fn, arg1, arg2, arg3) {
25405 if (typeof fn !== 'function') {
25406 throw new TypeError('"callback" argument must be a function');
25407 }
25408 var len = arguments.length;
25409 var args, i;
25410 switch (len) {
25411 case 0:
25412 case 1:
25413 return process.nextTick(fn);
25414 case 2:
25415 return process.nextTick(function afterTickOne() {
25416 fn.call(null, arg1);
25417 });
25418 case 3:
25419 return process.nextTick(function afterTickTwo() {
25420 fn.call(null, arg1, arg2);
25421 });
25422 case 4:
25423 return process.nextTick(function afterTickThree() {
25424 fn.call(null, arg1, arg2, arg3);
25425 });
25426 default:
25427 args = new Array(len - 1);
25428 i = 0;
25429 while (i < args.length) {
25430 args[i++] = arguments[i];
25431 }
25432 return process.nextTick(function afterTick() {
25433 fn.apply(null, args);
25434 });
ab78acc6 25435 }
ebd8d4e8
IC
25436}
25437
8b095871
IC
25438}).call(this,require('_process'))
25439},{"_process":13}],13:[function(require,module,exports){
25440// shim for using process in browser
25441var process = module.exports = {};
ebd8d4e8 25442
8b095871
IC
25443// cached from whatever global is present so that test runners that stub it
25444// don't break things. But we need to wrap it in a try catch in case it is
25445// wrapped in strict mode code which doesn't define any globals. It's inside a
25446// function because try/catches deoptimize in certain engines.
ab78acc6 25447
8b095871
IC
25448var cachedSetTimeout;
25449var cachedClearTimeout;
ebd8d4e8 25450
8b095871
IC
25451function defaultSetTimout() {
25452 throw new Error('setTimeout has not been defined');
ab78acc6 25453}
8b095871
IC
25454function defaultClearTimeout () {
25455 throw new Error('clearTimeout has not been defined');
ab78acc6 25456}
8b095871
IC
25457(function () {
25458 try {
25459 if (typeof setTimeout === 'function') {
25460 cachedSetTimeout = setTimeout;
25461 } else {
25462 cachedSetTimeout = defaultSetTimout;
25463 }
25464 } catch (e) {
25465 cachedSetTimeout = defaultSetTimout;
25466 }
25467 try {
25468 if (typeof clearTimeout === 'function') {
25469 cachedClearTimeout = clearTimeout;
25470 } else {
25471 cachedClearTimeout = defaultClearTimeout;
25472 }
25473 } catch (e) {
25474 cachedClearTimeout = defaultClearTimeout;
25475 }
25476} ())
25477function runTimeout(fun) {
25478 if (cachedSetTimeout === setTimeout) {
25479 //normal enviroments in sane situations
25480 return setTimeout(fun, 0);
25481 }
25482 // if setTimeout wasn't available but was latter defined
25483 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
25484 cachedSetTimeout = setTimeout;
25485 return setTimeout(fun, 0);
25486 }
25487 try {
25488 // when when somebody has screwed with setTimeout but no I.E. maddness
25489 return cachedSetTimeout(fun, 0);
25490 } catch(e){
25491 try {
25492 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25493 return cachedSetTimeout.call(null, fun, 0);
25494 } catch(e){
25495 // 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
25496 return cachedSetTimeout.call(this, fun, 0);
25497 }
25498 }
25499
ebd8d4e8 25500
ab78acc6 25501}
8b095871
IC
25502function runClearTimeout(marker) {
25503 if (cachedClearTimeout === clearTimeout) {
25504 //normal enviroments in sane situations
25505 return clearTimeout(marker);
25506 }
25507 // if clearTimeout wasn't available but was latter defined
25508 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
25509 cachedClearTimeout = clearTimeout;
25510 return clearTimeout(marker);
25511 }
25512 try {
25513 // when when somebody has screwed with setTimeout but no I.E. maddness
25514 return cachedClearTimeout(marker);
25515 } catch (e){
25516 try {
25517 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25518 return cachedClearTimeout.call(null, marker);
25519 } catch (e){
25520 // 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.
25521 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
25522 return cachedClearTimeout.call(this, marker);
25523 }
25524 }
25525
25526
ebd8d4e8 25527
ab78acc6 25528}
8b095871
IC
25529var queue = [];
25530var draining = false;
25531var currentQueue;
25532var queueIndex = -1;
ebd8d4e8 25533
8b095871
IC
25534function cleanUpNextTick() {
25535 if (!draining || !currentQueue) {
25536 return;
25537 }
25538 draining = false;
25539 if (currentQueue.length) {
25540 queue = currentQueue.concat(queue);
25541 } else {
25542 queueIndex = -1;
25543 }
25544 if (queue.length) {
25545 drainQueue();
25546 }
ebd8d4e8
IC
25547}
25548
8b095871
IC
25549function drainQueue() {
25550 if (draining) {
25551 return;
25552 }
25553 var timeout = runTimeout(cleanUpNextTick);
25554 draining = true;
25555
25556 var len = queue.length;
25557 while(len) {
25558 currentQueue = queue;
25559 queue = [];
25560 while (++queueIndex < len) {
25561 if (currentQueue) {
25562 currentQueue[queueIndex].run();
25563 }
25564 }
25565 queueIndex = -1;
25566 len = queue.length;
25567 }
25568 currentQueue = null;
25569 draining = false;
25570 runClearTimeout(timeout);
ebd8d4e8
IC
25571}
25572
8b095871
IC
25573process.nextTick = function (fun) {
25574 var args = new Array(arguments.length - 1);
25575 if (arguments.length > 1) {
25576 for (var i = 1; i < arguments.length; i++) {
25577 args[i - 1] = arguments[i];
25578 }
25579 }
25580 queue.push(new Item(fun, args));
25581 if (queue.length === 1 && !draining) {
25582 runTimeout(drainQueue);
25583 }
25584};
25585
25586// v8 likes predictible objects
25587function Item(fun, array) {
25588 this.fun = fun;
25589 this.array = array;
ab78acc6 25590}
8b095871
IC
25591Item.prototype.run = function () {
25592 this.fun.apply(null, this.array);
25593};
25594process.title = 'browser';
25595process.browser = true;
25596process.env = {};
25597process.argv = [];
25598process.version = ''; // empty string to avoid regexp issues
25599process.versions = {};
ebd8d4e8 25600
8b095871
IC
25601function noop() {}
25602
25603process.on = noop;
25604process.addListener = noop;
25605process.once = noop;
25606process.off = noop;
25607process.removeListener = noop;
25608process.removeAllListeners = noop;
25609process.emit = noop;
25610
25611process.binding = function (name) {
25612 throw new Error('process.binding is not supported');
25613};
25614
25615process.cwd = function () { return '/' };
25616process.chdir = function (dir) {
25617 throw new Error('process.chdir is not supported');
25618};
25619process.umask = function() { return 0; };
25620
25621},{}],14:[function(require,module,exports){
25622module.exports = require("./lib/_stream_duplex.js")
25623
25624},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
25625// a duplex stream is just a stream that is both readable and writable.
25626// Since JS doesn't have multiple prototypal inheritance, this class
25627// prototypally inherits from Readable, and then parasitically from
25628// Writable.
25629
25630'use strict';
25631
25632/*<replacement>*/
ab78acc6 25633
8b095871
IC
25634var objectKeys = Object.keys || function (obj) {
25635 var keys = [];
25636 for (var key in obj) {
25637 keys.push(key);
25638 }return keys;
25639};
25640/*</replacement>*/
ebd8d4e8 25641
8b095871 25642module.exports = Duplex;
ebd8d4e8 25643
8b095871
IC
25644/*<replacement>*/
25645var processNextTick = require('process-nextick-args');
25646/*</replacement>*/
ebd8d4e8 25647
8b095871
IC
25648/*<replacement>*/
25649var util = require('core-util-is');
25650util.inherits = require('inherits');
25651/*</replacement>*/
ebd8d4e8 25652
8b095871
IC
25653var Readable = require('./_stream_readable');
25654var Writable = require('./_stream_writable');
ebd8d4e8 25655
8b095871
IC
25656util.inherits(Duplex, Readable);
25657
25658var keys = objectKeys(Writable.prototype);
25659for (var v = 0; v < keys.length; v++) {
25660 var method = keys[v];
25661 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 25662}
ebd8d4e8 25663
8b095871
IC
25664function Duplex(options) {
25665 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 25666
8b095871
IC
25667 Readable.call(this, options);
25668 Writable.call(this, options);
ebd8d4e8 25669
8b095871 25670 if (options && options.readable === false) this.readable = false;
ebd8d4e8 25671
8b095871 25672 if (options && options.writable === false) this.writable = false;
ebd8d4e8 25673
8b095871
IC
25674 this.allowHalfOpen = true;
25675 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 25676
8b095871 25677 this.once('end', onend);
ebd8d4e8
IC
25678}
25679
8b095871
IC
25680// the no-half-open enforcer
25681function onend() {
25682 // if we allow half-open state, or if the writable side ended,
25683 // then we're ok.
25684 if (this.allowHalfOpen || this._writableState.ended) return;
25685
25686 // no more data can be written.
25687 // But allow more writes to happen in this tick.
25688 processNextTick(onEndNT, this);
ebd8d4e8
IC
25689}
25690
8b095871
IC
25691function onEndNT(self) {
25692 self.end();
25693}
ebd8d4e8 25694
8b095871
IC
25695function forEach(xs, f) {
25696 for (var i = 0, l = xs.length; i < l; i++) {
25697 f(xs[i], i);
25698 }
25699}
25700},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
25701// a passthrough stream.
25702// basically just the most minimal sort of Transform stream.
25703// Every written chunk gets output as-is.
ebd8d4e8 25704
8b095871 25705'use strict';
ebd8d4e8 25706
8b095871 25707module.exports = PassThrough;
ebd8d4e8 25708
8b095871 25709var Transform = require('./_stream_transform');
ebd8d4e8 25710
8b095871
IC
25711/*<replacement>*/
25712var util = require('core-util-is');
25713util.inherits = require('inherits');
25714/*</replacement>*/
ebd8d4e8 25715
8b095871 25716util.inherits(PassThrough, Transform);
ebd8d4e8 25717
8b095871
IC
25718function PassThrough(options) {
25719 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 25720
8b095871 25721 Transform.call(this, options);
ebd8d4e8
IC
25722}
25723
8b095871
IC
25724PassThrough.prototype._transform = function (chunk, encoding, cb) {
25725 cb(null, chunk);
25726};
25727},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
25728(function (process){
25729'use strict';
ebd8d4e8 25730
8b095871 25731module.exports = Readable;
ebd8d4e8 25732
8b095871
IC
25733/*<replacement>*/
25734var processNextTick = require('process-nextick-args');
25735/*</replacement>*/
ebd8d4e8 25736
8b095871
IC
25737/*<replacement>*/
25738var isArray = require('isarray');
25739/*</replacement>*/
ebd8d4e8 25740
8b095871
IC
25741/*<replacement>*/
25742var Duplex;
25743/*</replacement>*/
ebd8d4e8 25744
8b095871 25745Readable.ReadableState = ReadableState;
ebd8d4e8 25746
8b095871
IC
25747/*<replacement>*/
25748var EE = require('events').EventEmitter;
ebd8d4e8 25749
8b095871
IC
25750var EElistenerCount = function (emitter, type) {
25751 return emitter.listeners(type).length;
25752};
25753/*</replacement>*/
ebd8d4e8 25754
8b095871
IC
25755/*<replacement>*/
25756var Stream;
25757(function () {
25758 try {
25759 Stream = require('st' + 'ream');
25760 } catch (_) {} finally {
25761 if (!Stream) Stream = require('events').EventEmitter;
25762 }
25763})();
25764/*</replacement>*/
ebd8d4e8 25765
8b095871
IC
25766var Buffer = require('buffer').Buffer;
25767/*<replacement>*/
25768var bufferShim = require('buffer-shims');
25769/*</replacement>*/
ab78acc6 25770
8b095871
IC
25771/*<replacement>*/
25772var util = require('core-util-is');
25773util.inherits = require('inherits');
25774/*</replacement>*/
ab78acc6 25775
8b095871
IC
25776/*<replacement>*/
25777var debugUtil = require('util');
25778var debug = void 0;
25779if (debugUtil && debugUtil.debuglog) {
25780 debug = debugUtil.debuglog('stream');
25781} else {
25782 debug = function () {};
25783}
25784/*</replacement>*/
ab78acc6 25785
8b095871
IC
25786var BufferList = require('./internal/streams/BufferList');
25787var StringDecoder;
ab78acc6 25788
8b095871 25789util.inherits(Readable, Stream);
ab78acc6 25790
8b095871
IC
25791function prependListener(emitter, event, fn) {
25792 // Sadly this is not cacheable as some libraries bundle their own
25793 // event emitter implementation with them.
25794 if (typeof emitter.prependListener === 'function') {
25795 return emitter.prependListener(event, fn);
25796 } else {
25797 // This is a hack to make sure that our error handler is attached before any
25798 // userland ones. NEVER DO THIS. This is here only because this code needs
25799 // to continue to work with older versions of Node.js that do not include
25800 // the prependListener() method. The goal is to eventually remove this hack.
25801 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 25802 }
ebd8d4e8
IC
25803}
25804
8b095871
IC
25805function ReadableState(options, stream) {
25806 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25807
8b095871 25808 options = options || {};
ebd8d4e8 25809
8b095871
IC
25810 // object stream flag. Used to make read(n) ignore n and to
25811 // make all the buffer merging and length checks go away
25812 this.objectMode = !!options.objectMode;
ebd8d4e8 25813
8b095871 25814 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 25815
8b095871
IC
25816 // the point at which it stops calling _read() to fill the buffer
25817 // Note: 0 is a valid value, means "don't call _read preemptively ever"
25818 var hwm = options.highWaterMark;
25819 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
25820 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 25821
8b095871
IC
25822 // cast to ints.
25823 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 25824
8b095871
IC
25825 // A linked list is used to store data chunks instead of an array because the
25826 // linked list can remove elements from the beginning faster than
25827 // array.shift()
25828 this.buffer = new BufferList();
25829 this.length = 0;
25830 this.pipes = null;
25831 this.pipesCount = 0;
25832 this.flowing = null;
25833 this.ended = false;
25834 this.endEmitted = false;
25835 this.reading = false;
ab78acc6 25836
8b095871
IC
25837 // a flag to be able to tell if the onwrite cb is called immediately,
25838 // or on a later tick. We set this to true at first, because any
25839 // actions that shouldn't happen until "later" should generally also
25840 // not happen before the first write call.
25841 this.sync = true;
ebd8d4e8 25842
8b095871
IC
25843 // whenever we return null, then we set a flag to say
25844 // that we're awaiting a 'readable' event emission.
25845 this.needReadable = false;
25846 this.emittedReadable = false;
25847 this.readableListening = false;
25848 this.resumeScheduled = false;
ebd8d4e8 25849
8b095871
IC
25850 // Crypto is kind of old and crusty. Historically, its default string
25851 // encoding is 'binary' so we have to make this configurable.
25852 // Everything else in the universe uses 'utf8', though.
25853 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 25854
8b095871
IC
25855 // when piping, we only care about 'readable' events that happen
25856 // after read()ing all the bytes and not getting any pushback.
25857 this.ranOut = false;
ebd8d4e8 25858
8b095871
IC
25859 // the number of writers that are awaiting a drain event in .pipe()s
25860 this.awaitDrain = 0;
ebd8d4e8 25861
8b095871
IC
25862 // if true, a maybeReadMore has been scheduled
25863 this.readingMore = false;
ebd8d4e8 25864
8b095871
IC
25865 this.decoder = null;
25866 this.encoding = null;
25867 if (options.encoding) {
25868 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25869 this.decoder = new StringDecoder(options.encoding);
25870 this.encoding = options.encoding;
25871 }
25872}
ebd8d4e8 25873
8b095871
IC
25874function Readable(options) {
25875 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25876
8b095871 25877 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 25878
8b095871 25879 this._readableState = new ReadableState(options, this);
ebd8d4e8 25880
8b095871
IC
25881 // legacy
25882 this.readable = true;
ebd8d4e8 25883
8b095871 25884 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 25885
8b095871
IC
25886 Stream.call(this);
25887}
ebd8d4e8 25888
8b095871
IC
25889// Manually shove something into the read() buffer.
25890// This returns true if the highWaterMark has not been hit yet,
25891// similar to how Writable.write() returns true if you should
25892// write() some more.
25893Readable.prototype.push = function (chunk, encoding) {
25894 var state = this._readableState;
ebd8d4e8 25895
8b095871
IC
25896 if (!state.objectMode && typeof chunk === 'string') {
25897 encoding = encoding || state.defaultEncoding;
25898 if (encoding !== state.encoding) {
25899 chunk = bufferShim.from(chunk, encoding);
25900 encoding = '';
25901 }
25902 }
ebd8d4e8 25903
8b095871
IC
25904 return readableAddChunk(this, state, chunk, encoding, false);
25905};
ebd8d4e8 25906
8b095871
IC
25907// Unshift should *always* be something directly out of read()
25908Readable.prototype.unshift = function (chunk) {
25909 var state = this._readableState;
25910 return readableAddChunk(this, state, chunk, '', true);
25911};
ebd8d4e8 25912
8b095871
IC
25913Readable.prototype.isPaused = function () {
25914 return this._readableState.flowing === false;
25915};
25916
25917function readableAddChunk(stream, state, chunk, encoding, addToFront) {
25918 var er = chunkInvalid(state, chunk);
25919 if (er) {
25920 stream.emit('error', er);
25921 } else if (chunk === null) {
25922 state.reading = false;
25923 onEofChunk(stream, state);
25924 } else if (state.objectMode || chunk && chunk.length > 0) {
25925 if (state.ended && !addToFront) {
25926 var e = new Error('stream.push() after EOF');
25927 stream.emit('error', e);
25928 } else if (state.endEmitted && addToFront) {
25929 var _e = new Error('stream.unshift() after end event');
25930 stream.emit('error', _e);
25931 } else {
25932 var skipAdd;
25933 if (state.decoder && !addToFront && !encoding) {
25934 chunk = state.decoder.write(chunk);
25935 skipAdd = !state.objectMode && chunk.length === 0;
25936 }
ebd8d4e8 25937
8b095871 25938 if (!addToFront) state.reading = false;
ebd8d4e8 25939
8b095871
IC
25940 // Don't add to the buffer if we've decoded to an empty string chunk and
25941 // we're not in object mode
25942 if (!skipAdd) {
25943 // if we want the data now, just emit it.
25944 if (state.flowing && state.length === 0 && !state.sync) {
25945 stream.emit('data', chunk);
25946 stream.read(0);
25947 } else {
25948 // update the buffer info.
25949 state.length += state.objectMode ? 1 : chunk.length;
25950 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 25951
8b095871
IC
25952 if (state.needReadable) emitReadable(stream);
25953 }
25954 }
ab78acc6 25955
8b095871
IC
25956 maybeReadMore(stream, state);
25957 }
25958 } else if (!addToFront) {
25959 state.reading = false;
25960 }
ab78acc6 25961
8b095871
IC
25962 return needMoreData(state);
25963}
ab78acc6 25964
8b095871
IC
25965// if it's past the high water mark, we can push in some more.
25966// Also, if we have no data yet, we can stand some
25967// more bytes. This is to work around cases where hwm=0,
25968// such as the repl. Also, if the push() triggered a
25969// readable event, and the user called read(largeNumber) such that
25970// needReadable was set, then we ought to push more, so that another
25971// 'readable' event will be triggered.
25972function needMoreData(state) {
25973 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
25974}
ebd8d4e8 25975
8b095871
IC
25976// backwards compatibility.
25977Readable.prototype.setEncoding = function (enc) {
25978 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25979 this._readableState.decoder = new StringDecoder(enc);
25980 this._readableState.encoding = enc;
25981 return this;
25982};
25983
25984// Don't raise the hwm > 8MB
25985var MAX_HWM = 0x800000;
25986function computeNewHighWaterMark(n) {
25987 if (n >= MAX_HWM) {
25988 n = MAX_HWM;
ab78acc6 25989 } else {
8b095871
IC
25990 // Get the next highest power of 2 to prevent increasing hwm excessively in
25991 // tiny amounts
25992 n--;
25993 n |= n >>> 1;
25994 n |= n >>> 2;
25995 n |= n >>> 4;
25996 n |= n >>> 8;
25997 n |= n >>> 16;
25998 n++;
ebd8d4e8 25999 }
8b095871 26000 return n;
ebd8d4e8
IC
26001}
26002
8b095871
IC
26003// This function is designed to be inlinable, so please take care when making
26004// changes to the function body.
26005function howMuchToRead(n, state) {
26006 if (n <= 0 || state.length === 0 && state.ended) return 0;
26007 if (state.objectMode) return 1;
26008 if (n !== n) {
26009 // Only flow one buffer at a time
26010 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
26011 }
26012 // If we're asking for more than the current hwm, then raise the hwm.
26013 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
26014 if (n <= state.length) return n;
26015 // Don't have enough
26016 if (!state.ended) {
26017 state.needReadable = true;
26018 return 0;
26019 }
26020 return state.length;
26021}
ebd8d4e8 26022
8b095871
IC
26023// you can override either this method, or the async _read(n) below.
26024Readable.prototype.read = function (n) {
26025 debug('read', n);
26026 n = parseInt(n, 10);
26027 var state = this._readableState;
26028 var nOrig = n;
ebd8d4e8 26029
8b095871 26030 if (n !== 0) state.emittedReadable = false;
ab78acc6 26031
8b095871
IC
26032 // if we're doing read(0) to trigger a readable event, but we
26033 // already have a bunch of data in the buffer, then just trigger
26034 // the 'readable' event and move on.
26035 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
26036 debug('read: emitReadable', state.length, state.ended);
26037 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
26038 return null;
ebd8d4e8 26039 }
ebd8d4e8 26040
8b095871 26041 n = howMuchToRead(n, state);
ebd8d4e8 26042
8b095871
IC
26043 // if we've ended, and we're now clear, then finish it up.
26044 if (n === 0 && state.ended) {
26045 if (state.length === 0) endReadable(this);
26046 return null;
26047 }
ebd8d4e8 26048
8b095871
IC
26049 // All the actual chunk generation logic needs to be
26050 // *below* the call to _read. The reason is that in certain
26051 // synthetic stream cases, such as passthrough streams, _read
26052 // may be a completely synchronous operation which may change
26053 // the state of the read buffer, providing enough data when
26054 // before there was *not* enough.
26055 //
26056 // So, the steps are:
26057 // 1. Figure out what the state of things will be after we do
26058 // a read from the buffer.
26059 //
26060 // 2. If that resulting state will trigger a _read, then call _read.
26061 // Note that this may be asynchronous, or synchronous. Yes, it is
26062 // deeply ugly to write APIs this way, but that still doesn't mean
26063 // that the Readable class should behave improperly, as streams are
26064 // designed to be sync/async agnostic.
26065 // Take note if the _read call is sync or async (ie, if the read call
26066 // has returned yet), so that we know whether or not it's safe to emit
26067 // 'readable' etc.
26068 //
26069 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 26070
8b095871
IC
26071 // if we need a readable event, then we need to do some reading.
26072 var doRead = state.needReadable;
26073 debug('need readable', doRead);
ebd8d4e8 26074
8b095871
IC
26075 // if we currently have less than the highWaterMark, then also read some
26076 if (state.length === 0 || state.length - n < state.highWaterMark) {
26077 doRead = true;
26078 debug('length less than watermark', doRead);
26079 }
ebd8d4e8 26080
8b095871
IC
26081 // however, if we've ended, then there's no point, and if we're already
26082 // reading, then it's unnecessary.
26083 if (state.ended || state.reading) {
26084 doRead = false;
26085 debug('reading or ended', doRead);
26086 } else if (doRead) {
26087 debug('do read');
26088 state.reading = true;
26089 state.sync = true;
26090 // if the length is currently zero, then we *need* a readable event.
26091 if (state.length === 0) state.needReadable = true;
26092 // call internal read method
26093 this._read(state.highWaterMark);
26094 state.sync = false;
26095 // If _read pushed data synchronously, then `reading` will be false,
26096 // and we need to re-evaluate how much data we can return to the user.
26097 if (!state.reading) n = howMuchToRead(nOrig, state);
26098 }
ebd8d4e8 26099
8b095871
IC
26100 var ret;
26101 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 26102
8b095871
IC
26103 if (ret === null) {
26104 state.needReadable = true;
26105 n = 0;
26106 } else {
26107 state.length -= n;
26108 }
ebd8d4e8 26109
8b095871
IC
26110 if (state.length === 0) {
26111 // If we have nothing in the buffer, then we want to know
26112 // as soon as we *do* get something into the buffer.
26113 if (!state.ended) state.needReadable = true;
ebd8d4e8 26114
8b095871
IC
26115 // If we tried to read() past the EOF, then emit end on the next tick.
26116 if (nOrig !== n && state.ended) endReadable(this);
26117 }
26118
26119 if (ret !== null) this.emit('data', ret);
26120
26121 return ret;
ab78acc6
IC
26122};
26123
8b095871
IC
26124function chunkInvalid(state, chunk) {
26125 var er = null;
26126 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
26127 er = new TypeError('Invalid non-string/buffer chunk');
26128 }
26129 return er;
26130}
ab78acc6 26131
8b095871
IC
26132function onEofChunk(stream, state) {
26133 if (state.ended) return;
26134 if (state.decoder) {
26135 var chunk = state.decoder.end();
26136 if (chunk && chunk.length) {
26137 state.buffer.push(chunk);
26138 state.length += state.objectMode ? 1 : chunk.length;
26139 }
26140 }
26141 state.ended = true;
26142
26143 // emit 'readable' now to make sure it gets picked up.
26144 emitReadable(stream);
26145}
26146
26147// Don't emit readable right away in sync mode, because this can trigger
26148// another read() call => stack overflow. This way, it might trigger
26149// a nextTick recursion warning, but that's not so bad.
26150function emitReadable(stream) {
26151 var state = stream._readableState;
26152 state.needReadable = false;
26153 if (!state.emittedReadable) {
26154 debug('emitReadable', state.flowing);
26155 state.emittedReadable = true;
26156 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
26157 }
ebd8d4e8
IC
26158}
26159
8b095871
IC
26160function emitReadable_(stream) {
26161 debug('emit readable');
26162 stream.emit('readable');
26163 flow(stream);
26164}
ebd8d4e8 26165
8b095871
IC
26166// at this point, the user has presumably seen the 'readable' event,
26167// and called read() to consume some data. that may have triggered
26168// in turn another _read(n) call, in which case reading = true if
26169// it's in progress.
26170// However, if we're not ended, or reading, and the length < hwm,
26171// then go ahead and try to read some more preemptively.
26172function maybeReadMore(stream, state) {
26173 if (!state.readingMore) {
26174 state.readingMore = true;
26175 processNextTick(maybeReadMore_, stream, state);
26176 }
26177}
ab78acc6 26178
8b095871
IC
26179function maybeReadMore_(stream, state) {
26180 var len = state.length;
26181 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
26182 debug('maybeReadMore read 0');
26183 stream.read(0);
26184 if (len === state.length)
26185 // didn't get any data, stop spinning.
26186 break;else len = state.length;
26187 }
26188 state.readingMore = false;
26189}
ab78acc6 26190
8b095871
IC
26191// abstract method. to be overridden in specific implementation classes.
26192// call cb(er, data) where data is <= n in length.
26193// for virtual (non-string, non-buffer) streams, "length" is somewhat
26194// arbitrary, and perhaps not very meaningful.
26195Readable.prototype._read = function (n) {
26196 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
26197};
26198
8b095871
IC
26199Readable.prototype.pipe = function (dest, pipeOpts) {
26200 var src = this;
26201 var state = this._readableState;
ab78acc6 26202
8b095871
IC
26203 switch (state.pipesCount) {
26204 case 0:
26205 state.pipes = dest;
26206 break;
26207 case 1:
26208 state.pipes = [state.pipes, dest];
26209 break;
26210 default:
26211 state.pipes.push(dest);
26212 break;
ab78acc6 26213 }
8b095871
IC
26214 state.pipesCount += 1;
26215 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 26216
8b095871 26217 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 26218
8b095871
IC
26219 var endFn = doEnd ? onend : cleanup;
26220 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 26221
8b095871
IC
26222 dest.on('unpipe', onunpipe);
26223 function onunpipe(readable) {
26224 debug('onunpipe');
26225 if (readable === src) {
26226 cleanup();
ab78acc6 26227 }
8b095871 26228 }
ebd8d4e8 26229
8b095871
IC
26230 function onend() {
26231 debug('onend');
26232 dest.end();
ebd8d4e8
IC
26233 }
26234
8b095871
IC
26235 // when the dest drains, it reduces the awaitDrain counter
26236 // on the source. This would be more elegant with a .once()
26237 // handler in flow(), but adding and removing repeatedly is
26238 // too slow.
26239 var ondrain = pipeOnDrain(src);
26240 dest.on('drain', ondrain);
ebd8d4e8 26241
8b095871
IC
26242 var cleanedUp = false;
26243 function cleanup() {
26244 debug('cleanup');
26245 // cleanup event handlers once the pipe is broken
26246 dest.removeListener('close', onclose);
26247 dest.removeListener('finish', onfinish);
26248 dest.removeListener('drain', ondrain);
26249 dest.removeListener('error', onerror);
26250 dest.removeListener('unpipe', onunpipe);
26251 src.removeListener('end', onend);
26252 src.removeListener('end', cleanup);
26253 src.removeListener('data', ondata);
ebd8d4e8 26254
8b095871 26255 cleanedUp = true;
ebd8d4e8 26256
8b095871
IC
26257 // if the reader is waiting for a drain event from this
26258 // specific writer, then it would cause it to never start
26259 // flowing again.
26260 // So, if this is awaiting a drain, then we just call it now.
26261 // If we don't know, then assume that we are waiting for one.
26262 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
26263 }
ebd8d4e8 26264
8b095871
IC
26265 // If the user pushes more data while we're writing to dest then we'll end up
26266 // in ondata again. However, we only want to increase awaitDrain once because
26267 // dest will only emit one 'drain' event for the multiple writes.
26268 // => Introduce a guard on increasing awaitDrain.
26269 var increasedAwaitDrain = false;
26270 src.on('data', ondata);
26271 function ondata(chunk) {
26272 debug('ondata');
26273 increasedAwaitDrain = false;
26274 var ret = dest.write(chunk);
26275 if (false === ret && !increasedAwaitDrain) {
26276 // If the user unpiped during `dest.write()`, it is possible
26277 // to get stuck in a permanently paused state if that write
26278 // also returned false.
26279 // => Check whether `dest` is still a piping destination.
26280 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
26281 debug('false write response, pause', src._readableState.awaitDrain);
26282 src._readableState.awaitDrain++;
26283 increasedAwaitDrain = true;
26284 }
26285 src.pause();
26286 }
26287 }
ebd8d4e8 26288
8b095871
IC
26289 // if the dest has an error, then stop piping into it.
26290 // however, don't suppress the throwing behavior for this.
26291 function onerror(er) {
26292 debug('onerror', er);
26293 unpipe();
26294 dest.removeListener('error', onerror);
26295 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
26296 }
ab78acc6 26297
8b095871
IC
26298 // Make sure our error handler is attached before userland ones.
26299 prependListener(dest, 'error', onerror);
ab78acc6 26300
8b095871
IC
26301 // Both close and finish should trigger unpipe, but only once.
26302 function onclose() {
26303 dest.removeListener('finish', onfinish);
26304 unpipe();
26305 }
26306 dest.once('close', onclose);
26307 function onfinish() {
26308 debug('onfinish');
26309 dest.removeListener('close', onclose);
26310 unpipe();
ab78acc6 26311 }
8b095871 26312 dest.once('finish', onfinish);
ebd8d4e8 26313
8b095871
IC
26314 function unpipe() {
26315 debug('unpipe');
26316 src.unpipe(dest);
26317 }
26318
26319 // tell the dest that it's being piped to
26320 dest.emit('pipe', src);
26321
26322 // start the flow if it hasn't been started already.
26323 if (!state.flowing) {
26324 debug('pipe resume');
26325 src.resume();
26326 }
26327
26328 return dest;
ab78acc6 26329};
ebd8d4e8 26330
8b095871
IC
26331function pipeOnDrain(src) {
26332 return function () {
26333 var state = src._readableState;
26334 debug('pipeOnDrain', state.awaitDrain);
26335 if (state.awaitDrain) state.awaitDrain--;
26336 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
26337 state.flowing = true;
26338 flow(src);
26339 }
26340 };
26341}
ebd8d4e8 26342
8b095871
IC
26343Readable.prototype.unpipe = function (dest) {
26344 var state = this._readableState;
ebd8d4e8 26345
8b095871
IC
26346 // if we're not piping anywhere, then do nothing.
26347 if (state.pipesCount === 0) return this;
ebd8d4e8 26348
8b095871
IC
26349 // just one destination. most common case.
26350 if (state.pipesCount === 1) {
26351 // passed in one, but it's not the right one.
26352 if (dest && dest !== state.pipes) return this;
ebd8d4e8 26353
8b095871
IC
26354 if (!dest) dest = state.pipes;
26355
26356 // got a match.
26357 state.pipes = null;
26358 state.pipesCount = 0;
26359 state.flowing = false;
26360 if (dest) dest.emit('unpipe', this);
26361 return this;
ab78acc6 26362 }
ebd8d4e8 26363
8b095871 26364 // slow case. multiple pipe destinations.
ebd8d4e8 26365
8b095871
IC
26366 if (!dest) {
26367 // remove all.
26368 var dests = state.pipes;
26369 var len = state.pipesCount;
26370 state.pipes = null;
26371 state.pipesCount = 0;
26372 state.flowing = false;
ebd8d4e8 26373
8b095871
IC
26374 for (var i = 0; i < len; i++) {
26375 dests[i].emit('unpipe', this);
26376 }return this;
26377 }
ebd8d4e8 26378
8b095871
IC
26379 // try to find the right one.
26380 var index = indexOf(state.pipes, dest);
26381 if (index === -1) return this;
ebd8d4e8 26382
8b095871
IC
26383 state.pipes.splice(index, 1);
26384 state.pipesCount -= 1;
26385 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 26386
8b095871 26387 dest.emit('unpipe', this);
ab78acc6 26388
8b095871
IC
26389 return this;
26390};
ab78acc6 26391
8b095871
IC
26392// set up data events if they are asked for
26393// Ensure readable listeners eventually get something
26394Readable.prototype.on = function (ev, fn) {
26395 var res = Stream.prototype.on.call(this, ev, fn);
26396
26397 if (ev === 'data') {
26398 // Start flowing on next tick if stream isn't explicitly paused
26399 if (this._readableState.flowing !== false) this.resume();
26400 } else if (ev === 'readable') {
26401 var state = this._readableState;
26402 if (!state.endEmitted && !state.readableListening) {
26403 state.readableListening = state.needReadable = true;
26404 state.emittedReadable = false;
26405 if (!state.reading) {
26406 processNextTick(nReadingNextTick, this);
26407 } else if (state.length) {
26408 emitReadable(this, state);
ebd8d4e8 26409 }
ab78acc6 26410 }
8b095871 26411 }
ebd8d4e8 26412
8b095871
IC
26413 return res;
26414};
26415Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 26416
8b095871
IC
26417function nReadingNextTick(self) {
26418 debug('readable nexttick read 0');
26419 self.read(0);
26420}
ab78acc6 26421
8b095871
IC
26422// pause() and resume() are remnants of the legacy readable stream API
26423// If the user uses them, then switch into old mode.
26424Readable.prototype.resume = function () {
26425 var state = this._readableState;
26426 if (!state.flowing) {
26427 debug('resume');
26428 state.flowing = true;
26429 resume(this, state);
ebd8d4e8 26430 }
ab78acc6 26431 return this;
ebd8d4e8
IC
26432};
26433
8b095871
IC
26434function resume(stream, state) {
26435 if (!state.resumeScheduled) {
26436 state.resumeScheduled = true;
26437 processNextTick(resume_, stream, state);
ebd8d4e8 26438 }
8b095871 26439}
ab78acc6 26440
8b095871
IC
26441function resume_(stream, state) {
26442 if (!state.reading) {
26443 debug('resume read 0');
26444 stream.read(0);
ebd8d4e8 26445 }
ebd8d4e8 26446
8b095871
IC
26447 state.resumeScheduled = false;
26448 state.awaitDrain = 0;
26449 stream.emit('resume');
26450 flow(stream);
26451 if (state.flowing && !state.reading) stream.read(0);
26452}
ab78acc6 26453
8b095871
IC
26454Readable.prototype.pause = function () {
26455 debug('call pause flowing=%j', this._readableState.flowing);
26456 if (false !== this._readableState.flowing) {
26457 debug('pause');
26458 this._readableState.flowing = false;
26459 this.emit('pause');
ebd8d4e8 26460 }
ab78acc6
IC
26461 return this;
26462};
ebd8d4e8 26463
8b095871
IC
26464function flow(stream) {
26465 var state = stream._readableState;
26466 debug('flow', state.flowing);
26467 while (state.flowing && stream.read() !== null) {}
26468}
ebd8d4e8 26469
8b095871
IC
26470// wrap an old-style stream as the async data source.
26471// This is *not* part of the readable stream interface.
26472// It is an ugly unfortunate mess of history.
26473Readable.prototype.wrap = function (stream) {
26474 var state = this._readableState;
26475 var paused = false;
ebd8d4e8 26476
8b095871
IC
26477 var self = this;
26478 stream.on('end', function () {
26479 debug('wrapped end');
26480 if (state.decoder && !state.ended) {
26481 var chunk = state.decoder.end();
26482 if (chunk && chunk.length) self.push(chunk);
26483 }
ebd8d4e8 26484
8b095871
IC
26485 self.push(null);
26486 });
ebd8d4e8 26487
8b095871
IC
26488 stream.on('data', function (chunk) {
26489 debug('wrapped data');
26490 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 26491
8b095871
IC
26492 // don't skip over falsy values in objectMode
26493 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 26494
8b095871
IC
26495 var ret = self.push(chunk);
26496 if (!ret) {
26497 paused = true;
26498 stream.pause();
26499 }
26500 });
26501
26502 // proxy all the other methods.
26503 // important when wrapping filters and duplexes.
26504 for (var i in stream) {
26505 if (this[i] === undefined && typeof stream[i] === 'function') {
26506 this[i] = function (method) {
26507 return function () {
26508 return stream[method].apply(stream, arguments);
26509 };
26510 }(i);
26511 }
ab78acc6 26512 }
ebd8d4e8 26513
8b095871
IC
26514 // proxy certain important events.
26515 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
26516 forEach(events, function (ev) {
26517 stream.on(ev, self.emit.bind(self, ev));
26518 });
26519
26520 // when we try to consume some more bytes, simply unpause the
26521 // underlying stream.
26522 self._read = function (n) {
26523 debug('wrapped _read', n);
26524 if (paused) {
26525 paused = false;
26526 stream.resume();
26527 }
26528 };
26529
26530 return self;
ebd8d4e8
IC
26531};
26532
8b095871
IC
26533// exposed for testing purposes only.
26534Readable._fromList = fromList;
ebd8d4e8 26535
8b095871
IC
26536// Pluck off n bytes from an array of buffers.
26537// Length is the combined lengths of all the buffers in the list.
26538// This function is designed to be inlinable, so please take care when making
26539// changes to the function body.
26540function fromList(n, state) {
26541 // nothing buffered
26542 if (state.length === 0) return null;
ab78acc6 26543
8b095871
IC
26544 var ret;
26545 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
26546 // read it all, truncate the list
26547 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);
26548 state.buffer.clear();
26549 } else {
26550 // read part of list
26551 ret = fromListPartial(n, state.buffer, state.decoder);
26552 }
26553
26554 return ret;
26555}
26556
26557// Extracts only enough buffered data to satisfy the amount requested.
26558// This function is designed to be inlinable, so please take care when making
26559// changes to the function body.
26560function fromListPartial(n, list, hasStrings) {
26561 var ret;
26562 if (n < list.head.data.length) {
26563 // slice is the same for buffers and strings
26564 ret = list.head.data.slice(0, n);
26565 list.head.data = list.head.data.slice(n);
26566 } else if (n === list.head.data.length) {
26567 // first chunk is a perfect match
26568 ret = list.shift();
26569 } else {
26570 // result spans more than one buffer
26571 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
26572 }
26573 return ret;
ab78acc6 26574}
ebd8d4e8 26575
8b095871
IC
26576// Copies a specified amount of characters from the list of buffered data
26577// chunks.
26578// This function is designed to be inlinable, so please take care when making
26579// changes to the function body.
26580function copyFromBufferString(n, list) {
26581 var p = list.head;
26582 var c = 1;
26583 var ret = p.data;
26584 n -= ret.length;
26585 while (p = p.next) {
26586 var str = p.data;
26587 var nb = n > str.length ? str.length : n;
26588 if (nb === str.length) ret += str;else ret += str.slice(0, n);
26589 n -= nb;
26590 if (n === 0) {
26591 if (nb === str.length) {
26592 ++c;
26593 if (p.next) list.head = p.next;else list.head = list.tail = null;
26594 } else {
26595 list.head = p;
26596 p.data = str.slice(nb);
26597 }
26598 break;
ab78acc6 26599 }
8b095871
IC
26600 ++c;
26601 }
26602 list.length -= c;
26603 return ret;
ab78acc6
IC
26604}
26605
8b095871
IC
26606// Copies a specified amount of bytes from the list of buffered data chunks.
26607// This function is designed to be inlinable, so please take care when making
26608// changes to the function body.
26609function copyFromBuffer(n, list) {
26610 var ret = bufferShim.allocUnsafe(n);
26611 var p = list.head;
26612 var c = 1;
26613 p.data.copy(ret);
26614 n -= p.data.length;
26615 while (p = p.next) {
26616 var buf = p.data;
26617 var nb = n > buf.length ? buf.length : n;
26618 buf.copy(ret, ret.length - n, 0, nb);
26619 n -= nb;
26620 if (n === 0) {
26621 if (nb === buf.length) {
26622 ++c;
26623 if (p.next) list.head = p.next;else list.head = list.tail = null;
26624 } else {
26625 list.head = p;
26626 p.data = buf.slice(nb);
26627 }
26628 break;
ab78acc6 26629 }
8b095871
IC
26630 ++c;
26631 }
26632 list.length -= c;
26633 return ret;
ab78acc6 26634}
ebd8d4e8 26635
8b095871
IC
26636function endReadable(stream) {
26637 var state = stream._readableState;
ab78acc6 26638
8b095871
IC
26639 // If we get here before consuming all the bytes, then that is a
26640 // bug in node. Should never happen.
26641 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 26642
8b095871
IC
26643 if (!state.endEmitted) {
26644 state.ended = true;
26645 processNextTick(endReadableNT, state, stream);
26646 }
26647}
ebd8d4e8 26648
8b095871
IC
26649function endReadableNT(state, stream) {
26650 // Check that we didn't get one last unshift.
26651 if (!state.endEmitted && state.length === 0) {
26652 state.endEmitted = true;
26653 stream.readable = false;
26654 stream.emit('end');
26655 }
26656}
ebd8d4e8 26657
8b095871
IC
26658function forEach(xs, f) {
26659 for (var i = 0, l = xs.length; i < l; i++) {
26660 f(xs[i], i);
26661 }
26662}
ebd8d4e8 26663
8b095871
IC
26664function indexOf(xs, x) {
26665 for (var i = 0, l = xs.length; i < l; i++) {
26666 if (xs[i] === x) return i;
26667 }
26668 return -1;
26669}
26670}).call(this,require('_process'))
26671},{"./_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){
26672// a transform stream is a readable/writable stream where you do
26673// something with the data. Sometimes it's called a "filter",
26674// but that's not a great name for it, since that implies a thing where
26675// some bits pass through, and others are simply ignored. (That would
26676// be a valid example of a transform, of course.)
ab78acc6 26677//
8b095871
IC
26678// While the output is causally related to the input, it's not a
26679// necessarily symmetric or synchronous transformation. For example,
26680// a zlib stream might take multiple plain-text writes(), and then
26681// emit a single compressed chunk some time in the future.
ab78acc6 26682//
8b095871 26683// Here's how this works:
ab78acc6 26684//
8b095871
IC
26685// The Transform stream has all the aspects of the readable and writable
26686// stream classes. When you write(chunk), that calls _write(chunk,cb)
26687// internally, and returns false if there's a lot of pending writes
26688// buffered up. When you call read(), that calls _read(n) until
26689// there's enough pending readable data buffered up.
26690//
26691// In a transform stream, the written data is placed in a buffer. When
26692// _read(n) is called, it transforms the queued up data, calling the
26693// buffered _write cb's as it consumes chunks. If consuming a single
26694// written chunk would result in multiple output chunks, then the first
26695// outputted bit calls the readcb, and subsequent chunks just go into
26696// the read buffer, and will cause it to emit 'readable' if necessary.
26697//
26698// This way, back-pressure is actually determined by the reading side,
26699// since _read has to be called to start processing a new chunk. However,
26700// a pathological inflate type of transform can cause excessive buffering
26701// here. For example, imagine a stream where every byte of input is
26702// interpreted as an integer from 0-255, and then results in that many
26703// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
26704// 1kb of data being output. In this case, you could write a very small
26705// amount of input, and end up with a very large amount of output. In
26706// such a pathological inflating mechanism, there'd be no way to tell
26707// the system to stop doing the transform. A single 4MB write could
26708// cause the system to run out of memory.
26709//
26710// However, even in such a pathological case, only a single written chunk
26711// would be consumed, and then the rest would wait (un-transformed) until
26712// the results of the previous transformed chunk were consumed.
ebd8d4e8 26713
8b095871 26714'use strict';
ebd8d4e8 26715
8b095871 26716module.exports = Transform;
ebd8d4e8 26717
8b095871 26718var Duplex = require('./_stream_duplex');
ebd8d4e8 26719
ab78acc6
IC
26720/*<replacement>*/
26721var util = require('core-util-is');
26722util.inherits = require('inherits');
26723/*</replacement>*/
ebd8d4e8 26724
8b095871 26725util.inherits(Transform, Duplex);
ebd8d4e8 26726
8b095871
IC
26727function TransformState(stream) {
26728 this.afterTransform = function (er, data) {
26729 return afterTransform(stream, er, data);
26730 };
ebd8d4e8 26731
8b095871
IC
26732 this.needTransform = false;
26733 this.transforming = false;
26734 this.writecb = null;
26735 this.writechunk = null;
26736 this.writeencoding = null;
26737}
ebd8d4e8 26738
8b095871
IC
26739function afterTransform(stream, er, data) {
26740 var ts = stream._transformState;
26741 ts.transforming = false;
ebd8d4e8 26742
8b095871 26743 var cb = ts.writecb;
ebd8d4e8 26744
8b095871 26745 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 26746
8b095871
IC
26747 ts.writechunk = null;
26748 ts.writecb = null;
ebd8d4e8 26749
8b095871 26750 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26751
8b095871
IC
26752 cb(er);
26753
26754 var rs = stream._readableState;
26755 rs.reading = false;
26756 if (rs.needReadable || rs.length < rs.highWaterMark) {
26757 stream._read(rs.highWaterMark);
26758 }
ebd8d4e8
IC
26759}
26760
8b095871
IC
26761function Transform(options) {
26762 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 26763
8b095871 26764 Duplex.call(this, options);
ebd8d4e8 26765
8b095871
IC
26766 this._transformState = new TransformState(this);
26767
26768 var stream = this;
26769
26770 // start out asking for a readable event once data is transformed.
26771 this._readableState.needReadable = true;
26772
26773 // we have implemented the _read method, and done the other things
26774 // that Readable wants before the first _read call, so unset the
26775 // sync guard flag.
26776 this._readableState.sync = false;
26777
26778 if (options) {
26779 if (typeof options.transform === 'function') this._transform = options.transform;
26780
26781 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 26782 }
8b095871
IC
26783
26784 // When the writable side finishes, then flush out anything remaining.
26785 this.once('prefinish', function () {
26786 if (typeof this._flush === 'function') this._flush(function (er, data) {
26787 done(stream, er, data);
26788 });else done(stream);
26789 });
ab78acc6 26790}
ebd8d4e8 26791
8b095871
IC
26792Transform.prototype.push = function (chunk, encoding) {
26793 this._transformState.needTransform = false;
26794 return Duplex.prototype.push.call(this, chunk, encoding);
26795};
26796
26797// This is the part where you do stuff!
26798// override this function in implementation classes.
26799// 'chunk' is an input chunk.
ab78acc6 26800//
8b095871
IC
26801// Call `push(newChunk)` to pass along transformed output
26802// to the readable side. You may call 'push' zero or more times.
ab78acc6 26803//
8b095871
IC
26804// Call `cb(err)` when you are done with this chunk. If you pass
26805// an error, then that'll put the hurt on the whole operation. If you
26806// never call cb(), then you'll never get another chunk.
26807Transform.prototype._transform = function (chunk, encoding, cb) {
26808 throw new Error('_transform() is not implemented');
26809};
ebd8d4e8 26810
8b095871
IC
26811Transform.prototype._write = function (chunk, encoding, cb) {
26812 var ts = this._transformState;
26813 ts.writecb = cb;
26814 ts.writechunk = chunk;
26815 ts.writeencoding = encoding;
26816 if (!ts.transforming) {
26817 var rs = this._readableState;
26818 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
26819 }
26820};
ebd8d4e8 26821
8b095871
IC
26822// Doesn't matter what the args are here.
26823// _transform does all the work.
26824// That we got here means that the readable side wants more data.
26825Transform.prototype._read = function (n) {
26826 var ts = this._transformState;
ebd8d4e8 26827
8b095871
IC
26828 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
26829 ts.transforming = true;
26830 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
26831 } else {
26832 // mark that we need a transform, so that any data that comes in
26833 // will get processed, now that we've asked for it.
26834 ts.needTransform = true;
26835 }
26836};
ebd8d4e8 26837
8b095871
IC
26838function done(stream, er, data) {
26839 if (er) return stream.emit('error', er);
ebd8d4e8 26840
8b095871 26841 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26842
8b095871
IC
26843 // if there's nothing in the write buffer, then that means
26844 // that nothing more will ever be provided
26845 var ws = stream._writableState;
26846 var ts = stream._transformState;
ebd8d4e8 26847
8b095871 26848 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 26849
8b095871 26850 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 26851
8b095871
IC
26852 return stream.push(null);
26853}
26854},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 26855(function (process){
8b095871
IC
26856// A bit simpler than readable streams.
26857// Implement an async ._write(chunk, encoding, cb), and it'll handle all
26858// the drain event emission and buffering.
ebd8d4e8 26859
8b095871
IC
26860'use strict';
26861
26862module.exports = Writable;
ebd8d4e8 26863
ab78acc6 26864/*<replacement>*/
8b095871 26865var processNextTick = require('process-nextick-args');
ab78acc6
IC
26866/*</replacement>*/
26867
ab78acc6 26868/*<replacement>*/
8b095871 26869var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
26870/*</replacement>*/
26871
ab78acc6 26872/*<replacement>*/
8b095871 26873var Duplex;
ab78acc6
IC
26874/*</replacement>*/
26875
8b095871 26876Writable.WritableState = WritableState;
ab78acc6
IC
26877
26878/*<replacement>*/
26879var util = require('core-util-is');
26880util.inherits = require('inherits');
26881/*</replacement>*/
26882
8b095871
IC
26883/*<replacement>*/
26884var internalUtil = {
26885 deprecate: require('util-deprecate')
26886};
26887/*</replacement>*/
ab78acc6 26888
8b095871
IC
26889/*<replacement>*/
26890var Stream;
26891(function () {
26892 try {
26893 Stream = require('st' + 'ream');
26894 } catch (_) {} finally {
26895 if (!Stream) Stream = require('events').EventEmitter;
26896 }
26897})();
26898/*</replacement>*/
ab78acc6 26899
8b095871 26900var Buffer = require('buffer').Buffer;
ab78acc6 26901/*<replacement>*/
8b095871 26902var bufferShim = require('buffer-shims');
ab78acc6
IC
26903/*</replacement>*/
26904
8b095871
IC
26905util.inherits(Writable, Stream);
26906
26907function nop() {}
ab78acc6 26908
8b095871
IC
26909function WriteReq(chunk, encoding, cb) {
26910 this.chunk = chunk;
26911 this.encoding = encoding;
26912 this.callback = cb;
26913 this.next = null;
26914}
ab78acc6 26915
8b095871
IC
26916function WritableState(options, stream) {
26917 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
26918
26919 options = options || {};
26920
8b095871
IC
26921 // object stream flag to indicate whether or not this stream
26922 // contains buffers or objects.
26923 this.objectMode = !!options.objectMode;
26924
26925 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
26926
26927 // the point at which write() starts returning false
26928 // Note: 0 is a valid value, means that we always return false if
26929 // the entire buffer is not flushed immediately on write()
ab78acc6 26930 var hwm = options.highWaterMark;
8b095871
IC
26931 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
26932 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
26933
26934 // cast to ints.
8b095871 26935 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 26936
8b095871
IC
26937 // drain event flag.
26938 this.needDrain = false;
26939 // at the start of calling end()
26940 this.ending = false;
26941 // when end() has been called, and returned
ab78acc6 26942 this.ended = false;
8b095871
IC
26943 // when 'finish' is emitted
26944 this.finished = false;
26945
26946 // should we decode strings into buffers before passing to _write?
26947 // this is here so that some node-core streams can optimize string
26948 // handling at a lower level.
26949 var noDecode = options.decodeStrings === false;
26950 this.decodeStrings = !noDecode;
26951
26952 // Crypto is kind of old and crusty. Historically, its default string
26953 // encoding is 'binary' so we have to make this configurable.
26954 // Everything else in the universe uses 'utf8', though.
26955 this.defaultEncoding = options.defaultEncoding || 'utf8';
26956
26957 // not an actual buffer we keep track of, but a measurement
26958 // of how much we're waiting to get pushed to some underlying
26959 // socket or file.
26960 this.length = 0;
26961
26962 // a flag to see when we're in the middle of a write.
26963 this.writing = false;
26964
26965 // when true all writes will be buffered until .uncork() call
26966 this.corked = 0;
ebd8d4e8 26967
ab78acc6
IC
26968 // a flag to be able to tell if the onwrite cb is called immediately,
26969 // or on a later tick. We set this to true at first, because any
26970 // actions that shouldn't happen until "later" should generally also
26971 // not happen before the first write call.
26972 this.sync = true;
ebd8d4e8 26973
8b095871
IC
26974 // a flag to know if we're processing previously buffered items, which
26975 // may call the _write() callback in the same tick, so that we don't
26976 // end up in an overlapped onwrite situation.
26977 this.bufferProcessing = false;
26978
26979 // the callback that's passed to _write(chunk,cb)
26980 this.onwrite = function (er) {
26981 onwrite(stream, er);
26982 };
26983
26984 // the callback that the user supplies to write(chunk,encoding,cb)
26985 this.writecb = null;
26986
26987 // the amount that is being written when _write is called.
26988 this.writelen = 0;
26989
26990 this.bufferedRequest = null;
26991 this.lastBufferedRequest = null;
26992
26993 // number of pending user-supplied write callbacks
26994 // this must be 0 before 'finish' can be emitted
26995 this.pendingcb = 0;
26996
26997 // emit prefinish if the only thing we're waiting for is _write cbs
26998 // This is relevant for synchronous Transform streams
26999 this.prefinished = false;
27000
27001 // True if the error was already emitted and should not be thrown again
27002 this.errorEmitted = false;
27003
27004 // count buffered requests
27005 this.bufferedRequestCount = 0;
27006
27007 // allocate the first CorkedRequest, there is always
27008 // one allocated and free to use, and we maintain at most two
27009 this.corkedRequestsFree = new CorkedRequest(this);
27010}
27011
27012WritableState.prototype.getBuffer = function getBuffer() {
27013 var current = this.bufferedRequest;
27014 var out = [];
27015 while (current) {
27016 out.push(current);
27017 current = current.next;
27018 }
27019 return out;
27020};
27021
27022(function () {
27023 try {
27024 Object.defineProperty(WritableState.prototype, 'buffer', {
27025 get: internalUtil.deprecate(function () {
27026 return this.getBuffer();
27027 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
27028 });
27029 } catch (_) {}
27030})();
27031
27032// Test _writableState for inheritance to account for Duplex streams,
27033// whose prototype chain only points to Readable.
27034var realHasInstance;
27035if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
27036 realHasInstance = Function.prototype[Symbol.hasInstance];
27037 Object.defineProperty(Writable, Symbol.hasInstance, {
27038 value: function (object) {
27039 if (realHasInstance.call(this, object)) return true;
27040
27041 return object && object._writableState instanceof WritableState;
27042 }
27043 });
27044} else {
27045 realHasInstance = function (object) {
27046 return object instanceof this;
27047 };
27048}
27049
27050function Writable(options) {
27051 Duplex = Duplex || require('./_stream_duplex');
27052
27053 // Writable ctor is applied to Duplexes, too.
27054 // `realHasInstance` is necessary because using plain `instanceof`
27055 // would return false, as no `_writableState` property is attached.
27056
27057 // Trying to use the custom `instanceof` for Writable here will also break the
27058 // Node.js LazyTransform implementation, which has a non-trivial getter for
27059 // `_writableState` that would lead to infinite recursion.
27060 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
27061 return new Writable(options);
27062 }
27063
27064 this._writableState = new WritableState(options, this);
27065
27066 // legacy.
27067 this.writable = true;
27068
27069 if (options) {
27070 if (typeof options.write === 'function') this._write = options.write;
27071
27072 if (typeof options.writev === 'function') this._writev = options.writev;
27073 }
27074
27075 Stream.call(this);
27076}
27077
27078// Otherwise people can pipe Writable streams, which is just wrong.
27079Writable.prototype.pipe = function () {
27080 this.emit('error', new Error('Cannot pipe, not readable'));
27081};
27082
27083function writeAfterEnd(stream, cb) {
27084 var er = new Error('write after end');
27085 // TODO: defer error events consistently everywhere, not just the cb
27086 stream.emit('error', er);
27087 processNextTick(cb, er);
27088}
27089
27090// If we get something that is not a buffer, string, null, or undefined,
27091// and we're not in objectMode, then that's an error.
27092// Otherwise stream chunks are all considered to be of length=1, and the
27093// watermarks determine how many objects to keep in the buffer, rather than
27094// how many bytes or characters.
27095function validChunk(stream, state, chunk, cb) {
27096 var valid = true;
27097 var er = false;
27098 // Always throw error if a null is written
27099 // if we are not in object mode then throw
27100 // if it is not a buffer, string, or undefined.
27101 if (chunk === null) {
27102 er = new TypeError('May not write null values to stream');
27103 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
27104 er = new TypeError('Invalid non-string/buffer chunk');
27105 }
27106 if (er) {
27107 stream.emit('error', er);
27108 processNextTick(cb, er);
27109 valid = false;
27110 }
27111 return valid;
27112}
ebd8d4e8 27113
8b095871
IC
27114Writable.prototype.write = function (chunk, encoding, cb) {
27115 var state = this._writableState;
27116 var ret = false;
ab78acc6 27117
8b095871
IC
27118 if (typeof encoding === 'function') {
27119 cb = encoding;
27120 encoding = null;
27121 }
ab78acc6 27122
8b095871 27123 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 27124
8b095871 27125 if (typeof cb !== 'function') cb = nop;
ab78acc6 27126
8b095871
IC
27127 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
27128 state.pendingcb++;
27129 ret = writeOrBuffer(this, state, chunk, encoding, cb);
27130 }
ab78acc6 27131
8b095871
IC
27132 return ret;
27133};
ab78acc6 27134
8b095871
IC
27135Writable.prototype.cork = function () {
27136 var state = this._writableState;
ab78acc6 27137
8b095871
IC
27138 state.corked++;
27139};
ebd8d4e8 27140
8b095871
IC
27141Writable.prototype.uncork = function () {
27142 var state = this._writableState;
ab78acc6 27143
8b095871
IC
27144 if (state.corked) {
27145 state.corked--;
ab78acc6 27146
8b095871
IC
27147 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
27148 }
27149};
ab78acc6 27150
8b095871
IC
27151Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
27152 // node::ParseEncoding() requires lower case.
27153 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
27154 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);
27155 this._writableState.defaultEncoding = encoding;
27156 return this;
27157};
ab78acc6 27158
8b095871
IC
27159function decodeChunk(state, chunk, encoding) {
27160 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
27161 chunk = bufferShim.from(chunk, encoding);
27162 }
27163 return chunk;
ab78acc6
IC
27164}
27165
8b095871
IC
27166// if we're already writing something, then just put this
27167// in the queue, and wait our turn. Otherwise, call _write
27168// If we return false, then we need a drain event, so set that flag.
27169function writeOrBuffer(stream, state, chunk, encoding, cb) {
27170 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 27171
8b095871
IC
27172 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
27173 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27174
8b095871 27175 state.length += len;
ebd8d4e8 27176
8b095871
IC
27177 var ret = state.length < state.highWaterMark;
27178 // we must ensure that previous needDrain will not be reset to false.
27179 if (!ret) state.needDrain = true;
ebd8d4e8 27180
8b095871
IC
27181 if (state.writing || state.corked) {
27182 var last = state.lastBufferedRequest;
27183 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
27184 if (last) {
27185 last.next = state.lastBufferedRequest;
ebd8d4e8 27186 } else {
8b095871
IC
27187 state.bufferedRequest = state.lastBufferedRequest;
27188 }
27189 state.bufferedRequestCount += 1;
27190 } else {
27191 doWrite(stream, state, false, len, chunk, encoding, cb);
27192 }
ab78acc6 27193
8b095871
IC
27194 return ret;
27195}
ab78acc6 27196
8b095871
IC
27197function doWrite(stream, state, writev, len, chunk, encoding, cb) {
27198 state.writelen = len;
27199 state.writecb = cb;
27200 state.writing = true;
27201 state.sync = true;
27202 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
27203 state.sync = false;
27204}
ab78acc6 27205
8b095871
IC
27206function onwriteError(stream, state, sync, er, cb) {
27207 --state.pendingcb;
27208 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 27209
8b095871
IC
27210 stream._writableState.errorEmitted = true;
27211 stream.emit('error', er);
27212}
ebd8d4e8 27213
8b095871
IC
27214function onwriteStateUpdate(state) {
27215 state.writing = false;
27216 state.writecb = null;
27217 state.length -= state.writelen;
27218 state.writelen = 0;
ab78acc6 27219}
ebd8d4e8 27220
8b095871
IC
27221function onwrite(stream, er) {
27222 var state = stream._writableState;
27223 var sync = state.sync;
27224 var cb = state.writecb;
ab78acc6 27225
8b095871 27226 onwriteStateUpdate(state);
ab78acc6 27227
8b095871
IC
27228 if (er) onwriteError(stream, state, sync, er, cb);else {
27229 // Check if we're actually ready to finish, but don't emit yet
27230 var finished = needFinish(state);
27231
27232 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
27233 clearBuffer(stream, state);
27234 }
27235
27236 if (sync) {
27237 /*<replacement>*/
27238 asyncWrite(afterWrite, stream, state, finished, cb);
27239 /*</replacement>*/
27240 } else {
27241 afterWrite(stream, state, finished, cb);
27242 }
27243 }
ab78acc6
IC
27244}
27245
8b095871
IC
27246function afterWrite(stream, state, finished, cb) {
27247 if (!finished) onwriteDrain(stream, state);
27248 state.pendingcb--;
27249 cb();
27250 finishMaybe(stream, state);
27251}
ab78acc6 27252
8b095871
IC
27253// Must force callback to be called on nextTick, so that we don't
27254// emit 'drain' before the write() consumer gets the 'false' return
27255// value, and has a chance to attach a 'drain' listener.
27256function onwriteDrain(stream, state) {
27257 if (state.length === 0 && state.needDrain) {
27258 state.needDrain = false;
27259 stream.emit('drain');
ebd8d4e8 27260 }
ebd8d4e8 27261}
ebd8d4e8 27262
8b095871
IC
27263// if there's something in the buffer waiting, then process it
27264function clearBuffer(stream, state) {
27265 state.bufferProcessing = true;
27266 var entry = state.bufferedRequest;
ebd8d4e8 27267
8b095871
IC
27268 if (stream._writev && entry && entry.next) {
27269 // Fast case, write everything using _writev()
27270 var l = state.bufferedRequestCount;
27271 var buffer = new Array(l);
27272 var holder = state.corkedRequestsFree;
27273 holder.entry = entry;
ebd8d4e8 27274
8b095871
IC
27275 var count = 0;
27276 while (entry) {
27277 buffer[count] = entry;
27278 entry = entry.next;
27279 count += 1;
27280 }
ebd8d4e8 27281
8b095871 27282 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 27283
8b095871
IC
27284 // doWrite is almost always async, defer these to save a bit of time
27285 // as the hot path ends with doWrite
27286 state.pendingcb++;
27287 state.lastBufferedRequest = null;
27288 if (holder.next) {
27289 state.corkedRequestsFree = holder.next;
27290 holder.next = null;
27291 } else {
27292 state.corkedRequestsFree = new CorkedRequest(state);
27293 }
27294 } else {
27295 // Slow case, write chunks one-by-one
27296 while (entry) {
27297 var chunk = entry.chunk;
27298 var encoding = entry.encoding;
27299 var cb = entry.callback;
27300 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27301
8b095871
IC
27302 doWrite(stream, state, false, len, chunk, encoding, cb);
27303 entry = entry.next;
27304 // if we didn't call the onwrite immediately, then
27305 // it means that we need to wait until it does.
27306 // also, that means that the chunk and cb are currently
27307 // being processed, so move the buffer counter past them.
27308 if (state.writing) {
27309 break;
27310 }
27311 }
27312
27313 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 27314 }
ab78acc6 27315
8b095871
IC
27316 state.bufferedRequestCount = 0;
27317 state.bufferedRequest = entry;
27318 state.bufferProcessing = false;
ebd8d4e8
IC
27319}
27320
8b095871
IC
27321Writable.prototype._write = function (chunk, encoding, cb) {
27322 cb(new Error('_write() is not implemented'));
27323};
ebd8d4e8 27324
8b095871 27325Writable.prototype._writev = null;
ab78acc6 27326
8b095871
IC
27327Writable.prototype.end = function (chunk, encoding, cb) {
27328 var state = this._writableState;
27329
27330 if (typeof chunk === 'function') {
27331 cb = chunk;
27332 chunk = null;
27333 encoding = null;
27334 } else if (typeof encoding === 'function') {
27335 cb = encoding;
27336 encoding = null;
ab78acc6
IC
27337 }
27338
8b095871 27339 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 27340
8b095871
IC
27341 // .end() fully uncorks
27342 if (state.corked) {
27343 state.corked = 1;
27344 this.uncork();
ab78acc6
IC
27345 }
27346
8b095871
IC
27347 // ignore unnecessary end() calls.
27348 if (!state.ending && !state.finished) endWritable(this, state, cb);
27349};
ab78acc6 27350
8b095871
IC
27351function needFinish(state) {
27352 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
27353}
ab78acc6 27354
8b095871
IC
27355function prefinish(stream, state) {
27356 if (!state.prefinished) {
27357 state.prefinished = true;
27358 stream.emit('prefinish');
ab78acc6 27359 }
8b095871 27360}
ab78acc6 27361
8b095871
IC
27362function finishMaybe(stream, state) {
27363 var need = needFinish(state);
27364 if (need) {
27365 if (state.pendingcb === 0) {
27366 prefinish(stream, state);
27367 state.finished = true;
27368 stream.emit('finish');
27369 } else {
27370 prefinish(stream, state);
27371 }
ab78acc6 27372 }
8b095871
IC
27373 return need;
27374}
ab78acc6 27375
8b095871
IC
27376function endWritable(stream, state, cb) {
27377 state.ending = true;
27378 finishMaybe(stream, state);
27379 if (cb) {
27380 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 27381 }
8b095871
IC
27382 state.ended = true;
27383 stream.writable = false;
27384}
ab78acc6 27385
8b095871
IC
27386// It seems a linked list but it is not
27387// there will be only 2 of these for each stream
27388function CorkedRequest(state) {
27389 var _this = this;
ab78acc6 27390
8b095871
IC
27391 this.next = null;
27392 this.entry = null;
ebd8d4e8 27393
8b095871
IC
27394 this.finish = function (err) {
27395 var entry = _this.entry;
27396 _this.entry = null;
27397 while (entry) {
27398 var cb = entry.callback;
27399 state.pendingcb--;
27400 cb(err);
27401 entry = entry.next;
27402 }
27403 if (state.corkedRequestsFree) {
27404 state.corkedRequestsFree.next = _this;
27405 } else {
27406 state.corkedRequestsFree = _this;
27407 }
27408 };
27409}
27410}).call(this,require('_process'))
27411},{"./_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){
27412'use strict';
ebd8d4e8 27413
8b095871
IC
27414var Buffer = require('buffer').Buffer;
27415/*<replacement>*/
27416var bufferShim = require('buffer-shims');
27417/*</replacement>*/
ebd8d4e8 27418
8b095871 27419module.exports = BufferList;
ebd8d4e8 27420
8b095871
IC
27421function BufferList() {
27422 this.head = null;
27423 this.tail = null;
27424 this.length = 0;
27425}
ab78acc6 27426
8b095871
IC
27427BufferList.prototype.push = function (v) {
27428 var entry = { data: v, next: null };
27429 if (this.length > 0) this.tail.next = entry;else this.head = entry;
27430 this.tail = entry;
27431 ++this.length;
27432};
27433
27434BufferList.prototype.unshift = function (v) {
27435 var entry = { data: v, next: this.head };
27436 if (this.length === 0) this.tail = entry;
27437 this.head = entry;
27438 ++this.length;
27439};
ab78acc6 27440
8b095871
IC
27441BufferList.prototype.shift = function () {
27442 if (this.length === 0) return;
27443 var ret = this.head.data;
27444 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
27445 --this.length;
ab78acc6
IC
27446 return ret;
27447};
27448
8b095871
IC
27449BufferList.prototype.clear = function () {
27450 this.head = this.tail = null;
27451 this.length = 0;
27452};
ebd8d4e8 27453
8b095871
IC
27454BufferList.prototype.join = function (s) {
27455 if (this.length === 0) return '';
27456 var p = this.head;
27457 var ret = '' + p.data;
27458 while (p = p.next) {
27459 ret += s + p.data;
27460 }return ret;
27461};
ebd8d4e8 27462
8b095871
IC
27463BufferList.prototype.concat = function (n) {
27464 if (this.length === 0) return bufferShim.alloc(0);
27465 if (this.length === 1) return this.head.data;
27466 var ret = bufferShim.allocUnsafe(n >>> 0);
27467 var p = this.head;
27468 var i = 0;
27469 while (p) {
27470 p.data.copy(ret, i);
27471 i += p.data.length;
27472 p = p.next;
ebd8d4e8 27473 }
8b095871
IC
27474 return ret;
27475};
27476},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
27477module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 27478
8b095871
IC
27479},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
27480(function (process){
27481var Stream = (function (){
27482 try {
27483 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
27484 } catch(_){}
27485}());
27486exports = module.exports = require('./lib/_stream_readable.js');
27487exports.Stream = Stream || exports;
27488exports.Readable = exports;
27489exports.Writable = require('./lib/_stream_writable.js');
27490exports.Duplex = require('./lib/_stream_duplex.js');
27491exports.Transform = require('./lib/_stream_transform.js');
27492exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 27493
8b095871
IC
27494if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
27495 module.exports = Stream;
ab78acc6 27496}
ebd8d4e8 27497
8b095871
IC
27498}).call(this,require('_process'))
27499},{"./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){
27500module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 27501
8b095871
IC
27502},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
27503module.exports = require("./lib/_stream_writable.js")
ab78acc6 27504
8b095871
IC
27505},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
27506// Copyright Joyent, Inc. and other Node contributors.
27507//
27508// Permission is hereby granted, free of charge, to any person obtaining a
27509// copy of this software and associated documentation files (the
27510// "Software"), to deal in the Software without restriction, including
27511// without limitation the rights to use, copy, modify, merge, publish,
27512// distribute, sublicense, and/or sell copies of the Software, and to permit
27513// persons to whom the Software is furnished to do so, subject to the
27514// following conditions:
27515//
27516// The above copyright notice and this permission notice shall be included
27517// in all copies or substantial portions of the Software.
27518//
27519// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27520// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27521// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27522// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27523// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27524// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27525// USE OR OTHER DEALINGS IN THE SOFTWARE.
27526
27527module.exports = Stream;
27528
27529var EE = require('events').EventEmitter;
27530var inherits = require('inherits');
27531
27532inherits(Stream, EE);
27533Stream.Readable = require('readable-stream/readable.js');
27534Stream.Writable = require('readable-stream/writable.js');
27535Stream.Duplex = require('readable-stream/duplex.js');
27536Stream.Transform = require('readable-stream/transform.js');
27537Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 27538
8b095871
IC
27539// Backwards-compat with node 0.4.x
27540Stream.Stream = Stream;
ebd8d4e8 27541
ab78acc6 27542
ab78acc6 27543
8b095871
IC
27544// old-style streams. Note that the pipe method (the only relevant
27545// part of this class) is overridden in the Readable class.
ebd8d4e8 27546
8b095871
IC
27547function Stream() {
27548 EE.call(this);
27549}
ebd8d4e8 27550
8b095871
IC
27551Stream.prototype.pipe = function(dest, options) {
27552 var source = this;
ab78acc6 27553
8b095871
IC
27554 function ondata(chunk) {
27555 if (dest.writable) {
27556 if (false === dest.write(chunk) && source.pause) {
27557 source.pause();
27558 }
ab78acc6
IC
27559 }
27560 }
27561
8b095871
IC
27562 source.on('data', ondata);
27563
27564 function ondrain() {
27565 if (source.readable && source.resume) {
27566 source.resume();
27567 }
ab78acc6
IC
27568 }
27569
ab78acc6
IC
27570 dest.on('drain', ondrain);
27571
8b095871
IC
27572 // If the 'end' option is not supplied, dest.end() will be called when
27573 // source gets the 'end' or 'close' events. Only dest.end() once.
27574 if (!dest._isStdio && (!options || options.end !== false)) {
27575 source.on('end', onend);
27576 source.on('close', onclose);
ab78acc6
IC
27577 }
27578
8b095871
IC
27579 var didOnEnd = false;
27580 function onend() {
27581 if (didOnEnd) return;
27582 didOnEnd = true;
ab78acc6 27583
8b095871 27584 dest.end();
ab78acc6 27585 }
ab78acc6
IC
27586
27587
ab78acc6 27588 function onclose() {
8b095871
IC
27589 if (didOnEnd) return;
27590 didOnEnd = true;
ebd8d4e8 27591
8b095871 27592 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
27593 }
27594
8b095871
IC
27595 // don't leave dangling pipes when there are errors.
27596 function onerror(er) {
27597 cleanup();
27598 if (EE.listenerCount(this, 'error') === 0) {
27599 throw er; // Unhandled stream error in pipe.
27600 }
ebd8d4e8
IC
27601 }
27602
8b095871
IC
27603 source.on('error', onerror);
27604 dest.on('error', onerror);
ab78acc6 27605
8b095871
IC
27606 // remove all the event listeners that were added.
27607 function cleanup() {
27608 source.removeListener('data', ondata);
27609 dest.removeListener('drain', ondrain);
ab78acc6 27610
8b095871
IC
27611 source.removeListener('end', onend);
27612 source.removeListener('close', onclose);
ab78acc6 27613
8b095871
IC
27614 source.removeListener('error', onerror);
27615 dest.removeListener('error', onerror);
ab78acc6 27616
8b095871
IC
27617 source.removeListener('end', cleanup);
27618 source.removeListener('close', cleanup);
ab78acc6 27619
8b095871
IC
27620 dest.removeListener('close', cleanup);
27621 }
ab78acc6 27622
8b095871
IC
27623 source.on('end', cleanup);
27624 source.on('close', cleanup);
ab78acc6 27625
8b095871 27626 dest.on('close', cleanup);
ebd8d4e8 27627
8b095871 27628 dest.emit('pipe', source);
ab78acc6 27629
8b095871
IC
27630 // Allow for unix-like usage: A.pipe(B).pipe(C)
27631 return dest;
27632};
ab78acc6 27633
8b095871
IC
27634},{"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){
27635// Copyright Joyent, Inc. and other Node contributors.
27636//
27637// Permission is hereby granted, free of charge, to any person obtaining a
27638// copy of this software and associated documentation files (the
27639// "Software"), to deal in the Software without restriction, including
27640// without limitation the rights to use, copy, modify, merge, publish,
27641// distribute, sublicense, and/or sell copies of the Software, and to permit
27642// persons to whom the Software is furnished to do so, subject to the
27643// following conditions:
27644//
27645// The above copyright notice and this permission notice shall be included
27646// in all copies or substantial portions of the Software.
27647//
27648// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27649// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27650// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27651// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27652// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27653// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27654// USE OR OTHER DEALINGS IN THE SOFTWARE.
27655
27656var Buffer = require('buffer').Buffer;
ebd8d4e8 27657
8b095871
IC
27658var isBufferEncoding = Buffer.isEncoding
27659 || function(encoding) {
27660 switch (encoding && encoding.toLowerCase()) {
27661 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;
27662 default: return false;
27663 }
27664 }
ab78acc6 27665
ab78acc6 27666
8b095871
IC
27667function assertEncoding(encoding) {
27668 if (encoding && !isBufferEncoding(encoding)) {
27669 throw new Error('Unknown encoding: ' + encoding);
27670 }
27671}
ebd8d4e8 27672
8b095871
IC
27673// StringDecoder provides an interface for efficiently splitting a series of
27674// buffers into a series of JS strings without breaking apart multi-byte
27675// characters. CESU-8 is handled as part of the UTF-8 encoding.
27676//
27677// @TODO Handling all encodings inside a single object makes it very difficult
27678// to reason about this code, so it should be split up in the future.
27679// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
27680// points as used by CESU-8.
27681var StringDecoder = exports.StringDecoder = function(encoding) {
27682 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
27683 assertEncoding(encoding);
27684 switch (this.encoding) {
27685 case 'utf8':
27686 // CESU-8 represents each of Surrogate Pair by 3-bytes
27687 this.surrogateSize = 3;
27688 break;
27689 case 'ucs2':
27690 case 'utf16le':
27691 // UTF-16 represents each of Surrogate Pair by 2-bytes
27692 this.surrogateSize = 2;
27693 this.detectIncompleteChar = utf16DetectIncompleteChar;
27694 break;
27695 case 'base64':
27696 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
27697 this.surrogateSize = 3;
27698 this.detectIncompleteChar = base64DetectIncompleteChar;
27699 break;
27700 default:
27701 this.write = passThroughWrite;
27702 return;
27703 }
27704
27705 // Enough space to store all bytes of a single character. UTF-8 needs 4
27706 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
27707 this.charBuffer = new Buffer(6);
27708 // Number of bytes received for the current incomplete multi-byte character.
27709 this.charReceived = 0;
27710 // Number of bytes expected for the current incomplete multi-byte character.
27711 this.charLength = 0;
ab78acc6
IC
27712};
27713
ab78acc6 27714
8b095871
IC
27715// write decodes the given buffer and returns it as JS string that is
27716// guaranteed to not contain any partial multi-byte characters. Any partial
27717// character found at the end of the buffer is buffered up, and will be
27718// returned when calling write again with the remaining bytes.
27719//
27720// Note: Converting a Buffer containing an orphan surrogate to a String
27721// currently works, but converting a String to a Buffer (via `new Buffer`, or
27722// Buffer#write) will replace incomplete surrogates with the unicode
27723// replacement character. See https://codereview.chromium.org/121173009/ .
27724StringDecoder.prototype.write = function(buffer) {
27725 var charStr = '';
27726 // if our last write ended with an incomplete multibyte character
27727 while (this.charLength) {
27728 // determine how many remaining bytes this buffer has to offer for this char
27729 var available = (buffer.length >= this.charLength - this.charReceived) ?
27730 this.charLength - this.charReceived :
27731 buffer.length;
ab78acc6 27732
8b095871
IC
27733 // add the new bytes to the char buffer
27734 buffer.copy(this.charBuffer, this.charReceived, 0, available);
27735 this.charReceived += available;
27736
27737 if (this.charReceived < this.charLength) {
27738 // still not enough chars in this buffer? wait for more ...
27739 return '';
ebd8d4e8 27740 }
ebd8d4e8 27741
8b095871
IC
27742 // remove bytes belonging to the current character from the buffer
27743 buffer = buffer.slice(available, buffer.length);
ab78acc6 27744
8b095871
IC
27745 // get the character that was split
27746 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
27747
27748 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27749 var charCode = charStr.charCodeAt(charStr.length - 1);
27750 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27751 this.charLength += this.surrogateSize;
27752 charStr = '';
27753 continue;
ab78acc6 27754 }
8b095871 27755 this.charReceived = this.charLength = 0;
ebd8d4e8 27756
8b095871
IC
27757 // if there are no more bytes in this buffer, just emit our char
27758 if (buffer.length === 0) {
27759 return charStr;
27760 }
27761 break;
ebd8d4e8 27762 }
ebd8d4e8 27763
8b095871
IC
27764 // determine and set charLength / charReceived
27765 this.detectIncompleteChar(buffer);
ebd8d4e8 27766
8b095871
IC
27767 var end = buffer.length;
27768 if (this.charLength) {
27769 // buffer the incomplete character bytes we got
27770 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
27771 end -= this.charReceived;
ab78acc6 27772 }
ebd8d4e8 27773
8b095871
IC
27774 charStr += buffer.toString(this.encoding, 0, end);
27775
27776 var end = charStr.length - 1;
27777 var charCode = charStr.charCodeAt(end);
27778 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27779 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27780 var size = this.surrogateSize;
27781 this.charLength += size;
27782 this.charReceived += size;
27783 this.charBuffer.copy(this.charBuffer, size, 0, size);
27784 buffer.copy(this.charBuffer, 0, 0, size);
27785 return charStr.substring(0, end);
ab78acc6 27786 }
ebd8d4e8 27787
8b095871
IC
27788 // or just emit the charStr
27789 return charStr;
27790};
ebd8d4e8 27791
8b095871
IC
27792// detectIncompleteChar determines if there is an incomplete UTF-8 character at
27793// the end of the given buffer. If so, it sets this.charLength to the byte
27794// length that character, and sets this.charReceived to the number of bytes
27795// that are available for this character.
27796StringDecoder.prototype.detectIncompleteChar = function(buffer) {
27797 // determine how many bytes we have to check at the end of this buffer
27798 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 27799
8b095871
IC
27800 // Figure out if one of the last i bytes of our buffer announces an
27801 // incomplete char.
27802 for (; i > 0; i--) {
27803 var c = buffer[buffer.length - i];
ebd8d4e8 27804
8b095871 27805 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 27806
8b095871
IC
27807 // 110XXXXX
27808 if (i == 1 && c >> 5 == 0x06) {
27809 this.charLength = 2;
27810 break;
ebd8d4e8 27811 }
ab78acc6 27812
8b095871
IC
27813 // 1110XXXX
27814 if (i <= 2 && c >> 4 == 0x0E) {
27815 this.charLength = 3;
27816 break;
27817 }
27818
27819 // 11110XXX
27820 if (i <= 3 && c >> 3 == 0x1E) {
27821 this.charLength = 4;
27822 break;
ebd8d4e8
IC
27823 }
27824 }
8b095871
IC
27825 this.charReceived = i;
27826};
ab78acc6 27827
8b095871
IC
27828StringDecoder.prototype.end = function(buffer) {
27829 var res = '';
27830 if (buffer && buffer.length)
27831 res = this.write(buffer);
ab78acc6 27832
8b095871
IC
27833 if (this.charReceived) {
27834 var cr = this.charReceived;
27835 var buf = this.charBuffer;
27836 var enc = this.encoding;
27837 res += buf.slice(0, cr).toString(enc);
27838 }
ab78acc6 27839
8b095871 27840 return res;
ab78acc6
IC
27841};
27842
8b095871
IC
27843function passThroughWrite(buffer) {
27844 return buffer.toString(this.encoding);
27845}
ab78acc6 27846
8b095871
IC
27847function utf16DetectIncompleteChar(buffer) {
27848 this.charReceived = buffer.length % 2;
27849 this.charLength = this.charReceived ? 2 : 0;
27850}
ab78acc6 27851
8b095871
IC
27852function base64DetectIncompleteChar(buffer) {
27853 this.charReceived = buffer.length % 3;
27854 this.charLength = this.charReceived ? 3 : 0;
27855}
ab78acc6 27856
8b095871
IC
27857},{"buffer":5}],27:[function(require,module,exports){
27858(function (global){
ab78acc6 27859
8b095871
IC
27860/**
27861 * Module exports.
27862 */
ebd8d4e8 27863
8b095871 27864module.exports = deprecate;
ebd8d4e8 27865
8b095871
IC
27866/**
27867 * Mark that a method should not be used.
27868 * Returns a modified function which warns once by default.
27869 *
27870 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
27871 *
27872 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
27873 * will throw an Error when invoked.
27874 *
27875 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
27876 * will invoke `console.trace()` instead of `console.error()`.
27877 *
27878 * @param {Function} fn - the function to deprecate
27879 * @param {String} msg - the string to print to the console when `fn` is invoked
27880 * @returns {Function} a new "deprecated" version of `fn`
27881 * @api public
27882 */
ebd8d4e8 27883
8b095871
IC
27884function deprecate (fn, msg) {
27885 if (config('noDeprecation')) {
27886 return fn;
27887 }
ebd8d4e8 27888
8b095871
IC
27889 var warned = false;
27890 function deprecated() {
27891 if (!warned) {
27892 if (config('throwDeprecation')) {
27893 throw new Error(msg);
27894 } else if (config('traceDeprecation')) {
27895 console.trace(msg);
27896 } else {
27897 console.warn(msg);
ab78acc6 27898 }
8b095871 27899 warned = true;
ab78acc6 27900 }
8b095871 27901 return fn.apply(this, arguments);
ebd8d4e8
IC
27902 }
27903
8b095871 27904 return deprecated;
ebd8d4e8
IC
27905}
27906
8b095871
IC
27907/**
27908 * Checks `localStorage` for boolean values for the given `name`.
27909 *
27910 * @param {String} name
27911 * @returns {Boolean}
27912 * @api private
27913 */
ebd8d4e8 27914
8b095871
IC
27915function config (name) {
27916 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
27917 try {
27918 if (!global.localStorage) return false;
27919 } catch (_) {
27920 return false;
ab78acc6 27921 }
8b095871
IC
27922 var val = global.localStorage[name];
27923 if (null == val) return false;
27924 return String(val).toLowerCase() === 'true';
ebd8d4e8 27925}
ebd8d4e8 27926
8b095871
IC
27927}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27928},{}],28:[function(require,module,exports){
27929arguments[4][9][0].apply(exports,arguments)
27930},{"dup":9}],29:[function(require,module,exports){
27931module.exports = function isBuffer(arg) {
27932 return arg && typeof arg === 'object'
27933 && typeof arg.copy === 'function'
27934 && typeof arg.fill === 'function'
27935 && typeof arg.readUInt8 === 'function';
ebd8d4e8 27936}
8b095871
IC
27937},{}],30:[function(require,module,exports){
27938(function (process,global){
ab78acc6
IC
27939// Copyright Joyent, Inc. and other Node contributors.
27940//
27941// Permission is hereby granted, free of charge, to any person obtaining a
27942// copy of this software and associated documentation files (the
27943// "Software"), to deal in the Software without restriction, including
27944// without limitation the rights to use, copy, modify, merge, publish,
27945// distribute, sublicense, and/or sell copies of the Software, and to permit
27946// persons to whom the Software is furnished to do so, subject to the
27947// following conditions:
27948//
27949// The above copyright notice and this permission notice shall be included
27950// in all copies or substantial portions of the Software.
27951//
27952// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27953// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27954// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27955// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27956// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27957// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27958// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 27959
8b095871
IC
27960var formatRegExp = /%[sdj%]/g;
27961exports.format = function(f) {
27962 if (!isString(f)) {
27963 var objects = [];
27964 for (var i = 0; i < arguments.length; i++) {
27965 objects.push(inspect(arguments[i]));
27966 }
27967 return objects.join(' ');
27968 }
ebd8d4e8 27969
8b095871
IC
27970 var i = 1;
27971 var args = arguments;
27972 var len = args.length;
27973 var str = String(f).replace(formatRegExp, function(x) {
27974 if (x === '%%') return '%';
27975 if (i >= len) return x;
27976 switch (x) {
27977 case '%s': return String(args[i++]);
27978 case '%d': return Number(args[i++]);
27979 case '%j':
27980 try {
27981 return JSON.stringify(args[i++]);
27982 } catch (_) {
27983 return '[Circular]';
27984 }
27985 default:
27986 return x;
27987 }
27988 });
27989 for (var x = args[i]; i < len; x = args[++i]) {
27990 if (isNull(x) || !isObject(x)) {
27991 str += ' ' + x;
27992 } else {
27993 str += ' ' + inspect(x);
27994 }
27995 }
27996 return str;
27997};
ebd8d4e8 27998
ebd8d4e8 27999
8b095871
IC
28000// Mark that a method should not be used.
28001// Returns a modified function which warns once by default.
28002// If --no-deprecation is set, then it is a no-op.
28003exports.deprecate = function(fn, msg) {
28004 // Allow for deprecating things in the process of starting up.
28005 if (isUndefined(global.process)) {
28006 return function() {
28007 return exports.deprecate(fn, msg).apply(this, arguments);
28008 };
28009 }
28010
28011 if (process.noDeprecation === true) {
28012 return fn;
28013 }
28014
28015 var warned = false;
28016 function deprecated() {
28017 if (!warned) {
28018 if (process.throwDeprecation) {
28019 throw new Error(msg);
28020 } else if (process.traceDeprecation) {
28021 console.trace(msg);
28022 } else {
28023 console.error(msg);
28024 }
28025 warned = true;
28026 }
28027 return fn.apply(this, arguments);
28028 }
28029
28030 return deprecated;
28031};
ebd8d4e8 28032
ab78acc6 28033
8b095871
IC
28034var debugs = {};
28035var debugEnviron;
28036exports.debuglog = function(set) {
28037 if (isUndefined(debugEnviron))
28038 debugEnviron = process.env.NODE_DEBUG || '';
28039 set = set.toUpperCase();
28040 if (!debugs[set]) {
28041 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
28042 var pid = process.pid;
28043 debugs[set] = function() {
28044 var msg = exports.format.apply(exports, arguments);
28045 console.error('%s %d: %s', set, pid, msg);
28046 };
28047 } else {
28048 debugs[set] = function() {};
28049 }
28050 }
28051 return debugs[set];
28052};
ab78acc6
IC
28053
28054
8b095871
IC
28055/**
28056 * Echos the value of a value. Trys to print the value out
28057 * in the best way possible given the different types.
28058 *
28059 * @param {Object} obj The object to print out.
28060 * @param {Object} opts Optional options object that alters the output.
28061 */
28062/* legacy: obj, showHidden, depth, colors*/
28063function inspect(obj, opts) {
28064 // default options
28065 var ctx = {
28066 seen: [],
28067 stylize: stylizeNoColor
ab78acc6 28068 };
8b095871
IC
28069 // legacy...
28070 if (arguments.length >= 3) ctx.depth = arguments[2];
28071 if (arguments.length >= 4) ctx.colors = arguments[3];
28072 if (isBoolean(opts)) {
28073 // legacy...
28074 ctx.showHidden = opts;
28075 } else if (opts) {
28076 // got an "options" object
28077 exports._extend(ctx, opts);
28078 }
28079 // set default options
28080 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
28081 if (isUndefined(ctx.depth)) ctx.depth = 2;
28082 if (isUndefined(ctx.colors)) ctx.colors = false;
28083 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
28084 if (ctx.colors) ctx.stylize = stylizeWithColor;
28085 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 28086}
8b095871 28087exports.inspect = inspect;
ebd8d4e8 28088
ab78acc6 28089
8b095871
IC
28090// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
28091inspect.colors = {
28092 'bold' : [1, 22],
28093 'italic' : [3, 23],
28094 'underline' : [4, 24],
28095 'inverse' : [7, 27],
28096 'white' : [37, 39],
28097 'grey' : [90, 39],
28098 'black' : [30, 39],
28099 'blue' : [34, 39],
28100 'cyan' : [36, 39],
28101 'green' : [32, 39],
28102 'magenta' : [35, 39],
28103 'red' : [31, 39],
28104 'yellow' : [33, 39]
28105};
ab78acc6 28106
8b095871
IC
28107// Don't use 'blue' not visible on cmd.exe
28108inspect.styles = {
28109 'special': 'cyan',
28110 'number': 'yellow',
28111 'boolean': 'yellow',
28112 'undefined': 'grey',
28113 'null': 'bold',
28114 'string': 'green',
28115 'date': 'magenta',
28116 // "name": intentionally not styling
28117 'regexp': 'red'
28118};
ab78acc6 28119
ab78acc6 28120
8b095871
IC
28121function stylizeWithColor(str, styleType) {
28122 var style = inspect.styles[styleType];
ab78acc6 28123
8b095871
IC
28124 if (style) {
28125 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
28126 '\u001b[' + inspect.colors[style][1] + 'm';
28127 } else {
28128 return str;
ab78acc6 28129 }
ebd8d4e8 28130}
ebd8d4e8 28131
ab78acc6 28132
8b095871
IC
28133function stylizeNoColor(str, styleType) {
28134 return str;
28135}
ab78acc6 28136
ab78acc6 28137
8b095871
IC
28138function arrayToHash(array) {
28139 var hash = {};
ab78acc6 28140
8b095871
IC
28141 array.forEach(function(val, idx) {
28142 hash[val] = true;
ab78acc6 28143 });
ebd8d4e8 28144
8b095871
IC
28145 return hash;
28146}
ab78acc6 28147
ab78acc6 28148
8b095871
IC
28149function formatValue(ctx, value, recurseTimes) {
28150 // Provide a hook for user-specified inspect functions.
28151 // Check that value is an object with an inspect function on it
28152 if (ctx.customInspect &&
28153 value &&
28154 isFunction(value.inspect) &&
28155 // Filter out the util module, it's inspect function is special
28156 value.inspect !== exports.inspect &&
28157 // Also filter out any prototype objects using the circular check.
28158 !(value.constructor && value.constructor.prototype === value)) {
28159 var ret = value.inspect(recurseTimes, ctx);
28160 if (!isString(ret)) {
28161 ret = formatValue(ctx, ret, recurseTimes);
28162 }
28163 return ret;
ab78acc6 28164 }
ebd8d4e8 28165
8b095871
IC
28166 // Primitive types cannot have properties
28167 var primitive = formatPrimitive(ctx, value);
28168 if (primitive) {
28169 return primitive;
ab78acc6 28170 }
ebd8d4e8 28171
8b095871
IC
28172 // Look up the keys of the object.
28173 var keys = Object.keys(value);
28174 var visibleKeys = arrayToHash(keys);
ebd8d4e8 28175
8b095871
IC
28176 if (ctx.showHidden) {
28177 keys = Object.getOwnPropertyNames(value);
28178 }
ebd8d4e8 28179
8b095871
IC
28180 // IE doesn't make error fields non-enumerable
28181 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
28182 if (isError(value)
28183 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
28184 return formatError(value);
28185 }
ebd8d4e8 28186
8b095871
IC
28187 // Some type of object without properties can be shortcutted.
28188 if (keys.length === 0) {
28189 if (isFunction(value)) {
28190 var name = value.name ? ': ' + value.name : '';
28191 return ctx.stylize('[Function' + name + ']', 'special');
28192 }
28193 if (isRegExp(value)) {
28194 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28195 }
28196 if (isDate(value)) {
28197 return ctx.stylize(Date.prototype.toString.call(value), 'date');
28198 }
28199 if (isError(value)) {
28200 return formatError(value);
28201 }
28202 }
ab78acc6 28203
8b095871 28204 var base = '', array = false, braces = ['{', '}'];
ab78acc6 28205
8b095871
IC
28206 // Make Array say that they are Array
28207 if (isArray(value)) {
28208 array = true;
28209 braces = ['[', ']'];
28210 }
ebd8d4e8 28211
8b095871
IC
28212 // Make functions say that they are functions
28213 if (isFunction(value)) {
28214 var n = value.name ? ': ' + value.name : '';
28215 base = ' [Function' + n + ']';
28216 }
ebd8d4e8 28217
8b095871
IC
28218 // Make RegExps say that they are RegExps
28219 if (isRegExp(value)) {
28220 base = ' ' + RegExp.prototype.toString.call(value);
28221 }
ebd8d4e8 28222
8b095871
IC
28223 // Make dates with properties first say the date
28224 if (isDate(value)) {
28225 base = ' ' + Date.prototype.toUTCString.call(value);
28226 }
ebd8d4e8 28227
8b095871
IC
28228 // Make error with message first say the error
28229 if (isError(value)) {
28230 base = ' ' + formatError(value);
28231 }
ebd8d4e8 28232
8b095871
IC
28233 if (keys.length === 0 && (!array || value.length == 0)) {
28234 return braces[0] + base + braces[1];
28235 }
ebd8d4e8 28236
8b095871
IC
28237 if (recurseTimes < 0) {
28238 if (isRegExp(value)) {
28239 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28240 } else {
28241 return ctx.stylize('[Object]', 'special');
28242 }
28243 }
ebd8d4e8 28244
8b095871 28245 ctx.seen.push(value);
ebd8d4e8 28246
8b095871
IC
28247 var output;
28248 if (array) {
28249 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
28250 } else {
28251 output = keys.map(function(key) {
28252 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
28253 });
28254 }
ebd8d4e8 28255
8b095871 28256 ctx.seen.pop();
ebd8d4e8 28257
8b095871 28258 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
28259}
28260
ebd8d4e8 28261
8b095871
IC
28262function formatPrimitive(ctx, value) {
28263 if (isUndefined(value))
28264 return ctx.stylize('undefined', 'undefined');
28265 if (isString(value)) {
28266 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
28267 .replace(/'/g, "\\'")
28268 .replace(/\\"/g, '"') + '\'';
28269 return ctx.stylize(simple, 'string');
28270 }
28271 if (isNumber(value))
28272 return ctx.stylize('' + value, 'number');
28273 if (isBoolean(value))
28274 return ctx.stylize('' + value, 'boolean');
28275 // For some reason typeof null is "object", so special case here.
28276 if (isNull(value))
28277 return ctx.stylize('null', 'null');
28278}
ebd8d4e8 28279
ebd8d4e8 28280
8b095871
IC
28281function formatError(value) {
28282 return '[' + Error.prototype.toString.call(value) + ']';
28283}
ebd8d4e8 28284
ebd8d4e8 28285
8b095871
IC
28286function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
28287 var output = [];
28288 for (var i = 0, l = value.length; i < l; ++i) {
28289 if (hasOwnProperty(value, String(i))) {
28290 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28291 String(i), true));
28292 } else {
28293 output.push('');
28294 }
28295 }
28296 keys.forEach(function(key) {
28297 if (!key.match(/^\d+$/)) {
28298 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28299 key, true));
28300 }
28301 });
28302 return output;
28303}
ebd8d4e8 28304
ebd8d4e8 28305
8b095871
IC
28306function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
28307 var name, str, desc;
28308 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
28309 if (desc.get) {
28310 if (desc.set) {
28311 str = ctx.stylize('[Getter/Setter]', 'special');
28312 } else {
28313 str = ctx.stylize('[Getter]', 'special');
28314 }
28315 } else {
28316 if (desc.set) {
28317 str = ctx.stylize('[Setter]', 'special');
28318 }
28319 }
28320 if (!hasOwnProperty(visibleKeys, key)) {
28321 name = '[' + key + ']';
28322 }
28323 if (!str) {
28324 if (ctx.seen.indexOf(desc.value) < 0) {
28325 if (isNull(recurseTimes)) {
28326 str = formatValue(ctx, desc.value, null);
28327 } else {
28328 str = formatValue(ctx, desc.value, recurseTimes - 1);
28329 }
28330 if (str.indexOf('\n') > -1) {
28331 if (array) {
28332 str = str.split('\n').map(function(line) {
28333 return ' ' + line;
28334 }).join('\n').substr(2);
28335 } else {
28336 str = '\n' + str.split('\n').map(function(line) {
28337 return ' ' + line;
28338 }).join('\n');
28339 }
28340 }
28341 } else {
28342 str = ctx.stylize('[Circular]', 'special');
28343 }
28344 }
28345 if (isUndefined(name)) {
28346 if (array && key.match(/^\d+$/)) {
28347 return str;
28348 }
28349 name = JSON.stringify('' + key);
28350 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
28351 name = name.substr(1, name.length - 2);
28352 name = ctx.stylize(name, 'name');
28353 } else {
28354 name = name.replace(/'/g, "\\'")
28355 .replace(/\\"/g, '"')
28356 .replace(/(^"|"$)/g, "'");
28357 name = ctx.stylize(name, 'string');
28358 }
28359 }
ebd8d4e8 28360
8b095871
IC
28361 return name + ': ' + str;
28362}
ebd8d4e8 28363
ebd8d4e8 28364
8b095871
IC
28365function reduceToSingleString(output, base, braces) {
28366 var numLinesEst = 0;
28367 var length = output.reduce(function(prev, cur) {
28368 numLinesEst++;
28369 if (cur.indexOf('\n') >= 0) numLinesEst++;
28370 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
28371 }, 0);
ebd8d4e8 28372
8b095871
IC
28373 if (length > 60) {
28374 return braces[0] +
28375 (base === '' ? '' : base + '\n ') +
28376 ' ' +
28377 output.join(',\n ') +
28378 ' ' +
28379 braces[1];
28380 }
ebd8d4e8 28381
8b095871
IC
28382 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
28383}
ebd8d4e8 28384
ebd8d4e8 28385
8b095871
IC
28386// NOTE: These type checking functions intentionally don't use `instanceof`
28387// because it is fragile and can be easily faked with `Object.create()`.
28388function isArray(ar) {
28389 return Array.isArray(ar);
28390}
28391exports.isArray = isArray;
ebd8d4e8 28392
8b095871
IC
28393function isBoolean(arg) {
28394 return typeof arg === 'boolean';
28395}
28396exports.isBoolean = isBoolean;
ebd8d4e8 28397
8b095871
IC
28398function isNull(arg) {
28399 return arg === null;
28400}
28401exports.isNull = isNull;
ebd8d4e8 28402
8b095871
IC
28403function isNullOrUndefined(arg) {
28404 return arg == null;
ebd8d4e8 28405}
8b095871 28406exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 28407
8b095871
IC
28408function isNumber(arg) {
28409 return typeof arg === 'number';
28410}
28411exports.isNumber = isNumber;
ebd8d4e8 28412
8b095871
IC
28413function isString(arg) {
28414 return typeof arg === 'string';
28415}
28416exports.isString = isString;
ebd8d4e8 28417
8b095871
IC
28418function isSymbol(arg) {
28419 return typeof arg === 'symbol';
28420}
28421exports.isSymbol = isSymbol;
ebd8d4e8 28422
8b095871
IC
28423function isUndefined(arg) {
28424 return arg === void 0;
28425}
28426exports.isUndefined = isUndefined;
ebd8d4e8 28427
8b095871
IC
28428function isRegExp(re) {
28429 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 28430}
8b095871 28431exports.isRegExp = isRegExp;
ebd8d4e8 28432
8b095871
IC
28433function isObject(arg) {
28434 return typeof arg === 'object' && arg !== null;
28435}
28436exports.isObject = isObject;
ebd8d4e8 28437
8b095871
IC
28438function isDate(d) {
28439 return isObject(d) && objectToString(d) === '[object Date]';
28440}
28441exports.isDate = isDate;
ebd8d4e8 28442
8b095871
IC
28443function isError(e) {
28444 return isObject(e) &&
28445 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 28446}
8b095871 28447exports.isError = isError;
ebd8d4e8 28448
8b095871
IC
28449function isFunction(arg) {
28450 return typeof arg === 'function';
ebd8d4e8 28451}
8b095871 28452exports.isFunction = isFunction;
ebd8d4e8 28453
8b095871
IC
28454function isPrimitive(arg) {
28455 return arg === null ||
28456 typeof arg === 'boolean' ||
28457 typeof arg === 'number' ||
28458 typeof arg === 'string' ||
28459 typeof arg === 'symbol' || // ES6 symbol
28460 typeof arg === 'undefined';
28461}
28462exports.isPrimitive = isPrimitive;
ebd8d4e8 28463
8b095871 28464exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 28465
8b095871
IC
28466function objectToString(o) {
28467 return Object.prototype.toString.call(o);
28468}
ab78acc6 28469
ab78acc6 28470
8b095871
IC
28471function pad(n) {
28472 return n < 10 ? '0' + n.toString(10) : n.toString(10);
28473}
ebd8d4e8 28474
ab78acc6 28475
8b095871
IC
28476var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
28477 'Oct', 'Nov', 'Dec'];
ab78acc6 28478
8b095871
IC
28479// 26 Feb 16:19:34
28480function timestamp() {
28481 var d = new Date();
28482 var time = [pad(d.getHours()),
28483 pad(d.getMinutes()),
28484 pad(d.getSeconds())].join(':');
28485 return [d.getDate(), months[d.getMonth()], time].join(' ');
28486}
28487
28488
28489// log is just a thin wrapper to console.log that prepends a timestamp
28490exports.log = function() {
28491 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 28492};
ebd8d4e8 28493
ebd8d4e8 28494
8b095871
IC
28495/**
28496 * Inherit the prototype methods from one constructor into another.
28497 *
28498 * The Function.prototype.inherits from lang.js rewritten as a standalone
28499 * function (not on Function.prototype). NOTE: If this file is to be loaded
28500 * during bootstrapping this function needs to be rewritten using some native
28501 * functions as prototype setup using normal JavaScript does not work as
28502 * expected during bootstrapping (see mirror.js in r114903).
28503 *
28504 * @param {function} ctor Constructor function which needs to inherit the
28505 * prototype.
28506 * @param {function} superCtor Constructor function to inherit prototype from.
28507 */
28508exports.inherits = require('inherits');
ebd8d4e8 28509
8b095871
IC
28510exports._extend = function(origin, add) {
28511 // Don't do anything if add isn't an object
28512 if (!add || !isObject(add)) return origin;
28513
28514 var keys = Object.keys(add);
28515 var i = keys.length;
28516 while (i--) {
28517 origin[keys[i]] = add[keys[i]];
ebd8d4e8 28518 }
8b095871 28519 return origin;
ab78acc6 28520};
ebd8d4e8 28521
8b095871
IC
28522function hasOwnProperty(obj, prop) {
28523 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
28524}
28525
8b095871
IC
28526}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
28527},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
28528(function (Buffer){
28529const createKeccakHash = require('keccak')
28530const secp256k1 = require('secp256k1')
28531const assert = require('assert')
28532const rlp = require('rlp')
28533const BN = require('bn.js')
28534const createHash = require('create-hash')
28535Object.assign(exports, require('ethjs-util'))
ab78acc6 28536
8b095871
IC
28537/**
28538 * the max integer that this VM can handle (a ```BN```)
28539 * @var {BN} MAX_INTEGER
28540 */
28541exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 28542
8b095871
IC
28543/**
28544 * 2^256 (a ```BN```)
28545 * @var {BN} TWO_POW256
28546 */
28547exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 28548
8b095871
IC
28549/**
28550 * SHA3-256 hash of null (a ```String```)
28551 * @var {String} SHA3_NULL_S
28552 */
28553exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 28554
8b095871
IC
28555/**
28556 * SHA3-256 hash of null (a ```Buffer```)
28557 * @var {Buffer} SHA3_NULL
28558 */
28559exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 28560
8b095871
IC
28561/**
28562 * SHA3-256 of an RLP of an empty array (a ```String```)
28563 * @var {String} SHA3_RLP_ARRAY_S
28564 */
28565exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 28566
8b095871
IC
28567/**
28568 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
28569 * @var {Buffer} SHA3_RLP_ARRAY
28570 */
28571exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 28572
8b095871
IC
28573/**
28574 * SHA3-256 hash of the RLP of null (a ```String```)
28575 * @var {String} SHA3_RLP_S
28576 */
28577exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 28578
8b095871
IC
28579/**
28580 * SHA3-256 hash of the RLP of null (a ```Buffer```)
28581 * @var {Buffer} SHA3_RLP
28582 */
28583exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 28584
8b095871
IC
28585/**
28586 * [`BN`](https://github.com/indutny/bn.js)
28587 * @var {Function}
28588 */
28589exports.BN = BN
ebd8d4e8 28590
8b095871
IC
28591/**
28592 * [`rlp`](https://github.com/ethereumjs/rlp)
28593 * @var {Function}
28594 */
28595exports.rlp = rlp
ebd8d4e8 28596
8b095871
IC
28597/**
28598 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
28599 * @var {Object}
28600 */
28601exports.secp256k1 = secp256k1
ab78acc6 28602
8b095871
IC
28603/**
28604 * Returns a buffer filled with 0s
28605 * @method zeros
28606 * @param {Number} bytes the number of bytes the buffer should be
28607 * @return {Buffer}
28608 */
28609exports.zeros = function (bytes) {
28610 return Buffer.allocUnsafe(bytes).fill(0)
28611}
28612
28613/**
28614 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28615 * Or it truncates the beginning if it exceeds.
28616 * @method lsetLength
28617 * @param {Buffer|Array} msg the value to pad
28618 * @param {Number} length the number of bytes the output should be
28619 * @param {Boolean} [right=false] whether to start padding form the left or right
28620 * @return {Buffer|Array}
28621 */
28622exports.setLengthLeft = exports.setLength = function (msg, length, right) {
28623 var buf = exports.zeros(length)
28624 msg = exports.toBuffer(msg)
28625 if (right) {
28626 if (msg.length < length) {
28627 msg.copy(buf)
28628 return buf
28629 }
28630 return msg.slice(0, length)
28631 } else {
28632 if (msg.length < length) {
28633 msg.copy(buf, length - msg.length)
28634 return buf
ebd8d4e8 28635 }
8b095871 28636 return msg.slice(-length)
ebd8d4e8
IC
28637 }
28638}
28639
8b095871
IC
28640/**
28641 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28642 * Or it truncates the beginning if it exceeds.
28643 * @param {Buffer|Array} msg the value to pad
28644 * @param {Number} length the number of bytes the output should be
28645 * @return {Buffer|Array}
28646 */
28647exports.setLengthRight = function (msg, length) {
28648 return exports.setLength(msg, length, true)
ab78acc6
IC
28649}
28650
8b095871
IC
28651/**
28652 * Trims leading zeros from a `Buffer` or an `Array`
28653 * @param {Buffer|Array|String} a
28654 * @return {Buffer|Array|String}
28655 */
28656exports.unpad = exports.stripZeros = function (a) {
28657 a = exports.stripHexPrefix(a)
28658 var first = a[0]
28659 while (a.length > 0 && first.toString() === '0') {
28660 a = a.slice(1)
28661 first = a[0]
28662 }
28663 return a
28664}
28665/**
28666 * 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.
28667 * @param {*} v the value
28668 */
28669exports.toBuffer = function (v) {
28670 if (!Buffer.isBuffer(v)) {
28671 if (Array.isArray(v)) {
28672 v = Buffer.from(v)
28673 } else if (typeof v === 'string') {
28674 if (exports.isHexPrefixed(v)) {
28675 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
28676 } else {
28677 v = Buffer.from(v)
28678 }
28679 } else if (typeof v === 'number') {
28680 v = exports.intToBuffer(v)
28681 } else if (v === null || v === undefined) {
28682 v = Buffer.allocUnsafe(0)
28683 } else if (v.toArray) {
28684 // converts a BN to a Buffer
28685 v = Buffer.from(v.toArray())
28686 } else {
28687 throw new Error('invalid type')
28688 }
ebd8d4e8 28689 }
8b095871 28690 return v
ebd8d4e8
IC
28691}
28692
8b095871
IC
28693/**
28694 * Converts a `Buffer` to a `Number`
28695 * @param {Buffer} buf
28696 * @return {Number}
28697 * @throws If the input number exceeds 53 bits.
28698 */
28699exports.bufferToInt = function (buf) {
28700 return new BN(exports.toBuffer(buf)).toNumber()
28701}
ebd8d4e8 28702
8b095871
IC
28703/**
28704 * Converts a `Buffer` into a hex `String`
28705 * @param {Buffer} buf
28706 * @return {String}
28707 */
28708exports.bufferToHex = function (buf) {
28709 buf = exports.toBuffer(buf)
28710 return '0x' + buf.toString('hex')
28711}
ab78acc6 28712
8b095871
IC
28713/**
28714 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
28715 * @param {Buffer} num
28716 * @return {BN}
28717 */
28718exports.fromSigned = function (num) {
28719 return new BN(num).fromTwos(256)
28720}
ab78acc6 28721
8b095871
IC
28722/**
28723 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
28724 * @param {BN} num
28725 * @return {Buffer}
28726 */
28727exports.toUnsigned = function (num) {
28728 return Buffer.from(num.toTwos(256).toArray())
28729}
ab78acc6 28730
8b095871
IC
28731/**
28732 * Creates SHA-3 hash of the input
28733 * @param {Buffer|Array|String|Number} a the input data
28734 * @param {Number} [bits=256] the SHA width
28735 * @return {Buffer}
28736 */
28737exports.sha3 = function (a, bits) {
28738 a = exports.toBuffer(a)
28739 if (!bits) bits = 256
ab78acc6 28740
8b095871
IC
28741 return createKeccakHash('keccak' + bits).update(a).digest()
28742}
ab78acc6 28743
8b095871
IC
28744/**
28745 * Creates SHA256 hash of the input
28746 * @param {Buffer|Array|String|Number} a the input data
28747 * @return {Buffer}
28748 */
28749exports.sha256 = function (a) {
28750 a = exports.toBuffer(a)
28751 return createHash('sha256').update(a).digest()
28752}
ab78acc6 28753
8b095871
IC
28754/**
28755 * Creates RIPEMD160 hash of the input
28756 * @param {Buffer|Array|String|Number} a the input data
28757 * @param {Boolean} padded whether it should be padded to 256 bits or not
28758 * @return {Buffer}
28759 */
28760exports.ripemd160 = function (a, padded) {
28761 a = exports.toBuffer(a)
28762 var hash = createHash('rmd160').update(a).digest()
28763 if (padded === true) {
28764 return exports.setLength(hash, 32)
28765 } else {
28766 return hash
ebd8d4e8 28767 }
8b095871 28768}
ebd8d4e8 28769
8b095871
IC
28770/**
28771 * Creates SHA-3 hash of the RLP encoded version of the input
28772 * @param {Buffer|Array|String|Number} a the input data
28773 * @return {Buffer}
28774 */
28775exports.rlphash = function (a) {
28776 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
28777}
28778
8b095871
IC
28779/**
28780 * Checks if the private key satisfies the rules of the curve secp256k1.
28781 * @param {Buffer} privateKey
28782 * @return {Boolean}
28783 */
28784exports.isValidPrivate = function (privateKey) {
28785 return secp256k1.privateKeyVerify(privateKey)
28786}
ebd8d4e8 28787
8b095871
IC
28788/**
28789 * Checks if the public key satisfies the rules of the curve secp256k1
28790 * and the requirements of Ethereum.
28791 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
28792 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28793 * @return {Boolean}
28794 */
28795exports.isValidPublic = function (publicKey, sanitize) {
28796 if (publicKey.length === 64) {
28797 // Convert to SEC1 for secp256k1
28798 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
28799 }
ebd8d4e8 28800
8b095871
IC
28801 if (!sanitize) {
28802 return false
28803 }
ebd8d4e8 28804
8b095871
IC
28805 return secp256k1.publicKeyVerify(publicKey)
28806}
ebd8d4e8 28807
8b095871
IC
28808/**
28809 * Returns the ethereum address of a given public key.
28810 * Accepts "Ethereum public keys" and SEC1 encoded keys.
28811 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
28812 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28813 * @return {Buffer}
28814 */
28815exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
28816 pubKey = exports.toBuffer(pubKey)
28817 if (sanitize && (pubKey.length !== 64)) {
28818 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 28819 }
8b095871
IC
28820 assert(pubKey.length === 64)
28821 // Only take the lower 160bits of the hash
28822 return exports.sha3(pubKey).slice(-20)
28823}
ebd8d4e8 28824
8b095871
IC
28825/**
28826 * Returns the ethereum public key of a given private key
28827 * @param {Buffer} privateKey A private key must be 256 bits wide
28828 * @return {Buffer}
28829 */
28830var privateToPublic = exports.privateToPublic = function (privateKey) {
28831 privateKey = exports.toBuffer(privateKey)
28832 // skip the type flag and use the X, Y points
28833 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
28834}
ab78acc6 28835
8b095871
IC
28836/**
28837 * Converts a public key to the Ethereum format.
28838 * @param {Buffer} publicKey
28839 * @return {Buffer}
28840 */
28841exports.importPublic = function (publicKey) {
28842 publicKey = exports.toBuffer(publicKey)
28843 if (publicKey.length !== 64) {
28844 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 28845 }
8b095871
IC
28846 return publicKey
28847}
ab78acc6 28848
8b095871
IC
28849/**
28850 * ECDSA sign
28851 * @param {Buffer} msgHash
28852 * @param {Buffer} privateKey
28853 * @return {Object}
28854 */
28855exports.ecsign = function (msgHash, privateKey) {
28856 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 28857
8b095871
IC
28858 var ret = {}
28859 ret.r = sig.signature.slice(0, 32)
28860 ret.s = sig.signature.slice(32, 64)
28861 ret.v = sig.recovery + 27
28862 return ret
ebd8d4e8
IC
28863}
28864
8b095871
IC
28865/**
28866 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
28867 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
28868 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
28869 * used to produce the signature.
28870 * @param message
28871 * @returns {Buffer} hash
28872 */
28873exports.hashPersonalMessage = function (message) {
28874 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
28875 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
28876}
28877
8b095871
IC
28878/**
28879 * ECDSA public key recovery from signature
28880 * @param {Buffer} msgHash
28881 * @param {Number} v
28882 * @param {Buffer} r
28883 * @param {Buffer} s
28884 * @return {Buffer} publicKey
28885 */
28886exports.ecrecover = function (msgHash, v, r, s) {
28887 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
28888 var recovery = v - 27
28889 if (recovery !== 0 && recovery !== 1) {
28890 throw new Error('Invalid signature v value')
ab78acc6 28891 }
8b095871
IC
28892 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
28893 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 28894}
ebd8d4e8 28895
8b095871
IC
28896/**
28897 * Convert signature parameters into the format of `eth_sign` RPC method
28898 * @param {Number} v
28899 * @param {Buffer} r
28900 * @param {Buffer} s
28901 * @return {String} sig
28902 */
28903exports.toRpcSig = function (v, r, s) {
28904 // NOTE: with potential introduction of chainId this might need to be updated
28905 if (v !== 27 && v !== 28) {
28906 throw new Error('Invalid recovery id')
28907 }
28908
28909 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
28910 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
28911 return exports.bufferToHex(Buffer.concat([
28912 exports.setLengthLeft(r, 32),
28913 exports.setLengthLeft(s, 32),
28914 exports.toBuffer(v - 27)
28915 ]))
ebd8d4e8
IC
28916}
28917
8b095871
IC
28918/**
28919 * Convert signature format of the `eth_sign` RPC method to signature parameters
28920 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
28921 * @param {String} sig
28922 * @return {Object}
28923 */
28924exports.fromRpcSig = function (sig) {
28925 sig = exports.toBuffer(sig)
ebd8d4e8 28926
8b095871
IC
28927 // NOTE: with potential introduction of chainId this might need to be updated
28928 if (sig.length !== 65) {
28929 throw new Error('Invalid signature length')
28930 }
28931
28932 var v = sig[64]
28933 // support both versions of `eth_sign` responses
28934 if (v < 27) {
28935 v += 27
28936 }
28937
28938 return {
28939 v: v,
28940 r: sig.slice(0, 32),
28941 s: sig.slice(32, 64)
28942 }
ebd8d4e8
IC
28943}
28944
8b095871
IC
28945/**
28946 * Returns the ethereum address of a given private key
28947 * @param {Buffer} privateKey A private key must be 256 bits wide
28948 * @return {Buffer}
28949 */
28950exports.privateToAddress = function (privateKey) {
28951 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 28952}
ebd8d4e8 28953
8b095871
IC
28954/**
28955 * Checks if the address is a valid. Accepts checksummed addresses too
28956 * @param {String} address
28957 * @return {Boolean}
28958 */
28959exports.isValidAddress = function (address) {
28960 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 28961}
ebd8d4e8 28962
8b095871
IC
28963/**
28964 * Returns a checksummed address
28965 * @param {String} address
28966 * @return {String}
28967 */
28968exports.toChecksumAddress = function (address) {
28969 address = exports.stripHexPrefix(address).toLowerCase()
28970 var hash = exports.sha3(address).toString('hex')
28971 var ret = '0x'
28972
28973 for (var i = 0; i < address.length; i++) {
28974 if (parseInt(hash[i], 16) >= 8) {
28975 ret += address[i].toUpperCase()
28976 } else {
28977 ret += address[i]
28978 }
28979 }
28980
28981 return ret
ebd8d4e8
IC
28982}
28983
8b095871
IC
28984/**
28985 * Checks if the address is a valid checksummed address
28986 * @param {Buffer} address
28987 * @return {Boolean}
28988 */
28989exports.isValidChecksumAddress = function (address) {
28990 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 28991}
ebd8d4e8 28992
8b095871
IC
28993/**
28994 * Generates an address of a newly created contract
28995 * @param {Buffer} from the address which is creating this new address
28996 * @param {Buffer} nonce the nonce of the from account
28997 * @return {Buffer}
28998 */
28999exports.generateAddress = function (from, nonce) {
29000 from = exports.toBuffer(from)
29001 nonce = new BN(nonce)
29002
29003 if (nonce.isZero()) {
29004 // in RLP we want to encode null in the case of zero nonce
29005 // read the RLP documentation for an answer if you dare
29006 nonce = null
29007 } else {
29008 nonce = Buffer.from(nonce.toArray())
29009 }
29010
29011 // Only take the lower 160bits of the hash
29012 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 29013}
ebd8d4e8 29014
8b095871
IC
29015/**
29016 * Returns true if the supplied address belongs to a precompiled account
29017 * @param {Buffer|String} address
29018 * @return {Boolean}
29019 */
29020exports.isPrecompiled = function (address) {
29021 var a = exports.unpad(address)
29022 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
29023}
29024
8b095871
IC
29025/**
29026 * Adds "0x" to a given `String` if it does not already start with "0x"
29027 * @param {String} str
29028 * @return {String}
29029 */
29030exports.addHexPrefix = function (str) {
29031 if (typeof str !== 'string') {
29032 return str
29033 }
29034
29035 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
29036}
29037
8b095871
IC
29038/**
29039 * Validate ECDSA signature
29040 * @method isValidSignature
29041 * @param {Buffer} v
29042 * @param {Buffer} r
29043 * @param {Buffer} s
29044 * @param {Boolean} [homestead=true]
29045 * @return {Boolean}
29046 */
29047
29048exports.isValidSignature = function (v, r, s, homestead) {
29049 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
29050 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
29051
29052 if (r.length !== 32 || s.length !== 32) {
29053 return false
29054 }
29055
29056 if (v !== 27 && v !== 28) {
29057 return false
29058 }
29059
29060 r = new BN(r)
29061 s = new BN(s)
29062
29063 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
29064 return false
29065 }
29066
29067 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
29068 return false
29069 }
29070
29071 return true
ebd8d4e8
IC
29072}
29073
8b095871
IC
29074/**
29075 * Converts a `Buffer` or `Array` to JSON
29076 * @param {Buffer|Array} ba
29077 * @return {Array|String|null}
29078 */
29079exports.baToJSON = function (ba) {
29080 if (Buffer.isBuffer(ba)) {
29081 return '0x' + ba.toString('hex')
29082 } else if (ba instanceof Array) {
29083 var array = []
29084 for (var i = 0; i < ba.length; i++) {
29085 array.push(exports.baToJSON(ba[i]))
29086 }
29087 return array
29088 }
ab78acc6 29089}
ebd8d4e8 29090
8b095871
IC
29091/**
29092 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
29093 * @param {Object} self the `Object` to define properties on
29094 * @param {Array} fields an array fields to define. Fields can contain:
29095 * * `name` - the name of the properties
29096 * * `length` - the number of bytes the field can have
29097 * * `allowLess` - if the field can be less than the length
29098 * * `allowEmpty`
29099 * @param {*} data data to be validated against the definitions
29100 */
29101exports.defineProperties = function (self, fields, data) {
29102 self.raw = []
29103 self._fields = []
29104
29105 // attach the `toJSON`
29106 self.toJSON = function (label) {
29107 if (label) {
29108 var obj = {}
29109 self._fields.forEach(function (field) {
29110 obj[field] = '0x' + self[field].toString('hex')
29111 })
29112 return obj
29113 }
29114 return exports.baToJSON(this.raw)
29115 }
29116
29117 self.serialize = function serialize () {
29118 return rlp.encode(self.raw)
29119 }
29120
29121 fields.forEach(function (field, i) {
29122 self._fields.push(field.name)
29123 function getter () {
29124 return self.raw[i]
29125 }
29126 function setter (v) {
29127 v = exports.toBuffer(v)
29128
29129 if (v.toString('hex') === '00' && !field.allowZero) {
29130 v = Buffer.allocUnsafe(0)
29131 }
29132
29133 if (field.allowLess && field.length) {
29134 v = exports.stripZeros(v)
29135 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
29136 } else if (!(field.allowZero && v.length === 0) && field.length) {
29137 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
29138 }
29139
29140 self.raw[i] = v
29141 }
29142
29143 Object.defineProperty(self, field.name, {
29144 enumerable: true,
29145 configurable: true,
29146 get: getter,
29147 set: setter
29148 })
29149
29150 if (field.default) {
29151 self[field.name] = field.default
29152 }
29153
29154 // attach alias
29155 if (field.alias) {
29156 Object.defineProperty(self, field.alias, {
29157 enumerable: false,
29158 configurable: true,
29159 set: setter,
29160 get: getter
29161 })
29162 }
29163 })
29164
29165 // if the constuctor is passed data
29166 if (data) {
29167 if (typeof data === 'string') {
29168 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
29169 }
29170
29171 if (Buffer.isBuffer(data)) {
29172 data = rlp.decode(data)
29173 }
29174
29175 if (Array.isArray(data)) {
29176 if (data.length > self._fields.length) {
29177 throw (new Error('wrong number of fields in data'))
29178 }
29179
29180 // make sure all the items are buffers
29181 data.forEach(function (d, i) {
29182 self[self._fields[i]] = exports.toBuffer(d)
29183 })
29184 } else if (typeof data === 'object') {
29185 const keys = Object.keys(data)
29186 fields.forEach(function (field) {
29187 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
29188 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
29189 })
29190 } else {
29191 throw new Error('invalid data')
29192 }
29193 }
ab78acc6 29194}
ebd8d4e8 29195
8b095871
IC
29196}).call(this,require("buffer").Buffer)
29197},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
29198(function (Buffer){
29199// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
29200// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29201// NOTE: SIGHASH byte ignored AND restricted, truncate before use
29202
29203function check (buffer) {
29204 if (buffer.length < 8) return false
29205 if (buffer.length > 72) return false
29206 if (buffer[0] !== 0x30) return false
29207 if (buffer[1] !== buffer.length - 2) return false
29208 if (buffer[2] !== 0x02) return false
29209
29210 var lenR = buffer[3]
29211 if (lenR === 0) return false
29212 if (5 + lenR >= buffer.length) return false
29213 if (buffer[4 + lenR] !== 0x02) return false
29214
29215 var lenS = buffer[5 + lenR]
29216 if (lenS === 0) return false
29217 if ((6 + lenR + lenS) !== buffer.length) return false
29218
29219 if (buffer[4] & 0x80) return false
29220 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
29221
29222 if (buffer[lenR + 6] & 0x80) return false
29223 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
29224 return true
ab78acc6 29225}
ab78acc6 29226
8b095871
IC
29227function decode (buffer) {
29228 if (buffer.length < 8) throw new Error('DER sequence length is too short')
29229 if (buffer.length > 72) throw new Error('DER sequence length is too long')
29230 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
29231 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
29232 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
29233
29234 var lenR = buffer[3]
29235 if (lenR === 0) throw new Error('R length is zero')
29236 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
29237 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
29238
29239 var lenS = buffer[5 + lenR]
29240 if (lenS === 0) throw new Error('S length is zero')
29241 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
29242
29243 if (buffer[4] & 0x80) throw new Error('R value is negative')
29244 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
29245
29246 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
29247 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
29248
29249 // non-BIP66 - extract R, S values
29250 return {
29251 r: buffer.slice(4, 4 + lenR),
29252 s: buffer.slice(6 + lenR)
29253 }
ebd8d4e8
IC
29254}
29255
8b095871
IC
29256/*
29257 * Expects r and s to be positive DER integers.
29258 *
29259 * The DER format uses the most significant bit as a sign bit (& 0x80).
29260 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
29261 *
29262 * Examples:
29263 *
29264 * 0 => 0x00
29265 * 1 => 0x01
29266 * -1 => 0xff
29267 * 127 => 0x7f
29268 * -127 => 0x81
29269 * 128 => 0x0080
29270 * -128 => 0x80
29271 * 255 => 0x00ff
29272 * -255 => 0xff01
29273 * 16300 => 0x3fac
29274 * -16300 => 0xc054
29275 * 62300 => 0x00f35c
29276 * -62300 => 0xff0ca4
29277*/
29278function encode (r, s) {
29279 var lenR = r.length
29280 var lenS = s.length
29281 if (lenR === 0) throw new Error('R length is zero')
29282 if (lenS === 0) throw new Error('S length is zero')
29283 if (lenR > 33) throw new Error('R length is too long')
29284 if (lenS > 33) throw new Error('S length is too long')
29285 if (r[0] & 0x80) throw new Error('R value is negative')
29286 if (s[0] & 0x80) throw new Error('S value is negative')
29287 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
29288 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
29289
29290 var signature = new Buffer(6 + lenR + lenS)
29291
29292 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29293 signature[0] = 0x30
29294 signature[1] = signature.length - 2
29295 signature[2] = 0x02
29296 signature[3] = r.length
29297 r.copy(signature, 4)
29298 signature[4 + lenR] = 0x02
29299 signature[5 + lenR] = s.length
29300 s.copy(signature, 6 + lenR)
29301
29302 return signature
ebd8d4e8
IC
29303}
29304
8b095871
IC
29305module.exports = {
29306 check: check,
29307 decode: decode,
29308 encode: encode
ebd8d4e8 29309}
8b095871 29310
ab78acc6 29311}).call(this,require("buffer").Buffer)
8b095871
IC
29312},{"buffer":5}],33:[function(require,module,exports){
29313(function (module, exports) {
29314 'use strict';
ebd8d4e8 29315
8b095871
IC
29316 // Utils
29317 function assert (val, msg) {
29318 if (!val) throw new Error(msg || 'Assertion failed');
29319 }
ebd8d4e8 29320
8b095871
IC
29321 // Could use `inherits` module, but don't want to move from single file
29322 // architecture yet.
29323 function inherits (ctor, superCtor) {
29324 ctor.super_ = superCtor;
29325 var TempCtor = function () {};
29326 TempCtor.prototype = superCtor.prototype;
29327 ctor.prototype = new TempCtor();
29328 ctor.prototype.constructor = ctor;
29329 }
ebd8d4e8 29330
8b095871 29331 // BN
ab78acc6 29332
8b095871
IC
29333 function BN (number, base, endian) {
29334 if (BN.isBN(number)) {
29335 return number;
29336 }
ab78acc6 29337
8b095871
IC
29338 this.negative = 0;
29339 this.words = null;
29340 this.length = 0;
ab78acc6 29341
8b095871
IC
29342 // Reduction context
29343 this.red = null;
ab78acc6 29344
8b095871
IC
29345 if (number !== null) {
29346 if (base === 'le' || base === 'be') {
29347 endian = base;
29348 base = 10;
29349 }
ab78acc6 29350
8b095871
IC
29351 this._init(number || 0, base || 10, endian || 'be');
29352 }
29353 }
29354 if (typeof module === 'object') {
29355 module.exports = BN;
29356 } else {
29357 exports.BN = BN;
29358 }
ab78acc6 29359
8b095871
IC
29360 BN.BN = BN;
29361 BN.wordSize = 26;
ab78acc6 29362
8b095871
IC
29363 var Buffer;
29364 try {
29365 Buffer = require('buf' + 'fer').Buffer;
29366 } catch (e) {
29367 }
ab78acc6 29368
8b095871
IC
29369 BN.isBN = function isBN (num) {
29370 if (num instanceof BN) {
29371 return true;
29372 }
ab78acc6 29373
8b095871
IC
29374 return num !== null && typeof num === 'object' &&
29375 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
29376 };
ebd8d4e8 29377
8b095871
IC
29378 BN.max = function max (left, right) {
29379 if (left.cmp(right) > 0) return left;
29380 return right;
29381 };
ebd8d4e8 29382
8b095871
IC
29383 BN.min = function min (left, right) {
29384 if (left.cmp(right) < 0) return left;
29385 return right;
29386 };
29387
29388 BN.prototype._init = function init (number, base, endian) {
29389 if (typeof number === 'number') {
29390 return this._initNumber(number, base, endian);
ab78acc6 29391 }
ebd8d4e8 29392
8b095871
IC
29393 if (typeof number === 'object') {
29394 return this._initArray(number, base, endian);
29395 }
ebd8d4e8 29396
8b095871
IC
29397 if (base === 'hex') {
29398 base = 16;
29399 }
29400 assert(base === (base | 0) && base >= 2 && base <= 36);
29401
29402 number = number.toString().replace(/\s+/g, '');
29403 var start = 0;
29404 if (number[0] === '-') {
29405 start++;
29406 }
29407
29408 if (base === 16) {
29409 this._parseHex(number, start);
29410 } else {
29411 this._parseBase(number, base, start);
ab78acc6 29412 }
ebd8d4e8 29413
8b095871
IC
29414 if (number[0] === '-') {
29415 this.negative = 1;
29416 }
ebd8d4e8 29417
8b095871 29418 this.strip();
ebd8d4e8 29419
8b095871 29420 if (endian !== 'le') return;
ebd8d4e8 29421
8b095871
IC
29422 this._initArray(this.toArray(), base, endian);
29423 };
ebd8d4e8 29424
8b095871
IC
29425 BN.prototype._initNumber = function _initNumber (number, base, endian) {
29426 if (number < 0) {
29427 this.negative = 1;
29428 number = -number;
29429 }
29430 if (number < 0x4000000) {
29431 this.words = [ number & 0x3ffffff ];
29432 this.length = 1;
29433 } else if (number < 0x10000000000000) {
29434 this.words = [
29435 number & 0x3ffffff,
29436 (number / 0x4000000) & 0x3ffffff
29437 ];
29438 this.length = 2;
29439 } else {
29440 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
29441 this.words = [
29442 number & 0x3ffffff,
29443 (number / 0x4000000) & 0x3ffffff,
29444 1
29445 ];
29446 this.length = 3;
29447 }
ebd8d4e8 29448
8b095871 29449 if (endian !== 'le') return;
ebd8d4e8 29450
8b095871
IC
29451 // Reverse the bytes
29452 this._initArray(this.toArray(), base, endian);
29453 };
ebd8d4e8 29454
8b095871
IC
29455 BN.prototype._initArray = function _initArray (number, base, endian) {
29456 // Perhaps a Uint8Array
29457 assert(typeof number.length === 'number');
29458 if (number.length <= 0) {
29459 this.words = [ 0 ];
29460 this.length = 1;
29461 return this;
ab78acc6 29462 }
ebd8d4e8 29463
8b095871
IC
29464 this.length = Math.ceil(number.length / 3);
29465 this.words = new Array(this.length);
29466 for (var i = 0; i < this.length; i++) {
29467 this.words[i] = 0;
29468 }
ebd8d4e8 29469
8b095871
IC
29470 var j, w;
29471 var off = 0;
29472 if (endian === 'be') {
29473 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
29474 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
29475 this.words[j] |= (w << off) & 0x3ffffff;
29476 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29477 off += 24;
29478 if (off >= 26) {
29479 off -= 26;
29480 j++;
29481 }
29482 }
29483 } else if (endian === 'le') {
29484 for (i = 0, j = 0; i < number.length; i += 3) {
29485 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
29486 this.words[j] |= (w << off) & 0x3ffffff;
29487 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29488 off += 24;
29489 if (off >= 26) {
29490 off -= 26;
29491 j++;
29492 }
29493 }
29494 }
29495 return this.strip();
29496 };
ebd8d4e8 29497
8b095871
IC
29498 function parseHex (str, start, end) {
29499 var r = 0;
29500 var len = Math.min(str.length, end);
29501 for (var i = start; i < len; i++) {
29502 var c = str.charCodeAt(i) - 48;
ab78acc6 29503
8b095871 29504 r <<= 4;
ab78acc6 29505
8b095871
IC
29506 // 'a' - 'f'
29507 if (c >= 49 && c <= 54) {
29508 r |= c - 49 + 0xa;
ab78acc6 29509
8b095871
IC
29510 // 'A' - 'F'
29511 } else if (c >= 17 && c <= 22) {
29512 r |= c - 17 + 0xa;
ebd8d4e8 29513
8b095871
IC
29514 // '0' - '9'
29515 } else {
29516 r |= c & 0xf;
29517 }
29518 }
29519 return r;
29520 }
29521
29522 BN.prototype._parseHex = function _parseHex (number, start) {
29523 // Create possibly bigger array to ensure that it fits the number
29524 this.length = Math.ceil((number.length - start) / 6);
29525 this.words = new Array(this.length);
29526 for (var i = 0; i < this.length; i++) {
29527 this.words[i] = 0;
29528 }
29529
29530 var j, w;
29531 // Scan 24-bit chunks and add them to the number
29532 var off = 0;
29533 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
29534 w = parseHex(number, i, i + 6);
29535 this.words[j] |= (w << off) & 0x3ffffff;
29536 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
29537 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29538 off += 24;
29539 if (off >= 26) {
29540 off -= 26;
29541 j++;
29542 }
29543 }
29544 if (i + 6 !== start) {
29545 w = parseHex(number, start, i + 6);
29546 this.words[j] |= (w << off) & 0x3ffffff;
29547 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29548 }
29549 this.strip();
29550 };
ebd8d4e8 29551
8b095871
IC
29552 function parseBase (str, start, end, mul) {
29553 var r = 0;
29554 var len = Math.min(str.length, end);
29555 for (var i = start; i < len; i++) {
29556 var c = str.charCodeAt(i) - 48;
ebd8d4e8 29557
8b095871 29558 r *= mul;
ebd8d4e8 29559
8b095871
IC
29560 // 'a'
29561 if (c >= 49) {
29562 r += c - 49 + 0xa;
ebd8d4e8 29563
8b095871
IC
29564 // 'A'
29565 } else if (c >= 17) {
29566 r += c - 17 + 0xa;
ebd8d4e8 29567
8b095871
IC
29568 // '0' - '9'
29569 } else {
29570 r += c;
29571 }
29572 }
29573 return r;
29574 }
ebd8d4e8 29575
8b095871
IC
29576 BN.prototype._parseBase = function _parseBase (number, base, start) {
29577 // Initialize as zero
29578 this.words = [ 0 ];
29579 this.length = 1;
ebd8d4e8 29580
8b095871
IC
29581 // Find length of limb in base
29582 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
29583 limbLen++;
29584 }
29585 limbLen--;
29586 limbPow = (limbPow / base) | 0;
ebd8d4e8 29587
8b095871
IC
29588 var total = number.length - start;
29589 var mod = total % limbLen;
29590 var end = Math.min(total, total - mod) + start;
ebd8d4e8 29591
8b095871
IC
29592 var word = 0;
29593 for (var i = start; i < end; i += limbLen) {
29594 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 29595
8b095871
IC
29596 this.imuln(limbPow);
29597 if (this.words[0] + word < 0x4000000) {
29598 this.words[0] += word;
29599 } else {
29600 this._iaddn(word);
29601 }
29602 }
ebd8d4e8 29603
8b095871
IC
29604 if (mod !== 0) {
29605 var pow = 1;
29606 word = parseBase(number, i, number.length, base);
ebd8d4e8 29607
8b095871
IC
29608 for (i = 0; i < mod; i++) {
29609 pow *= base;
29610 }
ab78acc6 29611
8b095871
IC
29612 this.imuln(pow);
29613 if (this.words[0] + word < 0x4000000) {
29614 this.words[0] += word;
29615 } else {
29616 this._iaddn(word);
29617 }
29618 }
29619 };
ab78acc6 29620
8b095871
IC
29621 BN.prototype.copy = function copy (dest) {
29622 dest.words = new Array(this.length);
29623 for (var i = 0; i < this.length; i++) {
29624 dest.words[i] = this.words[i];
ab78acc6 29625 }
8b095871
IC
29626 dest.length = this.length;
29627 dest.negative = this.negative;
29628 dest.red = this.red;
29629 };
ab78acc6 29630
8b095871
IC
29631 BN.prototype.clone = function clone () {
29632 var r = new BN(null);
29633 this.copy(r);
29634 return r;
29635 };
ab78acc6 29636
8b095871
IC
29637 BN.prototype._expand = function _expand (size) {
29638 while (this.length < size) {
29639 this.words[this.length++] = 0;
29640 }
29641 return this;
29642 };
ab78acc6 29643
8b095871
IC
29644 // Remove leading `0` from `this`
29645 BN.prototype.strip = function strip () {
29646 while (this.length > 1 && this.words[this.length - 1] === 0) {
29647 this.length--;
ab78acc6 29648 }
8b095871
IC
29649 return this._normSign();
29650 };
ebd8d4e8 29651
8b095871
IC
29652 BN.prototype._normSign = function _normSign () {
29653 // -0 = 0
29654 if (this.length === 1 && this.words[0] === 0) {
29655 this.negative = 0;
ab78acc6 29656 }
8b095871
IC
29657 return this;
29658 };
ebd8d4e8 29659
8b095871
IC
29660 BN.prototype.inspect = function inspect () {
29661 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
29662 };
ebd8d4e8 29663
8b095871 29664 /*
ebd8d4e8 29665
8b095871
IC
29666 var zeros = [];
29667 var groupSizes = [];
29668 var groupBases = [];
ebd8d4e8 29669
8b095871
IC
29670 var s = '';
29671 var i = -1;
29672 while (++i < BN.wordSize) {
29673 zeros[i] = s;
29674 s += '0';
29675 }
29676 groupSizes[0] = 0;
29677 groupSizes[1] = 0;
29678 groupBases[0] = 0;
29679 groupBases[1] = 0;
29680 var base = 2 - 1;
29681 while (++base < 36 + 1) {
29682 var groupSize = 0;
29683 var groupBase = 1;
29684 while (groupBase < (1 << BN.wordSize) / base) {
29685 groupBase *= base;
29686 groupSize += 1;
29687 }
29688 groupSizes[base] = groupSize;
29689 groupBases[base] = groupBase;
ebd8d4e8
IC
29690 }
29691
8b095871 29692 */
ebd8d4e8 29693
8b095871
IC
29694 var zeros = [
29695 '',
29696 '0',
29697 '00',
29698 '000',
29699 '0000',
29700 '00000',
29701 '000000',
29702 '0000000',
29703 '00000000',
29704 '000000000',
29705 '0000000000',
29706 '00000000000',
29707 '000000000000',
29708 '0000000000000',
29709 '00000000000000',
29710 '000000000000000',
29711 '0000000000000000',
29712 '00000000000000000',
29713 '000000000000000000',
29714 '0000000000000000000',
29715 '00000000000000000000',
29716 '000000000000000000000',
29717 '0000000000000000000000',
29718 '00000000000000000000000',
29719 '000000000000000000000000',
29720 '0000000000000000000000000'
29721 ];
29722
29723 var groupSizes = [
29724 0, 0,
29725 25, 16, 12, 11, 10, 9, 8,
29726 8, 7, 7, 7, 7, 6, 6,
29727 6, 6, 6, 6, 6, 5, 5,
29728 5, 5, 5, 5, 5, 5, 5,
29729 5, 5, 5, 5, 5, 5, 5
29730 ];
29731
29732 var groupBases = [
29733 0, 0,
29734 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
29735 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
29736 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
29737 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
29738 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
29739 ];
29740
29741 BN.prototype.toString = function toString (base, padding) {
29742 base = base || 10;
29743 padding = padding | 0 || 1;
29744
29745 var out;
29746 if (base === 16 || base === 'hex') {
29747 out = '';
29748 var off = 0;
29749 var carry = 0;
29750 for (var i = 0; i < this.length; i++) {
29751 var w = this.words[i];
29752 var word = (((w << off) | carry) & 0xffffff).toString(16);
29753 carry = (w >>> (24 - off)) & 0xffffff;
29754 if (carry !== 0 || i !== this.length - 1) {
29755 out = zeros[6 - word.length] + word + out;
29756 } else {
29757 out = word + out;
29758 }
29759 off += 2;
29760 if (off >= 26) {
29761 off -= 26;
29762 i--;
29763 }
29764 }
29765 if (carry !== 0) {
29766 out = carry.toString(16) + out;
29767 }
29768 while (out.length % padding !== 0) {
29769 out = '0' + out;
29770 }
29771 if (this.negative !== 0) {
29772 out = '-' + out;
29773 }
29774 return out;
29775 }
29776
29777 if (base === (base | 0) && base >= 2 && base <= 36) {
29778 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
29779 var groupSize = groupSizes[base];
29780 // var groupBase = Math.pow(base, groupSize);
29781 var groupBase = groupBases[base];
29782 out = '';
29783 var c = this.clone();
29784 c.negative = 0;
29785 while (!c.isZero()) {
29786 var r = c.modn(groupBase).toString(base);
29787 c = c.idivn(groupBase);
29788
29789 if (!c.isZero()) {
29790 out = zeros[groupSize - r.length] + r + out;
29791 } else {
29792 out = r + out;
29793 }
29794 }
29795 if (this.isZero()) {
29796 out = '0' + out;
29797 }
29798 while (out.length % padding !== 0) {
29799 out = '0' + out;
29800 }
29801 if (this.negative !== 0) {
29802 out = '-' + out;
29803 }
29804 return out;
29805 }
29806
29807 assert(false, 'Base should be between 2 and 36');
29808 };
29809
29810 BN.prototype.toNumber = function toNumber () {
29811 var ret = this.words[0];
29812 if (this.length === 2) {
29813 ret += this.words[1] * 0x4000000;
29814 } else if (this.length === 3 && this.words[2] === 0x01) {
29815 // NOTE: at this stage it is known that the top bit is set
29816 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
29817 } else if (this.length > 2) {
29818 assert(false, 'Number can only safely store up to 53 bits');
29819 }
29820 return (this.negative !== 0) ? -ret : ret;
29821 };
29822
29823 BN.prototype.toJSON = function toJSON () {
29824 return this.toString(16);
29825 };
29826
29827 BN.prototype.toBuffer = function toBuffer (endian, length) {
29828 assert(typeof Buffer !== 'undefined');
29829 return this.toArrayLike(Buffer, endian, length);
29830 };
ebd8d4e8 29831
8b095871
IC
29832 BN.prototype.toArray = function toArray (endian, length) {
29833 return this.toArrayLike(Array, endian, length);
29834 };
ebd8d4e8 29835
8b095871
IC
29836 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
29837 var byteLength = this.byteLength();
29838 var reqLength = length || Math.max(1, byteLength);
29839 assert(byteLength <= reqLength, 'byte array longer than desired length');
29840 assert(reqLength > 0, 'Requested array length <= 0');
29841
29842 this.strip();
29843 var littleEndian = endian === 'le';
29844 var res = new ArrayType(reqLength);
29845
29846 var b, i;
29847 var q = this.clone();
29848 if (!littleEndian) {
29849 // Assume big-endian
29850 for (i = 0; i < reqLength - byteLength; i++) {
29851 res[i] = 0;
29852 }
ebd8d4e8 29853
8b095871
IC
29854 for (i = 0; !q.isZero(); i++) {
29855 b = q.andln(0xff);
29856 q.iushrn(8);
ebd8d4e8 29857
8b095871
IC
29858 res[reqLength - i - 1] = b;
29859 }
29860 } else {
29861 for (i = 0; !q.isZero(); i++) {
29862 b = q.andln(0xff);
29863 q.iushrn(8);
ebd8d4e8 29864
8b095871
IC
29865 res[i] = b;
29866 }
29867
29868 for (; i < reqLength; i++) {
29869 res[i] = 0;
29870 }
ab78acc6 29871 }
ebd8d4e8 29872
8b095871
IC
29873 return res;
29874 };
ebd8d4e8 29875
8b095871
IC
29876 if (Math.clz32) {
29877 BN.prototype._countBits = function _countBits (w) {
29878 return 32 - Math.clz32(w);
29879 };
29880 } else {
29881 BN.prototype._countBits = function _countBits (w) {
29882 var t = w;
29883 var r = 0;
29884 if (t >= 0x1000) {
29885 r += 13;
29886 t >>>= 13;
29887 }
29888 if (t >= 0x40) {
29889 r += 7;
29890 t >>>= 7;
29891 }
29892 if (t >= 0x8) {
29893 r += 4;
29894 t >>>= 4;
29895 }
29896 if (t >= 0x02) {
29897 r += 2;
29898 t >>>= 2;
29899 }
29900 return r + t;
29901 };
ebd8d4e8
IC
29902 }
29903
8b095871
IC
29904 BN.prototype._zeroBits = function _zeroBits (w) {
29905 // Short-cut
29906 if (w === 0) return 26;
ebd8d4e8 29907
8b095871
IC
29908 var t = w;
29909 var r = 0;
29910 if ((t & 0x1fff) === 0) {
29911 r += 13;
29912 t >>>= 13;
29913 }
29914 if ((t & 0x7f) === 0) {
29915 r += 7;
29916 t >>>= 7;
29917 }
29918 if ((t & 0xf) === 0) {
29919 r += 4;
29920 t >>>= 4;
29921 }
29922 if ((t & 0x3) === 0) {
29923 r += 2;
29924 t >>>= 2;
29925 }
29926 if ((t & 0x1) === 0) {
29927 r++;
29928 }
29929 return r;
29930 };
ebd8d4e8 29931
8b095871
IC
29932 // Return number of used bits in a BN
29933 BN.prototype.bitLength = function bitLength () {
29934 var w = this.words[this.length - 1];
29935 var hi = this._countBits(w);
29936 return (this.length - 1) * 26 + hi;
29937 };
ebd8d4e8 29938
8b095871
IC
29939 function toBitArray (num) {
29940 var w = new Array(num.bitLength());
ebd8d4e8 29941
8b095871
IC
29942 for (var bit = 0; bit < w.length; bit++) {
29943 var off = (bit / 26) | 0;
29944 var wbit = bit % 26;
ebd8d4e8 29945
8b095871 29946 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 29947 }
8b095871
IC
29948
29949 return w;
ab78acc6 29950 }
ebd8d4e8 29951
8b095871
IC
29952 // Number of trailing zero bits
29953 BN.prototype.zeroBits = function zeroBits () {
29954 if (this.isZero()) return 0;
29955
29956 var r = 0;
29957 for (var i = 0; i < this.length; i++) {
29958 var b = this._zeroBits(this.words[i]);
29959 r += b;
29960 if (b !== 26) break;
ab78acc6 29961 }
8b095871
IC
29962 return r;
29963 };
29964
29965 BN.prototype.byteLength = function byteLength () {
29966 return Math.ceil(this.bitLength() / 8);
29967 };
29968
29969 BN.prototype.toTwos = function toTwos (width) {
29970 if (this.negative !== 0) {
29971 return this.abs().inotn(width).iaddn(1);
ab78acc6 29972 }
8b095871
IC
29973 return this.clone();
29974 };
ebd8d4e8 29975
8b095871
IC
29976 BN.prototype.fromTwos = function fromTwos (width) {
29977 if (this.testn(width - 1)) {
29978 return this.notn(width).iaddn(1).ineg();
29979 }
29980 return this.clone();
29981 };
ebd8d4e8 29982
8b095871
IC
29983 BN.prototype.isNeg = function isNeg () {
29984 return this.negative !== 0;
29985 };
ebd8d4e8 29986
8b095871
IC
29987 // Return negative clone of `this`
29988 BN.prototype.neg = function neg () {
29989 return this.clone().ineg();
29990 };
ebd8d4e8 29991
8b095871
IC
29992 BN.prototype.ineg = function ineg () {
29993 if (!this.isZero()) {
29994 this.negative ^= 1;
ab78acc6 29995 }
ebd8d4e8 29996
8b095871
IC
29997 return this;
29998 };
ebd8d4e8 29999
8b095871
IC
30000 // Or `num` with `this` in-place
30001 BN.prototype.iuor = function iuor (num) {
30002 while (this.length < num.length) {
30003 this.words[this.length++] = 0;
30004 }
ebd8d4e8 30005
8b095871
IC
30006 for (var i = 0; i < num.length; i++) {
30007 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 30008 }
ebd8d4e8 30009
8b095871
IC
30010 return this.strip();
30011 };
ebd8d4e8 30012
8b095871
IC
30013 BN.prototype.ior = function ior (num) {
30014 assert((this.negative | num.negative) === 0);
30015 return this.iuor(num);
ab78acc6 30016 };
ebd8d4e8 30017
8b095871
IC
30018 // Or `num` with `this`
30019 BN.prototype.or = function or (num) {
30020 if (this.length > num.length) return this.clone().ior(num);
30021 return num.clone().ior(this);
30022 };
ebd8d4e8 30023
8b095871
IC
30024 BN.prototype.uor = function uor (num) {
30025 if (this.length > num.length) return this.clone().iuor(num);
30026 return num.clone().iuor(this);
30027 };
ebd8d4e8 30028
8b095871
IC
30029 // And `num` with `this` in-place
30030 BN.prototype.iuand = function iuand (num) {
30031 // b = min-length(num, this)
30032 var b;
30033 if (this.length > num.length) {
30034 b = num;
30035 } else {
30036 b = this;
30037 }
30038
30039 for (var i = 0; i < b.length; i++) {
30040 this.words[i] = this.words[i] & num.words[i];
30041 }
ebd8d4e8 30042
8b095871 30043 this.length = b.length;
ebd8d4e8 30044
8b095871
IC
30045 return this.strip();
30046 };
ebd8d4e8 30047
8b095871
IC
30048 BN.prototype.iand = function iand (num) {
30049 assert((this.negative | num.negative) === 0);
30050 return this.iuand(num);
30051 };
ebd8d4e8 30052
8b095871
IC
30053 // And `num` with `this`
30054 BN.prototype.and = function and (num) {
30055 if (this.length > num.length) return this.clone().iand(num);
30056 return num.clone().iand(this);
30057 };
ebd8d4e8 30058
8b095871
IC
30059 BN.prototype.uand = function uand (num) {
30060 if (this.length > num.length) return this.clone().iuand(num);
30061 return num.clone().iuand(this);
30062 };
ebd8d4e8 30063
8b095871
IC
30064 // Xor `num` with `this` in-place
30065 BN.prototype.iuxor = function iuxor (num) {
30066 // a.length > b.length
30067 var a;
30068 var b;
30069 if (this.length > num.length) {
30070 a = this;
30071 b = num;
30072 } else {
30073 a = num;
30074 b = this;
30075 }
ebd8d4e8 30076
8b095871
IC
30077 for (var i = 0; i < b.length; i++) {
30078 this.words[i] = a.words[i] ^ b.words[i];
30079 }
ebd8d4e8 30080
8b095871
IC
30081 if (this !== a) {
30082 for (; i < a.length; i++) {
30083 this.words[i] = a.words[i];
30084 }
30085 }
ebd8d4e8 30086
8b095871 30087 this.length = a.length;
ebd8d4e8 30088
8b095871
IC
30089 return this.strip();
30090 };
ebd8d4e8 30091
8b095871
IC
30092 BN.prototype.ixor = function ixor (num) {
30093 assert((this.negative | num.negative) === 0);
30094 return this.iuxor(num);
30095 };
ebd8d4e8 30096
8b095871
IC
30097 // Xor `num` with `this`
30098 BN.prototype.xor = function xor (num) {
30099 if (this.length > num.length) return this.clone().ixor(num);
30100 return num.clone().ixor(this);
30101 };
ebd8d4e8 30102
8b095871
IC
30103 BN.prototype.uxor = function uxor (num) {
30104 if (this.length > num.length) return this.clone().iuxor(num);
30105 return num.clone().iuxor(this);
30106 };
ebd8d4e8 30107
8b095871
IC
30108 // Not ``this`` with ``width`` bitwidth
30109 BN.prototype.inotn = function inotn (width) {
30110 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 30111
8b095871
IC
30112 var bytesNeeded = Math.ceil(width / 26) | 0;
30113 var bitsLeft = width % 26;
ebd8d4e8 30114
8b095871
IC
30115 // Extend the buffer with leading zeroes
30116 this._expand(bytesNeeded);
30117
30118 if (bitsLeft > 0) {
30119 bytesNeeded--;
ab78acc6 30120 }
8b095871
IC
30121
30122 // Handle complete words
30123 for (var i = 0; i < bytesNeeded; i++) {
30124 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 30125 }
8b095871
IC
30126
30127 // Handle the residue
30128 if (bitsLeft > 0) {
30129 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 30130 }
ebd8d4e8 30131
8b095871
IC
30132 // And remove leading zeroes
30133 return this.strip();
30134 };
ebd8d4e8 30135
8b095871
IC
30136 BN.prototype.notn = function notn (width) {
30137 return this.clone().inotn(width);
30138 };
ebd8d4e8 30139
8b095871
IC
30140 // Set `bit` of `this`
30141 BN.prototype.setn = function setn (bit, val) {
30142 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 30143
8b095871
IC
30144 var off = (bit / 26) | 0;
30145 var wbit = bit % 26;
ebd8d4e8 30146
8b095871 30147 this._expand(off + 1);
ebd8d4e8 30148
8b095871
IC
30149 if (val) {
30150 this.words[off] = this.words[off] | (1 << wbit);
30151 } else {
30152 this.words[off] = this.words[off] & ~(1 << wbit);
30153 }
ebd8d4e8 30154
8b095871
IC
30155 return this.strip();
30156 };
ebd8d4e8 30157
8b095871
IC
30158 // Add `num` to `this` in-place
30159 BN.prototype.iadd = function iadd (num) {
30160 var r;
30161
30162 // negative + positive
30163 if (this.negative !== 0 && num.negative === 0) {
30164 this.negative = 0;
30165 r = this.isub(num);
30166 this.negative ^= 1;
30167 return this._normSign();
30168
30169 // positive + negative
30170 } else if (this.negative === 0 && num.negative !== 0) {
30171 num.negative = 0;
30172 r = this.isub(num);
30173 num.negative = 1;
30174 return r._normSign();
30175 }
30176
30177 // a.length > b.length
30178 var a, b;
30179 if (this.length > num.length) {
30180 a = this;
30181 b = num;
ab78acc6 30182 } else {
8b095871
IC
30183 a = num;
30184 b = this;
30185 }
30186
30187 var carry = 0;
30188 for (var i = 0; i < b.length; i++) {
30189 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
30190 this.words[i] = r & 0x3ffffff;
30191 carry = r >>> 26;
30192 }
30193 for (; carry !== 0 && i < a.length; i++) {
30194 r = (a.words[i] | 0) + carry;
30195 this.words[i] = r & 0x3ffffff;
30196 carry = r >>> 26;
30197 }
30198
30199 this.length = a.length;
30200 if (carry !== 0) {
30201 this.words[this.length] = carry;
30202 this.length++;
30203 // Copy the rest of the words
30204 } else if (a !== this) {
30205 for (; i < a.length; i++) {
30206 this.words[i] = a.words[i];
30207 }
ab78acc6 30208 }
ebd8d4e8 30209
8b095871
IC
30210 return this;
30211 };
ebd8d4e8 30212
8b095871
IC
30213 // Add `num` to `this`
30214 BN.prototype.add = function add (num) {
30215 var res;
30216 if (num.negative !== 0 && this.negative === 0) {
30217 num.negative = 0;
30218 res = this.sub(num);
30219 num.negative ^= 1;
30220 return res;
30221 } else if (num.negative === 0 && this.negative !== 0) {
30222 this.negative = 0;
30223 res = num.sub(this);
30224 this.negative = 1;
30225 return res;
30226 }
ebd8d4e8 30227
8b095871 30228 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 30229
8b095871
IC
30230 return num.clone().iadd(this);
30231 };
ebd8d4e8 30232
8b095871
IC
30233 // Subtract `num` from `this` in-place
30234 BN.prototype.isub = function isub (num) {
30235 // this - (-num) = this + num
30236 if (num.negative !== 0) {
30237 num.negative = 0;
30238 var r = this.iadd(num);
30239 num.negative = 1;
30240 return r._normSign();
30241
30242 // -this - num = -(this + num)
30243 } else if (this.negative !== 0) {
30244 this.negative = 0;
30245 this.iadd(num);
30246 this.negative = 1;
30247 return this._normSign();
30248 }
30249
30250 // At this point both numbers are positive
30251 var cmp = this.cmp(num);
30252
30253 // Optimization - zeroify
30254 if (cmp === 0) {
30255 this.negative = 0;
30256 this.length = 1;
30257 this.words[0] = 0;
30258 return this;
30259 }
ebd8d4e8 30260
8b095871
IC
30261 // a > b
30262 var a, b;
30263 if (cmp > 0) {
30264 a = this;
30265 b = num;
30266 } else {
30267 a = num;
30268 b = this;
30269 }
ebd8d4e8 30270
8b095871
IC
30271 var carry = 0;
30272 for (var i = 0; i < b.length; i++) {
30273 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
30274 carry = r >> 26;
30275 this.words[i] = r & 0x3ffffff;
30276 }
30277 for (; carry !== 0 && i < a.length; i++) {
30278 r = (a.words[i] | 0) + carry;
30279 carry = r >> 26;
30280 this.words[i] = r & 0x3ffffff;
30281 }
ebd8d4e8 30282
8b095871
IC
30283 // Copy rest of the words
30284 if (carry === 0 && i < a.length && a !== this) {
30285 for (; i < a.length; i++) {
30286 this.words[i] = a.words[i];
30287 }
30288 }
ebd8d4e8 30289
8b095871 30290 this.length = Math.max(this.length, i);
ebd8d4e8 30291
8b095871
IC
30292 if (a !== this) {
30293 this.negative = 1;
ab78acc6 30294 }
ebd8d4e8 30295
8b095871
IC
30296 return this.strip();
30297 };
ebd8d4e8 30298
8b095871
IC
30299 // Subtract `num` from `this`
30300 BN.prototype.sub = function sub (num) {
30301 return this.clone().isub(num);
30302 };
30303
30304 function smallMulTo (self, num, out) {
30305 out.negative = num.negative ^ self.negative;
30306 var len = (self.length + num.length) | 0;
30307 out.length = len;
30308 len = (len - 1) | 0;
30309
30310 // Peel one iteration (compiler can't do it, because of code complexity)
30311 var a = self.words[0] | 0;
30312 var b = num.words[0] | 0;
30313 var r = a * b;
30314
30315 var lo = r & 0x3ffffff;
30316 var carry = (r / 0x4000000) | 0;
30317 out.words[0] = lo;
30318
30319 for (var k = 1; k < len; k++) {
30320 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30321 // note that ncarry could be >= 0x3ffffff
30322 var ncarry = carry >>> 26;
30323 var rword = carry & 0x3ffffff;
30324 var maxJ = Math.min(k, num.length - 1);
30325 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30326 var i = (k - j) | 0;
30327 a = self.words[i] | 0;
30328 b = num.words[j] | 0;
30329 r = a * b + rword;
30330 ncarry += (r / 0x4000000) | 0;
30331 rword = r & 0x3ffffff;
30332 }
30333 out.words[k] = rword | 0;
30334 carry = ncarry | 0;
30335 }
30336 if (carry !== 0) {
30337 out.words[k] = carry | 0;
ab78acc6 30338 } else {
8b095871
IC
30339 out.length--;
30340 }
30341
30342 return out.strip();
30343 }
30344
30345 // TODO(indutny): it may be reasonable to omit it for users who don't need
30346 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
30347 // multiplication (like elliptic secp256k1).
30348 var comb10MulTo = function comb10MulTo (self, num, out) {
30349 var a = self.words;
30350 var b = num.words;
30351 var o = out.words;
30352 var c = 0;
30353 var lo;
30354 var mid;
30355 var hi;
30356 var a0 = a[0] | 0;
30357 var al0 = a0 & 0x1fff;
30358 var ah0 = a0 >>> 13;
30359 var a1 = a[1] | 0;
30360 var al1 = a1 & 0x1fff;
30361 var ah1 = a1 >>> 13;
30362 var a2 = a[2] | 0;
30363 var al2 = a2 & 0x1fff;
30364 var ah2 = a2 >>> 13;
30365 var a3 = a[3] | 0;
30366 var al3 = a3 & 0x1fff;
30367 var ah3 = a3 >>> 13;
30368 var a4 = a[4] | 0;
30369 var al4 = a4 & 0x1fff;
30370 var ah4 = a4 >>> 13;
30371 var a5 = a[5] | 0;
30372 var al5 = a5 & 0x1fff;
30373 var ah5 = a5 >>> 13;
30374 var a6 = a[6] | 0;
30375 var al6 = a6 & 0x1fff;
30376 var ah6 = a6 >>> 13;
30377 var a7 = a[7] | 0;
30378 var al7 = a7 & 0x1fff;
30379 var ah7 = a7 >>> 13;
30380 var a8 = a[8] | 0;
30381 var al8 = a8 & 0x1fff;
30382 var ah8 = a8 >>> 13;
30383 var a9 = a[9] | 0;
30384 var al9 = a9 & 0x1fff;
30385 var ah9 = a9 >>> 13;
30386 var b0 = b[0] | 0;
30387 var bl0 = b0 & 0x1fff;
30388 var bh0 = b0 >>> 13;
30389 var b1 = b[1] | 0;
30390 var bl1 = b1 & 0x1fff;
30391 var bh1 = b1 >>> 13;
30392 var b2 = b[2] | 0;
30393 var bl2 = b2 & 0x1fff;
30394 var bh2 = b2 >>> 13;
30395 var b3 = b[3] | 0;
30396 var bl3 = b3 & 0x1fff;
30397 var bh3 = b3 >>> 13;
30398 var b4 = b[4] | 0;
30399 var bl4 = b4 & 0x1fff;
30400 var bh4 = b4 >>> 13;
30401 var b5 = b[5] | 0;
30402 var bl5 = b5 & 0x1fff;
30403 var bh5 = b5 >>> 13;
30404 var b6 = b[6] | 0;
30405 var bl6 = b6 & 0x1fff;
30406 var bh6 = b6 >>> 13;
30407 var b7 = b[7] | 0;
30408 var bl7 = b7 & 0x1fff;
30409 var bh7 = b7 >>> 13;
30410 var b8 = b[8] | 0;
30411 var bl8 = b8 & 0x1fff;
30412 var bh8 = b8 >>> 13;
30413 var b9 = b[9] | 0;
30414 var bl9 = b9 & 0x1fff;
30415 var bh9 = b9 >>> 13;
30416
30417 out.negative = self.negative ^ num.negative;
30418 out.length = 19;
30419 /* k = 0 */
30420 lo = Math.imul(al0, bl0);
30421 mid = Math.imul(al0, bh0);
30422 mid = (mid + Math.imul(ah0, bl0)) | 0;
30423 hi = Math.imul(ah0, bh0);
30424 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30425 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
30426 w0 &= 0x3ffffff;
30427 /* k = 1 */
30428 lo = Math.imul(al1, bl0);
30429 mid = Math.imul(al1, bh0);
30430 mid = (mid + Math.imul(ah1, bl0)) | 0;
30431 hi = Math.imul(ah1, bh0);
30432 lo = (lo + Math.imul(al0, bl1)) | 0;
30433 mid = (mid + Math.imul(al0, bh1)) | 0;
30434 mid = (mid + Math.imul(ah0, bl1)) | 0;
30435 hi = (hi + Math.imul(ah0, bh1)) | 0;
30436 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30437 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
30438 w1 &= 0x3ffffff;
30439 /* k = 2 */
30440 lo = Math.imul(al2, bl0);
30441 mid = Math.imul(al2, bh0);
30442 mid = (mid + Math.imul(ah2, bl0)) | 0;
30443 hi = Math.imul(ah2, bh0);
30444 lo = (lo + Math.imul(al1, bl1)) | 0;
30445 mid = (mid + Math.imul(al1, bh1)) | 0;
30446 mid = (mid + Math.imul(ah1, bl1)) | 0;
30447 hi = (hi + Math.imul(ah1, bh1)) | 0;
30448 lo = (lo + Math.imul(al0, bl2)) | 0;
30449 mid = (mid + Math.imul(al0, bh2)) | 0;
30450 mid = (mid + Math.imul(ah0, bl2)) | 0;
30451 hi = (hi + Math.imul(ah0, bh2)) | 0;
30452 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30453 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
30454 w2 &= 0x3ffffff;
30455 /* k = 3 */
30456 lo = Math.imul(al3, bl0);
30457 mid = Math.imul(al3, bh0);
30458 mid = (mid + Math.imul(ah3, bl0)) | 0;
30459 hi = Math.imul(ah3, bh0);
30460 lo = (lo + Math.imul(al2, bl1)) | 0;
30461 mid = (mid + Math.imul(al2, bh1)) | 0;
30462 mid = (mid + Math.imul(ah2, bl1)) | 0;
30463 hi = (hi + Math.imul(ah2, bh1)) | 0;
30464 lo = (lo + Math.imul(al1, bl2)) | 0;
30465 mid = (mid + Math.imul(al1, bh2)) | 0;
30466 mid = (mid + Math.imul(ah1, bl2)) | 0;
30467 hi = (hi + Math.imul(ah1, bh2)) | 0;
30468 lo = (lo + Math.imul(al0, bl3)) | 0;
30469 mid = (mid + Math.imul(al0, bh3)) | 0;
30470 mid = (mid + Math.imul(ah0, bl3)) | 0;
30471 hi = (hi + Math.imul(ah0, bh3)) | 0;
30472 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30473 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
30474 w3 &= 0x3ffffff;
30475 /* k = 4 */
30476 lo = Math.imul(al4, bl0);
30477 mid = Math.imul(al4, bh0);
30478 mid = (mid + Math.imul(ah4, bl0)) | 0;
30479 hi = Math.imul(ah4, bh0);
30480 lo = (lo + Math.imul(al3, bl1)) | 0;
30481 mid = (mid + Math.imul(al3, bh1)) | 0;
30482 mid = (mid + Math.imul(ah3, bl1)) | 0;
30483 hi = (hi + Math.imul(ah3, bh1)) | 0;
30484 lo = (lo + Math.imul(al2, bl2)) | 0;
30485 mid = (mid + Math.imul(al2, bh2)) | 0;
30486 mid = (mid + Math.imul(ah2, bl2)) | 0;
30487 hi = (hi + Math.imul(ah2, bh2)) | 0;
30488 lo = (lo + Math.imul(al1, bl3)) | 0;
30489 mid = (mid + Math.imul(al1, bh3)) | 0;
30490 mid = (mid + Math.imul(ah1, bl3)) | 0;
30491 hi = (hi + Math.imul(ah1, bh3)) | 0;
30492 lo = (lo + Math.imul(al0, bl4)) | 0;
30493 mid = (mid + Math.imul(al0, bh4)) | 0;
30494 mid = (mid + Math.imul(ah0, bl4)) | 0;
30495 hi = (hi + Math.imul(ah0, bh4)) | 0;
30496 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30497 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
30498 w4 &= 0x3ffffff;
30499 /* k = 5 */
30500 lo = Math.imul(al5, bl0);
30501 mid = Math.imul(al5, bh0);
30502 mid = (mid + Math.imul(ah5, bl0)) | 0;
30503 hi = Math.imul(ah5, bh0);
30504 lo = (lo + Math.imul(al4, bl1)) | 0;
30505 mid = (mid + Math.imul(al4, bh1)) | 0;
30506 mid = (mid + Math.imul(ah4, bl1)) | 0;
30507 hi = (hi + Math.imul(ah4, bh1)) | 0;
30508 lo = (lo + Math.imul(al3, bl2)) | 0;
30509 mid = (mid + Math.imul(al3, bh2)) | 0;
30510 mid = (mid + Math.imul(ah3, bl2)) | 0;
30511 hi = (hi + Math.imul(ah3, bh2)) | 0;
30512 lo = (lo + Math.imul(al2, bl3)) | 0;
30513 mid = (mid + Math.imul(al2, bh3)) | 0;
30514 mid = (mid + Math.imul(ah2, bl3)) | 0;
30515 hi = (hi + Math.imul(ah2, bh3)) | 0;
30516 lo = (lo + Math.imul(al1, bl4)) | 0;
30517 mid = (mid + Math.imul(al1, bh4)) | 0;
30518 mid = (mid + Math.imul(ah1, bl4)) | 0;
30519 hi = (hi + Math.imul(ah1, bh4)) | 0;
30520 lo = (lo + Math.imul(al0, bl5)) | 0;
30521 mid = (mid + Math.imul(al0, bh5)) | 0;
30522 mid = (mid + Math.imul(ah0, bl5)) | 0;
30523 hi = (hi + Math.imul(ah0, bh5)) | 0;
30524 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30525 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
30526 w5 &= 0x3ffffff;
30527 /* k = 6 */
30528 lo = Math.imul(al6, bl0);
30529 mid = Math.imul(al6, bh0);
30530 mid = (mid + Math.imul(ah6, bl0)) | 0;
30531 hi = Math.imul(ah6, bh0);
30532 lo = (lo + Math.imul(al5, bl1)) | 0;
30533 mid = (mid + Math.imul(al5, bh1)) | 0;
30534 mid = (mid + Math.imul(ah5, bl1)) | 0;
30535 hi = (hi + Math.imul(ah5, bh1)) | 0;
30536 lo = (lo + Math.imul(al4, bl2)) | 0;
30537 mid = (mid + Math.imul(al4, bh2)) | 0;
30538 mid = (mid + Math.imul(ah4, bl2)) | 0;
30539 hi = (hi + Math.imul(ah4, bh2)) | 0;
30540 lo = (lo + Math.imul(al3, bl3)) | 0;
30541 mid = (mid + Math.imul(al3, bh3)) | 0;
30542 mid = (mid + Math.imul(ah3, bl3)) | 0;
30543 hi = (hi + Math.imul(ah3, bh3)) | 0;
30544 lo = (lo + Math.imul(al2, bl4)) | 0;
30545 mid = (mid + Math.imul(al2, bh4)) | 0;
30546 mid = (mid + Math.imul(ah2, bl4)) | 0;
30547 hi = (hi + Math.imul(ah2, bh4)) | 0;
30548 lo = (lo + Math.imul(al1, bl5)) | 0;
30549 mid = (mid + Math.imul(al1, bh5)) | 0;
30550 mid = (mid + Math.imul(ah1, bl5)) | 0;
30551 hi = (hi + Math.imul(ah1, bh5)) | 0;
30552 lo = (lo + Math.imul(al0, bl6)) | 0;
30553 mid = (mid + Math.imul(al0, bh6)) | 0;
30554 mid = (mid + Math.imul(ah0, bl6)) | 0;
30555 hi = (hi + Math.imul(ah0, bh6)) | 0;
30556 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30557 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
30558 w6 &= 0x3ffffff;
30559 /* k = 7 */
30560 lo = Math.imul(al7, bl0);
30561 mid = Math.imul(al7, bh0);
30562 mid = (mid + Math.imul(ah7, bl0)) | 0;
30563 hi = Math.imul(ah7, bh0);
30564 lo = (lo + Math.imul(al6, bl1)) | 0;
30565 mid = (mid + Math.imul(al6, bh1)) | 0;
30566 mid = (mid + Math.imul(ah6, bl1)) | 0;
30567 hi = (hi + Math.imul(ah6, bh1)) | 0;
30568 lo = (lo + Math.imul(al5, bl2)) | 0;
30569 mid = (mid + Math.imul(al5, bh2)) | 0;
30570 mid = (mid + Math.imul(ah5, bl2)) | 0;
30571 hi = (hi + Math.imul(ah5, bh2)) | 0;
30572 lo = (lo + Math.imul(al4, bl3)) | 0;
30573 mid = (mid + Math.imul(al4, bh3)) | 0;
30574 mid = (mid + Math.imul(ah4, bl3)) | 0;
30575 hi = (hi + Math.imul(ah4, bh3)) | 0;
30576 lo = (lo + Math.imul(al3, bl4)) | 0;
30577 mid = (mid + Math.imul(al3, bh4)) | 0;
30578 mid = (mid + Math.imul(ah3, bl4)) | 0;
30579 hi = (hi + Math.imul(ah3, bh4)) | 0;
30580 lo = (lo + Math.imul(al2, bl5)) | 0;
30581 mid = (mid + Math.imul(al2, bh5)) | 0;
30582 mid = (mid + Math.imul(ah2, bl5)) | 0;
30583 hi = (hi + Math.imul(ah2, bh5)) | 0;
30584 lo = (lo + Math.imul(al1, bl6)) | 0;
30585 mid = (mid + Math.imul(al1, bh6)) | 0;
30586 mid = (mid + Math.imul(ah1, bl6)) | 0;
30587 hi = (hi + Math.imul(ah1, bh6)) | 0;
30588 lo = (lo + Math.imul(al0, bl7)) | 0;
30589 mid = (mid + Math.imul(al0, bh7)) | 0;
30590 mid = (mid + Math.imul(ah0, bl7)) | 0;
30591 hi = (hi + Math.imul(ah0, bh7)) | 0;
30592 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30593 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
30594 w7 &= 0x3ffffff;
30595 /* k = 8 */
30596 lo = Math.imul(al8, bl0);
30597 mid = Math.imul(al8, bh0);
30598 mid = (mid + Math.imul(ah8, bl0)) | 0;
30599 hi = Math.imul(ah8, bh0);
30600 lo = (lo + Math.imul(al7, bl1)) | 0;
30601 mid = (mid + Math.imul(al7, bh1)) | 0;
30602 mid = (mid + Math.imul(ah7, bl1)) | 0;
30603 hi = (hi + Math.imul(ah7, bh1)) | 0;
30604 lo = (lo + Math.imul(al6, bl2)) | 0;
30605 mid = (mid + Math.imul(al6, bh2)) | 0;
30606 mid = (mid + Math.imul(ah6, bl2)) | 0;
30607 hi = (hi + Math.imul(ah6, bh2)) | 0;
30608 lo = (lo + Math.imul(al5, bl3)) | 0;
30609 mid = (mid + Math.imul(al5, bh3)) | 0;
30610 mid = (mid + Math.imul(ah5, bl3)) | 0;
30611 hi = (hi + Math.imul(ah5, bh3)) | 0;
30612 lo = (lo + Math.imul(al4, bl4)) | 0;
30613 mid = (mid + Math.imul(al4, bh4)) | 0;
30614 mid = (mid + Math.imul(ah4, bl4)) | 0;
30615 hi = (hi + Math.imul(ah4, bh4)) | 0;
30616 lo = (lo + Math.imul(al3, bl5)) | 0;
30617 mid = (mid + Math.imul(al3, bh5)) | 0;
30618 mid = (mid + Math.imul(ah3, bl5)) | 0;
30619 hi = (hi + Math.imul(ah3, bh5)) | 0;
30620 lo = (lo + Math.imul(al2, bl6)) | 0;
30621 mid = (mid + Math.imul(al2, bh6)) | 0;
30622 mid = (mid + Math.imul(ah2, bl6)) | 0;
30623 hi = (hi + Math.imul(ah2, bh6)) | 0;
30624 lo = (lo + Math.imul(al1, bl7)) | 0;
30625 mid = (mid + Math.imul(al1, bh7)) | 0;
30626 mid = (mid + Math.imul(ah1, bl7)) | 0;
30627 hi = (hi + Math.imul(ah1, bh7)) | 0;
30628 lo = (lo + Math.imul(al0, bl8)) | 0;
30629 mid = (mid + Math.imul(al0, bh8)) | 0;
30630 mid = (mid + Math.imul(ah0, bl8)) | 0;
30631 hi = (hi + Math.imul(ah0, bh8)) | 0;
30632 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30633 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
30634 w8 &= 0x3ffffff;
30635 /* k = 9 */
30636 lo = Math.imul(al9, bl0);
30637 mid = Math.imul(al9, bh0);
30638 mid = (mid + Math.imul(ah9, bl0)) | 0;
30639 hi = Math.imul(ah9, bh0);
30640 lo = (lo + Math.imul(al8, bl1)) | 0;
30641 mid = (mid + Math.imul(al8, bh1)) | 0;
30642 mid = (mid + Math.imul(ah8, bl1)) | 0;
30643 hi = (hi + Math.imul(ah8, bh1)) | 0;
30644 lo = (lo + Math.imul(al7, bl2)) | 0;
30645 mid = (mid + Math.imul(al7, bh2)) | 0;
30646 mid = (mid + Math.imul(ah7, bl2)) | 0;
30647 hi = (hi + Math.imul(ah7, bh2)) | 0;
30648 lo = (lo + Math.imul(al6, bl3)) | 0;
30649 mid = (mid + Math.imul(al6, bh3)) | 0;
30650 mid = (mid + Math.imul(ah6, bl3)) | 0;
30651 hi = (hi + Math.imul(ah6, bh3)) | 0;
30652 lo = (lo + Math.imul(al5, bl4)) | 0;
30653 mid = (mid + Math.imul(al5, bh4)) | 0;
30654 mid = (mid + Math.imul(ah5, bl4)) | 0;
30655 hi = (hi + Math.imul(ah5, bh4)) | 0;
30656 lo = (lo + Math.imul(al4, bl5)) | 0;
30657 mid = (mid + Math.imul(al4, bh5)) | 0;
30658 mid = (mid + Math.imul(ah4, bl5)) | 0;
30659 hi = (hi + Math.imul(ah4, bh5)) | 0;
30660 lo = (lo + Math.imul(al3, bl6)) | 0;
30661 mid = (mid + Math.imul(al3, bh6)) | 0;
30662 mid = (mid + Math.imul(ah3, bl6)) | 0;
30663 hi = (hi + Math.imul(ah3, bh6)) | 0;
30664 lo = (lo + Math.imul(al2, bl7)) | 0;
30665 mid = (mid + Math.imul(al2, bh7)) | 0;
30666 mid = (mid + Math.imul(ah2, bl7)) | 0;
30667 hi = (hi + Math.imul(ah2, bh7)) | 0;
30668 lo = (lo + Math.imul(al1, bl8)) | 0;
30669 mid = (mid + Math.imul(al1, bh8)) | 0;
30670 mid = (mid + Math.imul(ah1, bl8)) | 0;
30671 hi = (hi + Math.imul(ah1, bh8)) | 0;
30672 lo = (lo + Math.imul(al0, bl9)) | 0;
30673 mid = (mid + Math.imul(al0, bh9)) | 0;
30674 mid = (mid + Math.imul(ah0, bl9)) | 0;
30675 hi = (hi + Math.imul(ah0, bh9)) | 0;
30676 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30677 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
30678 w9 &= 0x3ffffff;
30679 /* k = 10 */
30680 lo = Math.imul(al9, bl1);
30681 mid = Math.imul(al9, bh1);
30682 mid = (mid + Math.imul(ah9, bl1)) | 0;
30683 hi = Math.imul(ah9, bh1);
30684 lo = (lo + Math.imul(al8, bl2)) | 0;
30685 mid = (mid + Math.imul(al8, bh2)) | 0;
30686 mid = (mid + Math.imul(ah8, bl2)) | 0;
30687 hi = (hi + Math.imul(ah8, bh2)) | 0;
30688 lo = (lo + Math.imul(al7, bl3)) | 0;
30689 mid = (mid + Math.imul(al7, bh3)) | 0;
30690 mid = (mid + Math.imul(ah7, bl3)) | 0;
30691 hi = (hi + Math.imul(ah7, bh3)) | 0;
30692 lo = (lo + Math.imul(al6, bl4)) | 0;
30693 mid = (mid + Math.imul(al6, bh4)) | 0;
30694 mid = (mid + Math.imul(ah6, bl4)) | 0;
30695 hi = (hi + Math.imul(ah6, bh4)) | 0;
30696 lo = (lo + Math.imul(al5, bl5)) | 0;
30697 mid = (mid + Math.imul(al5, bh5)) | 0;
30698 mid = (mid + Math.imul(ah5, bl5)) | 0;
30699 hi = (hi + Math.imul(ah5, bh5)) | 0;
30700 lo = (lo + Math.imul(al4, bl6)) | 0;
30701 mid = (mid + Math.imul(al4, bh6)) | 0;
30702 mid = (mid + Math.imul(ah4, bl6)) | 0;
30703 hi = (hi + Math.imul(ah4, bh6)) | 0;
30704 lo = (lo + Math.imul(al3, bl7)) | 0;
30705 mid = (mid + Math.imul(al3, bh7)) | 0;
30706 mid = (mid + Math.imul(ah3, bl7)) | 0;
30707 hi = (hi + Math.imul(ah3, bh7)) | 0;
30708 lo = (lo + Math.imul(al2, bl8)) | 0;
30709 mid = (mid + Math.imul(al2, bh8)) | 0;
30710 mid = (mid + Math.imul(ah2, bl8)) | 0;
30711 hi = (hi + Math.imul(ah2, bh8)) | 0;
30712 lo = (lo + Math.imul(al1, bl9)) | 0;
30713 mid = (mid + Math.imul(al1, bh9)) | 0;
30714 mid = (mid + Math.imul(ah1, bl9)) | 0;
30715 hi = (hi + Math.imul(ah1, bh9)) | 0;
30716 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30717 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
30718 w10 &= 0x3ffffff;
30719 /* k = 11 */
30720 lo = Math.imul(al9, bl2);
30721 mid = Math.imul(al9, bh2);
30722 mid = (mid + Math.imul(ah9, bl2)) | 0;
30723 hi = Math.imul(ah9, bh2);
30724 lo = (lo + Math.imul(al8, bl3)) | 0;
30725 mid = (mid + Math.imul(al8, bh3)) | 0;
30726 mid = (mid + Math.imul(ah8, bl3)) | 0;
30727 hi = (hi + Math.imul(ah8, bh3)) | 0;
30728 lo = (lo + Math.imul(al7, bl4)) | 0;
30729 mid = (mid + Math.imul(al7, bh4)) | 0;
30730 mid = (mid + Math.imul(ah7, bl4)) | 0;
30731 hi = (hi + Math.imul(ah7, bh4)) | 0;
30732 lo = (lo + Math.imul(al6, bl5)) | 0;
30733 mid = (mid + Math.imul(al6, bh5)) | 0;
30734 mid = (mid + Math.imul(ah6, bl5)) | 0;
30735 hi = (hi + Math.imul(ah6, bh5)) | 0;
30736 lo = (lo + Math.imul(al5, bl6)) | 0;
30737 mid = (mid + Math.imul(al5, bh6)) | 0;
30738 mid = (mid + Math.imul(ah5, bl6)) | 0;
30739 hi = (hi + Math.imul(ah5, bh6)) | 0;
30740 lo = (lo + Math.imul(al4, bl7)) | 0;
30741 mid = (mid + Math.imul(al4, bh7)) | 0;
30742 mid = (mid + Math.imul(ah4, bl7)) | 0;
30743 hi = (hi + Math.imul(ah4, bh7)) | 0;
30744 lo = (lo + Math.imul(al3, bl8)) | 0;
30745 mid = (mid + Math.imul(al3, bh8)) | 0;
30746 mid = (mid + Math.imul(ah3, bl8)) | 0;
30747 hi = (hi + Math.imul(ah3, bh8)) | 0;
30748 lo = (lo + Math.imul(al2, bl9)) | 0;
30749 mid = (mid + Math.imul(al2, bh9)) | 0;
30750 mid = (mid + Math.imul(ah2, bl9)) | 0;
30751 hi = (hi + Math.imul(ah2, bh9)) | 0;
30752 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30753 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
30754 w11 &= 0x3ffffff;
30755 /* k = 12 */
30756 lo = Math.imul(al9, bl3);
30757 mid = Math.imul(al9, bh3);
30758 mid = (mid + Math.imul(ah9, bl3)) | 0;
30759 hi = Math.imul(ah9, bh3);
30760 lo = (lo + Math.imul(al8, bl4)) | 0;
30761 mid = (mid + Math.imul(al8, bh4)) | 0;
30762 mid = (mid + Math.imul(ah8, bl4)) | 0;
30763 hi = (hi + Math.imul(ah8, bh4)) | 0;
30764 lo = (lo + Math.imul(al7, bl5)) | 0;
30765 mid = (mid + Math.imul(al7, bh5)) | 0;
30766 mid = (mid + Math.imul(ah7, bl5)) | 0;
30767 hi = (hi + Math.imul(ah7, bh5)) | 0;
30768 lo = (lo + Math.imul(al6, bl6)) | 0;
30769 mid = (mid + Math.imul(al6, bh6)) | 0;
30770 mid = (mid + Math.imul(ah6, bl6)) | 0;
30771 hi = (hi + Math.imul(ah6, bh6)) | 0;
30772 lo = (lo + Math.imul(al5, bl7)) | 0;
30773 mid = (mid + Math.imul(al5, bh7)) | 0;
30774 mid = (mid + Math.imul(ah5, bl7)) | 0;
30775 hi = (hi + Math.imul(ah5, bh7)) | 0;
30776 lo = (lo + Math.imul(al4, bl8)) | 0;
30777 mid = (mid + Math.imul(al4, bh8)) | 0;
30778 mid = (mid + Math.imul(ah4, bl8)) | 0;
30779 hi = (hi + Math.imul(ah4, bh8)) | 0;
30780 lo = (lo + Math.imul(al3, bl9)) | 0;
30781 mid = (mid + Math.imul(al3, bh9)) | 0;
30782 mid = (mid + Math.imul(ah3, bl9)) | 0;
30783 hi = (hi + Math.imul(ah3, bh9)) | 0;
30784 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30785 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
30786 w12 &= 0x3ffffff;
30787 /* k = 13 */
30788 lo = Math.imul(al9, bl4);
30789 mid = Math.imul(al9, bh4);
30790 mid = (mid + Math.imul(ah9, bl4)) | 0;
30791 hi = Math.imul(ah9, bh4);
30792 lo = (lo + Math.imul(al8, bl5)) | 0;
30793 mid = (mid + Math.imul(al8, bh5)) | 0;
30794 mid = (mid + Math.imul(ah8, bl5)) | 0;
30795 hi = (hi + Math.imul(ah8, bh5)) | 0;
30796 lo = (lo + Math.imul(al7, bl6)) | 0;
30797 mid = (mid + Math.imul(al7, bh6)) | 0;
30798 mid = (mid + Math.imul(ah7, bl6)) | 0;
30799 hi = (hi + Math.imul(ah7, bh6)) | 0;
30800 lo = (lo + Math.imul(al6, bl7)) | 0;
30801 mid = (mid + Math.imul(al6, bh7)) | 0;
30802 mid = (mid + Math.imul(ah6, bl7)) | 0;
30803 hi = (hi + Math.imul(ah6, bh7)) | 0;
30804 lo = (lo + Math.imul(al5, bl8)) | 0;
30805 mid = (mid + Math.imul(al5, bh8)) | 0;
30806 mid = (mid + Math.imul(ah5, bl8)) | 0;
30807 hi = (hi + Math.imul(ah5, bh8)) | 0;
30808 lo = (lo + Math.imul(al4, bl9)) | 0;
30809 mid = (mid + Math.imul(al4, bh9)) | 0;
30810 mid = (mid + Math.imul(ah4, bl9)) | 0;
30811 hi = (hi + Math.imul(ah4, bh9)) | 0;
30812 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30813 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
30814 w13 &= 0x3ffffff;
30815 /* k = 14 */
30816 lo = Math.imul(al9, bl5);
30817 mid = Math.imul(al9, bh5);
30818 mid = (mid + Math.imul(ah9, bl5)) | 0;
30819 hi = Math.imul(ah9, bh5);
30820 lo = (lo + Math.imul(al8, bl6)) | 0;
30821 mid = (mid + Math.imul(al8, bh6)) | 0;
30822 mid = (mid + Math.imul(ah8, bl6)) | 0;
30823 hi = (hi + Math.imul(ah8, bh6)) | 0;
30824 lo = (lo + Math.imul(al7, bl7)) | 0;
30825 mid = (mid + Math.imul(al7, bh7)) | 0;
30826 mid = (mid + Math.imul(ah7, bl7)) | 0;
30827 hi = (hi + Math.imul(ah7, bh7)) | 0;
30828 lo = (lo + Math.imul(al6, bl8)) | 0;
30829 mid = (mid + Math.imul(al6, bh8)) | 0;
30830 mid = (mid + Math.imul(ah6, bl8)) | 0;
30831 hi = (hi + Math.imul(ah6, bh8)) | 0;
30832 lo = (lo + Math.imul(al5, bl9)) | 0;
30833 mid = (mid + Math.imul(al5, bh9)) | 0;
30834 mid = (mid + Math.imul(ah5, bl9)) | 0;
30835 hi = (hi + Math.imul(ah5, bh9)) | 0;
30836 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30837 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
30838 w14 &= 0x3ffffff;
30839 /* k = 15 */
30840 lo = Math.imul(al9, bl6);
30841 mid = Math.imul(al9, bh6);
30842 mid = (mid + Math.imul(ah9, bl6)) | 0;
30843 hi = Math.imul(ah9, bh6);
30844 lo = (lo + Math.imul(al8, bl7)) | 0;
30845 mid = (mid + Math.imul(al8, bh7)) | 0;
30846 mid = (mid + Math.imul(ah8, bl7)) | 0;
30847 hi = (hi + Math.imul(ah8, bh7)) | 0;
30848 lo = (lo + Math.imul(al7, bl8)) | 0;
30849 mid = (mid + Math.imul(al7, bh8)) | 0;
30850 mid = (mid + Math.imul(ah7, bl8)) | 0;
30851 hi = (hi + Math.imul(ah7, bh8)) | 0;
30852 lo = (lo + Math.imul(al6, bl9)) | 0;
30853 mid = (mid + Math.imul(al6, bh9)) | 0;
30854 mid = (mid + Math.imul(ah6, bl9)) | 0;
30855 hi = (hi + Math.imul(ah6, bh9)) | 0;
30856 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30857 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
30858 w15 &= 0x3ffffff;
30859 /* k = 16 */
30860 lo = Math.imul(al9, bl7);
30861 mid = Math.imul(al9, bh7);
30862 mid = (mid + Math.imul(ah9, bl7)) | 0;
30863 hi = Math.imul(ah9, bh7);
30864 lo = (lo + Math.imul(al8, bl8)) | 0;
30865 mid = (mid + Math.imul(al8, bh8)) | 0;
30866 mid = (mid + Math.imul(ah8, bl8)) | 0;
30867 hi = (hi + Math.imul(ah8, bh8)) | 0;
30868 lo = (lo + Math.imul(al7, bl9)) | 0;
30869 mid = (mid + Math.imul(al7, bh9)) | 0;
30870 mid = (mid + Math.imul(ah7, bl9)) | 0;
30871 hi = (hi + Math.imul(ah7, bh9)) | 0;
30872 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30873 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
30874 w16 &= 0x3ffffff;
30875 /* k = 17 */
30876 lo = Math.imul(al9, bl8);
30877 mid = Math.imul(al9, bh8);
30878 mid = (mid + Math.imul(ah9, bl8)) | 0;
30879 hi = Math.imul(ah9, bh8);
30880 lo = (lo + Math.imul(al8, bl9)) | 0;
30881 mid = (mid + Math.imul(al8, bh9)) | 0;
30882 mid = (mid + Math.imul(ah8, bl9)) | 0;
30883 hi = (hi + Math.imul(ah8, bh9)) | 0;
30884 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30885 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
30886 w17 &= 0x3ffffff;
30887 /* k = 18 */
30888 lo = Math.imul(al9, bl9);
30889 mid = Math.imul(al9, bh9);
30890 mid = (mid + Math.imul(ah9, bl9)) | 0;
30891 hi = Math.imul(ah9, bh9);
30892 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30893 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
30894 w18 &= 0x3ffffff;
30895 o[0] = w0;
30896 o[1] = w1;
30897 o[2] = w2;
30898 o[3] = w3;
30899 o[4] = w4;
30900 o[5] = w5;
30901 o[6] = w6;
30902 o[7] = w7;
30903 o[8] = w8;
30904 o[9] = w9;
30905 o[10] = w10;
30906 o[11] = w11;
30907 o[12] = w12;
30908 o[13] = w13;
30909 o[14] = w14;
30910 o[15] = w15;
30911 o[16] = w16;
30912 o[17] = w17;
30913 o[18] = w18;
30914 if (c !== 0) {
30915 o[19] = c;
30916 out.length++;
ab78acc6 30917 }
8b095871
IC
30918 return out;
30919 };
30920
30921 // Polyfill comb
30922 if (!Math.imul) {
30923 comb10MulTo = smallMulTo;
30924 }
30925
30926 function bigMulTo (self, num, out) {
30927 out.negative = num.negative ^ self.negative;
30928 out.length = self.length + num.length;
30929
30930 var carry = 0;
30931 var hncarry = 0;
30932 for (var k = 0; k < out.length - 1; k++) {
30933 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30934 // note that ncarry could be >= 0x3ffffff
30935 var ncarry = hncarry;
30936 hncarry = 0;
30937 var rword = carry & 0x3ffffff;
30938 var maxJ = Math.min(k, num.length - 1);
30939 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30940 var i = k - j;
30941 var a = self.words[i] | 0;
30942 var b = num.words[j] | 0;
30943 var r = a * b;
30944
30945 var lo = r & 0x3ffffff;
30946 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
30947 lo = (lo + rword) | 0;
30948 rword = lo & 0x3ffffff;
30949 ncarry = (ncarry + (lo >>> 26)) | 0;
30950
30951 hncarry += ncarry >>> 26;
30952 ncarry &= 0x3ffffff;
30953 }
30954 out.words[k] = rword;
30955 carry = ncarry;
30956 ncarry = hncarry;
30957 }
30958 if (carry !== 0) {
30959 out.words[k] = carry;
30960 } else {
30961 out.length--;
ab78acc6 30962 }
8b095871
IC
30963
30964 return out.strip();
ab78acc6 30965 }
8b095871
IC
30966
30967 function jumboMulTo (self, num, out) {
30968 var fftm = new FFTM();
30969 return fftm.mulp(self, num, out);
ab78acc6 30970 }
8b095871
IC
30971
30972 BN.prototype.mulTo = function mulTo (num, out) {
30973 var res;
30974 var len = this.length + num.length;
30975 if (this.length === 10 && num.length === 10) {
30976 res = comb10MulTo(this, num, out);
30977 } else if (len < 63) {
30978 res = smallMulTo(this, num, out);
30979 } else if (len < 1024) {
30980 res = bigMulTo(this, num, out);
ab78acc6 30981 } else {
8b095871 30982 res = jumboMulTo(this, num, out);
ab78acc6 30983 }
8b095871
IC
30984
30985 return res;
30986 };
30987
30988 // Cooley-Tukey algorithm for FFT
30989 // slightly revisited to rely on looping instead of recursion
30990
30991 function FFTM (x, y) {
30992 this.x = x;
30993 this.y = y;
ab78acc6 30994 }
8b095871
IC
30995
30996 FFTM.prototype.makeRBT = function makeRBT (N) {
30997 var t = new Array(N);
30998 var l = BN.prototype._countBits(N) - 1;
30999 for (var i = 0; i < N; i++) {
31000 t[i] = this.revBin(i, l, N);
31001 }
31002
31003 return t;
31004 };
31005
31006 // Returns binary-reversed representation of `x`
31007 FFTM.prototype.revBin = function revBin (x, l, N) {
31008 if (x === 0 || x === N - 1) return x;
31009
31010 var rb = 0;
31011 for (var i = 0; i < l; i++) {
31012 rb |= (x & 1) << (l - i - 1);
31013 x >>= 1;
31014 }
31015
31016 return rb;
31017 };
31018
31019 // Performs "tweedling" phase, therefore 'emulating'
31020 // behaviour of the recursive algorithm
31021 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
31022 for (var i = 0; i < N; i++) {
31023 rtws[i] = rws[rbt[i]];
31024 itws[i] = iws[rbt[i]];
31025 }
31026 };
31027
31028 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
31029 this.permute(rbt, rws, iws, rtws, itws, N);
31030
31031 for (var s = 1; s < N; s <<= 1) {
31032 var l = s << 1;
31033
31034 var rtwdf = Math.cos(2 * Math.PI / l);
31035 var itwdf = Math.sin(2 * Math.PI / l);
31036
31037 for (var p = 0; p < N; p += l) {
31038 var rtwdf_ = rtwdf;
31039 var itwdf_ = itwdf;
31040
31041 for (var j = 0; j < s; j++) {
31042 var re = rtws[p + j];
31043 var ie = itws[p + j];
31044
31045 var ro = rtws[p + j + s];
31046 var io = itws[p + j + s];
31047
31048 var rx = rtwdf_ * ro - itwdf_ * io;
31049
31050 io = rtwdf_ * io + itwdf_ * ro;
31051 ro = rx;
31052
31053 rtws[p + j] = re + ro;
31054 itws[p + j] = ie + io;
31055
31056 rtws[p + j + s] = re - ro;
31057 itws[p + j + s] = ie - io;
31058
31059 /* jshint maxdepth : false */
31060 if (j !== l) {
31061 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
31062
31063 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
31064 rtwdf_ = rx;
31065 }
31066 }
31067 }
ab78acc6 31068 }
8b095871
IC
31069 };
31070
31071 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
31072 var N = Math.max(m, n) | 1;
31073 var odd = N & 1;
31074 var i = 0;
31075 for (N = N / 2 | 0; N; N = N >>> 1) {
31076 i++;
ab78acc6 31077 }
ebd8d4e8 31078
8b095871
IC
31079 return 1 << i + 1 + odd;
31080 };
ebd8d4e8 31081
8b095871
IC
31082 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
31083 if (N <= 1) return;
ebd8d4e8 31084
8b095871
IC
31085 for (var i = 0; i < N / 2; i++) {
31086 var t = rws[i];
ebd8d4e8 31087
8b095871
IC
31088 rws[i] = rws[N - i - 1];
31089 rws[N - i - 1] = t;
ebd8d4e8 31090
8b095871 31091 t = iws[i];
ebd8d4e8 31092
8b095871
IC
31093 iws[i] = -iws[N - i - 1];
31094 iws[N - i - 1] = -t;
31095 }
31096 };
ebd8d4e8 31097
8b095871
IC
31098 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
31099 var carry = 0;
31100 for (var i = 0; i < N / 2; i++) {
31101 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
31102 Math.round(ws[2 * i] / N) +
31103 carry;
ebd8d4e8 31104
8b095871 31105 ws[i] = w & 0x3ffffff;
ebd8d4e8 31106
8b095871
IC
31107 if (w < 0x4000000) {
31108 carry = 0;
31109 } else {
31110 carry = w / 0x4000000 | 0;
31111 }
31112 }
ebd8d4e8 31113
8b095871
IC
31114 return ws;
31115 };
ebd8d4e8 31116
8b095871
IC
31117 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
31118 var carry = 0;
31119 for (var i = 0; i < len; i++) {
31120 carry = carry + (ws[i] | 0);
ebd8d4e8 31121
8b095871
IC
31122 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
31123 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
31124 }
ebd8d4e8 31125
8b095871
IC
31126 // Pad with zeroes
31127 for (i = 2 * len; i < N; ++i) {
31128 rws[i] = 0;
31129 }
ebd8d4e8 31130
8b095871
IC
31131 assert(carry === 0);
31132 assert((carry & ~0x1fff) === 0);
31133 };
ebd8d4e8 31134
8b095871
IC
31135 FFTM.prototype.stub = function stub (N) {
31136 var ph = new Array(N);
31137 for (var i = 0; i < N; i++) {
31138 ph[i] = 0;
31139 }
ebd8d4e8 31140
8b095871
IC
31141 return ph;
31142 };
ebd8d4e8 31143
8b095871
IC
31144 FFTM.prototype.mulp = function mulp (x, y, out) {
31145 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 31146
8b095871 31147 var rbt = this.makeRBT(N);
ebd8d4e8 31148
8b095871 31149 var _ = this.stub(N);
ebd8d4e8 31150
8b095871
IC
31151 var rws = new Array(N);
31152 var rwst = new Array(N);
31153 var iwst = new Array(N);
ebd8d4e8 31154
8b095871
IC
31155 var nrws = new Array(N);
31156 var nrwst = new Array(N);
31157 var niwst = new Array(N);
ebd8d4e8 31158
8b095871
IC
31159 var rmws = out.words;
31160 rmws.length = N;
ebd8d4e8 31161
8b095871
IC
31162 this.convert13b(x.words, x.length, rws, N);
31163 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 31164
8b095871
IC
31165 this.transform(rws, _, rwst, iwst, N, rbt);
31166 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 31167
8b095871
IC
31168 for (var i = 0; i < N; i++) {
31169 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
31170 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
31171 rwst[i] = rx;
31172 }
ebd8d4e8 31173
8b095871
IC
31174 this.conjugate(rwst, iwst, N);
31175 this.transform(rwst, iwst, rmws, _, N, rbt);
31176 this.conjugate(rmws, _, N);
31177 this.normalize13b(rmws, N);
ebd8d4e8 31178
8b095871
IC
31179 out.negative = x.negative ^ y.negative;
31180 out.length = x.length + y.length;
31181 return out.strip();
31182 };
ebd8d4e8 31183
8b095871
IC
31184 // Multiply `this` by `num`
31185 BN.prototype.mul = function mul (num) {
31186 var out = new BN(null);
31187 out.words = new Array(this.length + num.length);
31188 return this.mulTo(num, out);
31189 };
ab78acc6 31190
8b095871
IC
31191 // Multiply employing FFT
31192 BN.prototype.mulf = function mulf (num) {
31193 var out = new BN(null);
31194 out.words = new Array(this.length + num.length);
31195 return jumboMulTo(this, num, out);
31196 };
ebd8d4e8 31197
8b095871
IC
31198 // In-place Multiplication
31199 BN.prototype.imul = function imul (num) {
31200 return this.clone().mulTo(num, this);
31201 };
ab78acc6 31202
8b095871
IC
31203 BN.prototype.imuln = function imuln (num) {
31204 assert(typeof num === 'number');
31205 assert(num < 0x4000000);
ab78acc6 31206
8b095871
IC
31207 // Carry
31208 var carry = 0;
31209 for (var i = 0; i < this.length; i++) {
31210 var w = (this.words[i] | 0) * num;
31211 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
31212 carry >>= 26;
31213 carry += (w / 0x4000000) | 0;
31214 // NOTE: lo is 27bit maximum
31215 carry += lo >>> 26;
31216 this.words[i] = lo & 0x3ffffff;
31217 }
ab78acc6 31218
8b095871
IC
31219 if (carry !== 0) {
31220 this.words[i] = carry;
31221 this.length++;
31222 }
ab78acc6 31223
8b095871
IC
31224 return this;
31225 };
ab78acc6 31226
8b095871
IC
31227 BN.prototype.muln = function muln (num) {
31228 return this.clone().imuln(num);
31229 };
ebd8d4e8 31230
8b095871
IC
31231 // `this` * `this`
31232 BN.prototype.sqr = function sqr () {
31233 return this.mul(this);
31234 };
ebd8d4e8 31235
8b095871
IC
31236 // `this` * `this` in-place
31237 BN.prototype.isqr = function isqr () {
31238 return this.imul(this.clone());
31239 };
ab78acc6 31240
8b095871
IC
31241 // Math.pow(`this`, `num`)
31242 BN.prototype.pow = function pow (num) {
31243 var w = toBitArray(num);
31244 if (w.length === 0) return new BN(1);
ab78acc6 31245
8b095871
IC
31246 // Skip leading zeroes
31247 var res = this;
31248 for (var i = 0; i < w.length; i++, res = res.sqr()) {
31249 if (w[i] !== 0) break;
31250 }
ebd8d4e8 31251
8b095871
IC
31252 if (++i < w.length) {
31253 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
31254 if (w[i] === 0) continue;
ebd8d4e8 31255
8b095871
IC
31256 res = res.mul(q);
31257 }
ab78acc6
IC
31258 }
31259
8b095871
IC
31260 return res;
31261 };
ab78acc6 31262
8b095871
IC
31263 // Shift-left in-place
31264 BN.prototype.iushln = function iushln (bits) {
31265 assert(typeof bits === 'number' && bits >= 0);
31266 var r = bits % 26;
31267 var s = (bits - r) / 26;
31268 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
31269 var i;
31270
31271 if (r !== 0) {
31272 var carry = 0;
31273
31274 for (i = 0; i < this.length; i++) {
31275 var newCarry = this.words[i] & carryMask;
31276 var c = ((this.words[i] | 0) - newCarry) << r;
31277 this.words[i] = c | carry;
31278 carry = newCarry >>> (26 - r);
31279 }
31280
31281 if (carry) {
31282 this.words[i] = carry;
31283 this.length++;
31284 }
ab78acc6 31285 }
ebd8d4e8 31286
8b095871
IC
31287 if (s !== 0) {
31288 for (i = this.length - 1; i >= 0; i--) {
31289 this.words[i + s] = this.words[i];
31290 }
ebd8d4e8 31291
8b095871
IC
31292 for (i = 0; i < s; i++) {
31293 this.words[i] = 0;
31294 }
ebd8d4e8 31295
8b095871
IC
31296 this.length += s;
31297 }
ebd8d4e8 31298
8b095871
IC
31299 return this.strip();
31300 };
ebd8d4e8 31301
8b095871
IC
31302 BN.prototype.ishln = function ishln (bits) {
31303 // TODO(indutny): implement me
31304 assert(this.negative === 0);
31305 return this.iushln(bits);
31306 };
ebd8d4e8 31307
8b095871
IC
31308 // Shift-right in-place
31309 // NOTE: `hint` is a lowest bit before trailing zeroes
31310 // NOTE: if `extended` is present - it will be filled with destroyed bits
31311 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
31312 assert(typeof bits === 'number' && bits >= 0);
31313 var h;
31314 if (hint) {
31315 h = (hint - (hint % 26)) / 26;
31316 } else {
31317 h = 0;
31318 }
ebd8d4e8 31319
8b095871
IC
31320 var r = bits % 26;
31321 var s = Math.min((bits - r) / 26, this.length);
31322 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31323 var maskedWords = extended;
31324
31325 h -= s;
31326 h = Math.max(0, h);
31327
31328 // Extended mode, copy masked part
31329 if (maskedWords) {
31330 for (var i = 0; i < s; i++) {
31331 maskedWords.words[i] = this.words[i];
31332 }
31333 maskedWords.length = s;
ab78acc6 31334 }
ebd8d4e8 31335
8b095871
IC
31336 if (s === 0) {
31337 // No-op, we should not move anything at all
31338 } else if (this.length > s) {
31339 this.length -= s;
31340 for (i = 0; i < this.length; i++) {
31341 this.words[i] = this.words[i + s];
31342 }
31343 } else {
31344 this.words[0] = 0;
31345 this.length = 1;
31346 }
ab78acc6 31347
8b095871
IC
31348 var carry = 0;
31349 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
31350 var word = this.words[i] | 0;
31351 this.words[i] = (carry << (26 - r)) | (word >>> r);
31352 carry = word & mask;
ab78acc6 31353 }
ebd8d4e8 31354
8b095871
IC
31355 // Push carried bits as a mask
31356 if (maskedWords && carry !== 0) {
31357 maskedWords.words[maskedWords.length++] = carry;
31358 }
31359
31360 if (this.length === 0) {
31361 this.words[0] = 0;
31362 this.length = 1;
31363 }
31364
31365 return this.strip();
31366 };
31367
31368 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
31369 // TODO(indutny): implement me
31370 assert(this.negative === 0);
31371 return this.iushrn(bits, hint, extended);
31372 };
31373
31374 // Shift-left
31375 BN.prototype.shln = function shln (bits) {
31376 return this.clone().ishln(bits);
31377 };
31378
31379 BN.prototype.ushln = function ushln (bits) {
31380 return this.clone().iushln(bits);
31381 };
31382
31383 // Shift-right
31384 BN.prototype.shrn = function shrn (bits) {
31385 return this.clone().ishrn(bits);
31386 };
ebd8d4e8 31387
8b095871
IC
31388 BN.prototype.ushrn = function ushrn (bits) {
31389 return this.clone().iushrn(bits);
31390 };
ebd8d4e8 31391
8b095871
IC
31392 // Test if n bit is set
31393 BN.prototype.testn = function testn (bit) {
31394 assert(typeof bit === 'number' && bit >= 0);
31395 var r = bit % 26;
31396 var s = (bit - r) / 26;
31397 var q = 1 << r;
ebd8d4e8 31398
8b095871
IC
31399 // Fast case: bit is much higher than all existing words
31400 if (this.length <= s) return false;
ab78acc6 31401
8b095871
IC
31402 // Check bit and return
31403 var w = this.words[s];
ab78acc6 31404
8b095871
IC
31405 return !!(w & q);
31406 };
ab78acc6 31407
8b095871
IC
31408 // Return only lowers bits of number (in-place)
31409 BN.prototype.imaskn = function imaskn (bits) {
31410 assert(typeof bits === 'number' && bits >= 0);
31411 var r = bits % 26;
31412 var s = (bits - r) / 26;
ab78acc6 31413
8b095871 31414 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 31415
8b095871
IC
31416 if (this.length <= s) {
31417 return this;
31418 }
ab78acc6 31419
8b095871
IC
31420 if (r !== 0) {
31421 s++;
31422 }
31423 this.length = Math.min(s, this.length);
ab78acc6 31424
8b095871
IC
31425 if (r !== 0) {
31426 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31427 this.words[this.length - 1] &= mask;
31428 }
ab78acc6 31429
8b095871
IC
31430 return this.strip();
31431 };
ab78acc6 31432
8b095871
IC
31433 // Return only lowers bits of number
31434 BN.prototype.maskn = function maskn (bits) {
31435 return this.clone().imaskn(bits);
31436 };
ebd8d4e8 31437
8b095871
IC
31438 // Add plain number `num` to `this`
31439 BN.prototype.iaddn = function iaddn (num) {
31440 assert(typeof num === 'number');
31441 assert(num < 0x4000000);
31442 if (num < 0) return this.isubn(-num);
31443
31444 // Possible sign change
31445 if (this.negative !== 0) {
31446 if (this.length === 1 && (this.words[0] | 0) < num) {
31447 this.words[0] = num - (this.words[0] | 0);
31448 this.negative = 0;
31449 return this;
31450 }
ebd8d4e8 31451
8b095871
IC
31452 this.negative = 0;
31453 this.isubn(num);
31454 this.negative = 1;
31455 return this;
31456 }
ebd8d4e8 31457
8b095871
IC
31458 // Add without checks
31459 return this._iaddn(num);
31460 };
ebd8d4e8 31461
8b095871
IC
31462 BN.prototype._iaddn = function _iaddn (num) {
31463 this.words[0] += num;
ebd8d4e8 31464
8b095871
IC
31465 // Carry
31466 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
31467 this.words[i] -= 0x4000000;
31468 if (i === this.length - 1) {
31469 this.words[i + 1] = 1;
31470 } else {
31471 this.words[i + 1]++;
31472 }
31473 }
31474 this.length = Math.max(this.length, i + 1);
ebd8d4e8 31475
8b095871
IC
31476 return this;
31477 };
ebd8d4e8 31478
8b095871
IC
31479 // Subtract plain number `num` from `this`
31480 BN.prototype.isubn = function isubn (num) {
31481 assert(typeof num === 'number');
31482 assert(num < 0x4000000);
31483 if (num < 0) return this.iaddn(-num);
ebd8d4e8 31484
8b095871
IC
31485 if (this.negative !== 0) {
31486 this.negative = 0;
31487 this.iaddn(num);
31488 this.negative = 1;
31489 return this;
31490 }
ebd8d4e8 31491
8b095871 31492 this.words[0] -= num;
ab78acc6 31493
8b095871
IC
31494 if (this.length === 1 && this.words[0] < 0) {
31495 this.words[0] = -this.words[0];
31496 this.negative = 1;
31497 } else {
31498 // Carry
31499 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
31500 this.words[i] += 0x4000000;
31501 this.words[i + 1] -= 1;
31502 }
31503 }
ebd8d4e8 31504
8b095871
IC
31505 return this.strip();
31506 };
ab78acc6 31507
8b095871
IC
31508 BN.prototype.addn = function addn (num) {
31509 return this.clone().iaddn(num);
31510 };
ab78acc6 31511
8b095871
IC
31512 BN.prototype.subn = function subn (num) {
31513 return this.clone().isubn(num);
31514 };
ab78acc6 31515
8b095871
IC
31516 BN.prototype.iabs = function iabs () {
31517 this.negative = 0;
ab78acc6 31518
8b095871
IC
31519 return this;
31520 };
ab78acc6 31521
8b095871
IC
31522 BN.prototype.abs = function abs () {
31523 return this.clone().iabs();
31524 };
ab78acc6 31525
8b095871
IC
31526 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
31527 var len = num.length + shift;
31528 var i;
ab78acc6 31529
8b095871 31530 this._expand(len);
ab78acc6 31531
8b095871
IC
31532 var w;
31533 var carry = 0;
31534 for (i = 0; i < num.length; i++) {
31535 w = (this.words[i + shift] | 0) + carry;
31536 var right = (num.words[i] | 0) * mul;
31537 w -= right & 0x3ffffff;
31538 carry = (w >> 26) - ((right / 0x4000000) | 0);
31539 this.words[i + shift] = w & 0x3ffffff;
31540 }
31541 for (; i < this.length - shift; i++) {
31542 w = (this.words[i + shift] | 0) + carry;
31543 carry = w >> 26;
31544 this.words[i + shift] = w & 0x3ffffff;
31545 }
ebd8d4e8 31546
8b095871 31547 if (carry === 0) return this.strip();
ab78acc6 31548
8b095871
IC
31549 // Subtraction overflow
31550 assert(carry === -1);
31551 carry = 0;
31552 for (i = 0; i < this.length; i++) {
31553 w = -(this.words[i] | 0) + carry;
31554 carry = w >> 26;
31555 this.words[i] = w & 0x3ffffff;
31556 }
31557 this.negative = 1;
ab78acc6 31558
8b095871
IC
31559 return this.strip();
31560 };
ab78acc6 31561
8b095871
IC
31562 BN.prototype._wordDiv = function _wordDiv (num, mode) {
31563 var shift = this.length - num.length;
ebd8d4e8 31564
8b095871
IC
31565 var a = this.clone();
31566 var b = num;
ab78acc6 31567
8b095871
IC
31568 // Normalize
31569 var bhi = b.words[b.length - 1] | 0;
31570 var bhiBits = this._countBits(bhi);
31571 shift = 26 - bhiBits;
31572 if (shift !== 0) {
31573 b = b.ushln(shift);
31574 a.iushln(shift);
31575 bhi = b.words[b.length - 1] | 0;
31576 }
ebd8d4e8 31577
8b095871
IC
31578 // Initialize quotient
31579 var m = a.length - b.length;
31580 var q;
ab78acc6 31581
8b095871
IC
31582 if (mode !== 'mod') {
31583 q = new BN(null);
31584 q.length = m + 1;
31585 q.words = new Array(q.length);
31586 for (var i = 0; i < q.length; i++) {
31587 q.words[i] = 0;
31588 }
31589 }
ebd8d4e8 31590
8b095871
IC
31591 var diff = a.clone()._ishlnsubmul(b, 1, m);
31592 if (diff.negative === 0) {
31593 a = diff;
31594 if (q) {
31595 q.words[m] = 1;
31596 }
31597 }
ebd8d4e8 31598
8b095871
IC
31599 for (var j = m - 1; j >= 0; j--) {
31600 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
31601 (a.words[b.length + j - 1] | 0);
ebd8d4e8 31602
8b095871
IC
31603 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
31604 // (0x7ffffff)
31605 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 31606
8b095871
IC
31607 a._ishlnsubmul(b, qj, j);
31608 while (a.negative !== 0) {
31609 qj--;
31610 a.negative = 0;
31611 a._ishlnsubmul(b, 1, j);
31612 if (!a.isZero()) {
31613 a.negative ^= 1;
31614 }
31615 }
31616 if (q) {
31617 q.words[j] = qj;
31618 }
31619 }
31620 if (q) {
31621 q.strip();
31622 }
31623 a.strip();
ebd8d4e8 31624
8b095871
IC
31625 // Denormalize
31626 if (mode !== 'div' && shift !== 0) {
31627 a.iushrn(shift);
31628 }
ebd8d4e8 31629
8b095871
IC
31630 return {
31631 div: q || null,
31632 mod: a
31633 };
31634 };
ebd8d4e8 31635
8b095871
IC
31636 // NOTE: 1) `mode` can be set to `mod` to request mod only,
31637 // to `div` to request div only, or be absent to
31638 // request both div & mod
31639 // 2) `positive` is true if unsigned mod is requested
31640 BN.prototype.divmod = function divmod (num, mode, positive) {
31641 assert(!num.isZero());
31642
31643 if (this.isZero()) {
31644 return {
31645 div: new BN(0),
31646 mod: new BN(0)
31647 };
31648 }
ebd8d4e8 31649
8b095871
IC
31650 var div, mod, res;
31651 if (this.negative !== 0 && num.negative === 0) {
31652 res = this.neg().divmod(num, mode);
ebd8d4e8 31653
8b095871
IC
31654 if (mode !== 'mod') {
31655 div = res.div.neg();
31656 }
ebd8d4e8 31657
8b095871
IC
31658 if (mode !== 'div') {
31659 mod = res.mod.neg();
31660 if (positive && mod.negative !== 0) {
31661 mod.iadd(num);
31662 }
31663 }
ebd8d4e8 31664
8b095871
IC
31665 return {
31666 div: div,
31667 mod: mod
31668 };
31669 }
ebd8d4e8 31670
8b095871
IC
31671 if (this.negative === 0 && num.negative !== 0) {
31672 res = this.divmod(num.neg(), mode);
ebd8d4e8 31673
8b095871
IC
31674 if (mode !== 'mod') {
31675 div = res.div.neg();
31676 }
ebd8d4e8 31677
8b095871
IC
31678 return {
31679 div: div,
31680 mod: res.mod
31681 };
31682 }
ebd8d4e8 31683
8b095871
IC
31684 if ((this.negative & num.negative) !== 0) {
31685 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 31686
8b095871
IC
31687 if (mode !== 'div') {
31688 mod = res.mod.neg();
31689 if (positive && mod.negative !== 0) {
31690 mod.isub(num);
31691 }
31692 }
ebd8d4e8 31693
8b095871
IC
31694 return {
31695 div: res.div,
31696 mod: mod
31697 };
31698 }
ebd8d4e8 31699
8b095871 31700 // Both numbers are positive at this point
ebd8d4e8 31701
8b095871
IC
31702 // Strip both numbers to approximate shift value
31703 if (num.length > this.length || this.cmp(num) < 0) {
31704 return {
31705 div: new BN(0),
31706 mod: this
31707 };
31708 }
ebd8d4e8 31709
8b095871
IC
31710 // Very short reduction
31711 if (num.length === 1) {
31712 if (mode === 'div') {
31713 return {
31714 div: this.divn(num.words[0]),
31715 mod: null
31716 };
31717 }
ebd8d4e8 31718
8b095871
IC
31719 if (mode === 'mod') {
31720 return {
31721 div: null,
31722 mod: new BN(this.modn(num.words[0]))
31723 };
31724 }
ebd8d4e8 31725
8b095871
IC
31726 return {
31727 div: this.divn(num.words[0]),
31728 mod: new BN(this.modn(num.words[0]))
31729 };
31730 }
ebd8d4e8 31731
8b095871
IC
31732 return this._wordDiv(num, mode);
31733 };
ab78acc6 31734
8b095871
IC
31735 // Find `this` / `num`
31736 BN.prototype.div = function div (num) {
31737 return this.divmod(num, 'div', false).div;
31738 };
ab78acc6 31739
8b095871
IC
31740 // Find `this` % `num`
31741 BN.prototype.mod = function mod (num) {
31742 return this.divmod(num, 'mod', false).mod;
31743 };
ab78acc6 31744
8b095871
IC
31745 BN.prototype.umod = function umod (num) {
31746 return this.divmod(num, 'mod', true).mod;
31747 };
ebd8d4e8 31748
8b095871
IC
31749 // Find Round(`this` / `num`)
31750 BN.prototype.divRound = function divRound (num) {
31751 var dm = this.divmod(num);
ebd8d4e8 31752
8b095871
IC
31753 // Fast case - exact division
31754 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 31755
8b095871 31756 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 31757
8b095871
IC
31758 var half = num.ushrn(1);
31759 var r2 = num.andln(1);
31760 var cmp = mod.cmp(half);
ebd8d4e8 31761
8b095871
IC
31762 // Round down
31763 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 31764
8b095871
IC
31765 // Round up
31766 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
31767 };
ab78acc6 31768
8b095871
IC
31769 BN.prototype.modn = function modn (num) {
31770 assert(num <= 0x3ffffff);
31771 var p = (1 << 26) % num;
ab78acc6 31772
8b095871
IC
31773 var acc = 0;
31774 for (var i = this.length - 1; i >= 0; i--) {
31775 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 31776 }
ab78acc6 31777
8b095871
IC
31778 return acc;
31779 };
31780
31781 // In-place division by number
31782 BN.prototype.idivn = function idivn (num) {
31783 assert(num <= 0x3ffffff);
31784
31785 var carry = 0;
31786 for (var i = this.length - 1; i >= 0; i--) {
31787 var w = (this.words[i] | 0) + carry * 0x4000000;
31788 this.words[i] = (w / num) | 0;
31789 carry = w % num;
ebd8d4e8 31790 }
ebd8d4e8 31791
8b095871
IC
31792 return this.strip();
31793 };
ab78acc6 31794
8b095871
IC
31795 BN.prototype.divn = function divn (num) {
31796 return this.clone().idivn(num);
31797 };
ebd8d4e8 31798
8b095871
IC
31799 BN.prototype.egcd = function egcd (p) {
31800 assert(p.negative === 0);
31801 assert(!p.isZero());
ebd8d4e8 31802
8b095871
IC
31803 var x = this;
31804 var y = p.clone();
31805
31806 if (x.negative !== 0) {
31807 x = x.umod(p);
31808 } else {
31809 x = x.clone();
31810 }
31811
31812 // A * x + B * y = x
31813 var A = new BN(1);
31814 var B = new BN(0);
31815
31816 // C * x + D * y = y
31817 var C = new BN(0);
31818 var D = new BN(1);
31819
31820 var g = 0;
31821
31822 while (x.isEven() && y.isEven()) {
31823 x.iushrn(1);
31824 y.iushrn(1);
31825 ++g;
31826 }
ebd8d4e8 31827
8b095871
IC
31828 var yp = y.clone();
31829 var xp = x.clone();
ebd8d4e8 31830
8b095871
IC
31831 while (!x.isZero()) {
31832 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31833 if (i > 0) {
31834 x.iushrn(i);
31835 while (i-- > 0) {
31836 if (A.isOdd() || B.isOdd()) {
31837 A.iadd(yp);
31838 B.isub(xp);
31839 }
ebd8d4e8 31840
8b095871
IC
31841 A.iushrn(1);
31842 B.iushrn(1);
31843 }
31844 }
ebd8d4e8 31845
8b095871
IC
31846 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31847 if (j > 0) {
31848 y.iushrn(j);
31849 while (j-- > 0) {
31850 if (C.isOdd() || D.isOdd()) {
31851 C.iadd(yp);
31852 D.isub(xp);
31853 }
ab78acc6 31854
8b095871
IC
31855 C.iushrn(1);
31856 D.iushrn(1);
31857 }
31858 }
ebd8d4e8 31859
8b095871
IC
31860 if (x.cmp(y) >= 0) {
31861 x.isub(y);
31862 A.isub(C);
31863 B.isub(D);
31864 } else {
31865 y.isub(x);
31866 C.isub(A);
31867 D.isub(B);
31868 }
31869 }
ebd8d4e8 31870
8b095871
IC
31871 return {
31872 a: C,
31873 b: D,
31874 gcd: y.iushln(g)
31875 };
31876 };
ebd8d4e8 31877
8b095871
IC
31878 // This is reduced incarnation of the binary EEA
31879 // above, designated to invert members of the
31880 // _prime_ fields F(p) at a maximal speed
31881 BN.prototype._invmp = function _invmp (p) {
31882 assert(p.negative === 0);
31883 assert(!p.isZero());
ebd8d4e8 31884
8b095871
IC
31885 var a = this;
31886 var b = p.clone();
ebd8d4e8 31887
8b095871
IC
31888 if (a.negative !== 0) {
31889 a = a.umod(p);
31890 } else {
31891 a = a.clone();
31892 }
ebd8d4e8 31893
8b095871
IC
31894 var x1 = new BN(1);
31895 var x2 = new BN(0);
ebd8d4e8 31896
8b095871 31897 var delta = b.clone();
ebd8d4e8 31898
8b095871
IC
31899 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
31900 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31901 if (i > 0) {
31902 a.iushrn(i);
31903 while (i-- > 0) {
31904 if (x1.isOdd()) {
31905 x1.iadd(delta);
31906 }
ebd8d4e8 31907
8b095871
IC
31908 x1.iushrn(1);
31909 }
31910 }
ab78acc6 31911
8b095871
IC
31912 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31913 if (j > 0) {
31914 b.iushrn(j);
31915 while (j-- > 0) {
31916 if (x2.isOdd()) {
31917 x2.iadd(delta);
31918 }
ebd8d4e8 31919
8b095871
IC
31920 x2.iushrn(1);
31921 }
31922 }
ebd8d4e8 31923
8b095871
IC
31924 if (a.cmp(b) >= 0) {
31925 a.isub(b);
31926 x1.isub(x2);
31927 } else {
31928 b.isub(a);
31929 x2.isub(x1);
31930 }
31931 }
ebd8d4e8 31932
8b095871
IC
31933 var res;
31934 if (a.cmpn(1) === 0) {
31935 res = x1;
31936 } else {
31937 res = x2;
31938 }
ebd8d4e8 31939
8b095871
IC
31940 if (res.cmpn(0) < 0) {
31941 res.iadd(p);
ab78acc6
IC
31942 }
31943
8b095871
IC
31944 return res;
31945 };
ebd8d4e8 31946
8b095871
IC
31947 BN.prototype.gcd = function gcd (num) {
31948 if (this.isZero()) return num.abs();
31949 if (num.isZero()) return this.abs();
31950
31951 var a = this.clone();
31952 var b = num.clone();
31953 a.negative = 0;
31954 b.negative = 0;
31955
31956 // Remove common factor of two
31957 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
31958 a.iushrn(1);
31959 b.iushrn(1);
ab78acc6 31960 }
ab78acc6 31961
8b095871
IC
31962 do {
31963 while (a.isEven()) {
31964 a.iushrn(1);
31965 }
31966 while (b.isEven()) {
31967 b.iushrn(1);
31968 }
ebd8d4e8 31969
8b095871
IC
31970 var r = a.cmp(b);
31971 if (r < 0) {
31972 // Swap `a` and `b` to make `a` always bigger than `b`
31973 var t = a;
31974 a = b;
31975 b = t;
31976 } else if (r === 0 || b.cmpn(1) === 0) {
31977 break;
31978 }
ab78acc6 31979
8b095871
IC
31980 a.isub(b);
31981 } while (true);
ab78acc6 31982
8b095871
IC
31983 return b.iushln(shift);
31984 };
ab78acc6 31985
8b095871
IC
31986 // Invert number in the field F(num)
31987 BN.prototype.invm = function invm (num) {
31988 return this.egcd(num).a.umod(num);
31989 };
ebd8d4e8 31990
8b095871
IC
31991 BN.prototype.isEven = function isEven () {
31992 return (this.words[0] & 1) === 0;
31993 };
ab78acc6 31994
8b095871
IC
31995 BN.prototype.isOdd = function isOdd () {
31996 return (this.words[0] & 1) === 1;
31997 };
ebd8d4e8 31998
8b095871
IC
31999 // And first word and num
32000 BN.prototype.andln = function andln (num) {
32001 return this.words[0] & num;
32002 };
ebd8d4e8 32003
8b095871
IC
32004 // Increment at the bit position in-line
32005 BN.prototype.bincn = function bincn (bit) {
32006 assert(typeof bit === 'number');
32007 var r = bit % 26;
32008 var s = (bit - r) / 26;
32009 var q = 1 << r;
32010
32011 // Fast case: bit is much higher than all existing words
32012 if (this.length <= s) {
32013 this._expand(s + 1);
32014 this.words[s] |= q;
32015 return this;
32016 }
ebd8d4e8 32017
8b095871
IC
32018 // Add bit and propagate, if needed
32019 var carry = q;
32020 for (var i = s; carry !== 0 && i < this.length; i++) {
32021 var w = this.words[i] | 0;
32022 w += carry;
32023 carry = w >>> 26;
32024 w &= 0x3ffffff;
32025 this.words[i] = w;
32026 }
32027 if (carry !== 0) {
32028 this.words[i] = carry;
32029 this.length++;
32030 }
32031 return this;
32032 };
ebd8d4e8 32033
8b095871
IC
32034 BN.prototype.isZero = function isZero () {
32035 return this.length === 1 && this.words[0] === 0;
32036 };
ebd8d4e8 32037
8b095871
IC
32038 BN.prototype.cmpn = function cmpn (num) {
32039 var negative = num < 0;
ebd8d4e8 32040
8b095871
IC
32041 if (this.negative !== 0 && !negative) return -1;
32042 if (this.negative === 0 && negative) return 1;
ab78acc6 32043
8b095871 32044 this.strip();
ab78acc6 32045
8b095871
IC
32046 var res;
32047 if (this.length > 1) {
32048 res = 1;
32049 } else {
32050 if (negative) {
32051 num = -num;
32052 }
ebd8d4e8 32053
8b095871 32054 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 32055
8b095871
IC
32056 var w = this.words[0] | 0;
32057 res = w === num ? 0 : w < num ? -1 : 1;
32058 }
32059 if (this.negative !== 0) return -res | 0;
32060 return res;
32061 };
ebd8d4e8 32062
8b095871
IC
32063 // Compare two numbers and return:
32064 // 1 - if `this` > `num`
32065 // 0 - if `this` == `num`
32066 // -1 - if `this` < `num`
32067 BN.prototype.cmp = function cmp (num) {
32068 if (this.negative !== 0 && num.negative === 0) return -1;
32069 if (this.negative === 0 && num.negative !== 0) return 1;
32070
32071 var res = this.ucmp(num);
32072 if (this.negative !== 0) return -res | 0;
32073 return res;
32074 };
ebd8d4e8 32075
8b095871
IC
32076 // Unsigned comparison
32077 BN.prototype.ucmp = function ucmp (num) {
32078 // At this point both numbers have the same sign
32079 if (this.length > num.length) return 1;
32080 if (this.length < num.length) return -1;
32081
32082 var res = 0;
32083 for (var i = this.length - 1; i >= 0; i--) {
32084 var a = this.words[i] | 0;
32085 var b = num.words[i] | 0;
32086
32087 if (a === b) continue;
32088 if (a < b) {
32089 res = -1;
32090 } else if (a > b) {
32091 res = 1;
32092 }
32093 break;
32094 }
32095 return res;
32096 };
ebd8d4e8 32097
8b095871
IC
32098 BN.prototype.gtn = function gtn (num) {
32099 return this.cmpn(num) === 1;
32100 };
ebd8d4e8 32101
8b095871
IC
32102 BN.prototype.gt = function gt (num) {
32103 return this.cmp(num) === 1;
32104 };
ebd8d4e8 32105
8b095871
IC
32106 BN.prototype.gten = function gten (num) {
32107 return this.cmpn(num) >= 0;
32108 };
ab78acc6 32109
8b095871
IC
32110 BN.prototype.gte = function gte (num) {
32111 return this.cmp(num) >= 0;
32112 };
ab78acc6 32113
8b095871
IC
32114 BN.prototype.ltn = function ltn (num) {
32115 return this.cmpn(num) === -1;
32116 };
ab78acc6 32117
8b095871
IC
32118 BN.prototype.lt = function lt (num) {
32119 return this.cmp(num) === -1;
32120 };
ebd8d4e8 32121
8b095871
IC
32122 BN.prototype.lten = function lten (num) {
32123 return this.cmpn(num) <= 0;
32124 };
ab78acc6 32125
8b095871
IC
32126 BN.prototype.lte = function lte (num) {
32127 return this.cmp(num) <= 0;
32128 };
ab78acc6 32129
8b095871
IC
32130 BN.prototype.eqn = function eqn (num) {
32131 return this.cmpn(num) === 0;
32132 };
ab78acc6 32133
8b095871
IC
32134 BN.prototype.eq = function eq (num) {
32135 return this.cmp(num) === 0;
32136 };
ebd8d4e8 32137
8b095871
IC
32138 //
32139 // A reduce context, could be using montgomery or something better, depending
32140 // on the `m` itself.
32141 //
32142 BN.red = function red (num) {
32143 return new Red(num);
32144 };
ab78acc6 32145
8b095871
IC
32146 BN.prototype.toRed = function toRed (ctx) {
32147 assert(!this.red, 'Already a number in reduction context');
32148 assert(this.negative === 0, 'red works only with positives');
32149 return ctx.convertTo(this)._forceRed(ctx);
32150 };
32151
32152 BN.prototype.fromRed = function fromRed () {
32153 assert(this.red, 'fromRed works only with numbers in reduction context');
32154 return this.red.convertFrom(this);
32155 };
32156
32157 BN.prototype._forceRed = function _forceRed (ctx) {
32158 this.red = ctx;
32159 return this;
32160 };
32161
32162 BN.prototype.forceRed = function forceRed (ctx) {
32163 assert(!this.red, 'Already a number in reduction context');
32164 return this._forceRed(ctx);
32165 };
32166
32167 BN.prototype.redAdd = function redAdd (num) {
32168 assert(this.red, 'redAdd works only with red numbers');
32169 return this.red.add(this, num);
32170 };
ebd8d4e8 32171
8b095871
IC
32172 BN.prototype.redIAdd = function redIAdd (num) {
32173 assert(this.red, 'redIAdd works only with red numbers');
32174 return this.red.iadd(this, num);
32175 };
ab78acc6 32176
8b095871
IC
32177 BN.prototype.redSub = function redSub (num) {
32178 assert(this.red, 'redSub works only with red numbers');
32179 return this.red.sub(this, num);
32180 };
ab78acc6 32181
8b095871
IC
32182 BN.prototype.redISub = function redISub (num) {
32183 assert(this.red, 'redISub works only with red numbers');
32184 return this.red.isub(this, num);
32185 };
ebd8d4e8 32186
8b095871
IC
32187 BN.prototype.redShl = function redShl (num) {
32188 assert(this.red, 'redShl works only with red numbers');
32189 return this.red.shl(this, num);
32190 };
ebd8d4e8 32191
8b095871
IC
32192 BN.prototype.redMul = function redMul (num) {
32193 assert(this.red, 'redMul works only with red numbers');
32194 this.red._verify2(this, num);
32195 return this.red.mul(this, num);
32196 };
ebd8d4e8 32197
8b095871
IC
32198 BN.prototype.redIMul = function redIMul (num) {
32199 assert(this.red, 'redMul works only with red numbers');
32200 this.red._verify2(this, num);
32201 return this.red.imul(this, num);
32202 };
ebd8d4e8 32203
8b095871
IC
32204 BN.prototype.redSqr = function redSqr () {
32205 assert(this.red, 'redSqr works only with red numbers');
32206 this.red._verify1(this);
32207 return this.red.sqr(this);
32208 };
ebd8d4e8 32209
8b095871
IC
32210 BN.prototype.redISqr = function redISqr () {
32211 assert(this.red, 'redISqr works only with red numbers');
32212 this.red._verify1(this);
32213 return this.red.isqr(this);
32214 };
ebd8d4e8 32215
8b095871
IC
32216 // Square root over p
32217 BN.prototype.redSqrt = function redSqrt () {
32218 assert(this.red, 'redSqrt works only with red numbers');
32219 this.red._verify1(this);
32220 return this.red.sqrt(this);
32221 };
ebd8d4e8 32222
8b095871
IC
32223 BN.prototype.redInvm = function redInvm () {
32224 assert(this.red, 'redInvm works only with red numbers');
32225 this.red._verify1(this);
32226 return this.red.invm(this);
32227 };
ebd8d4e8 32228
8b095871
IC
32229 // Return negative clone of `this` % `red modulo`
32230 BN.prototype.redNeg = function redNeg () {
32231 assert(this.red, 'redNeg works only with red numbers');
32232 this.red._verify1(this);
32233 return this.red.neg(this);
32234 };
ebd8d4e8 32235
8b095871
IC
32236 BN.prototype.redPow = function redPow (num) {
32237 assert(this.red && !num.red, 'redPow(normalNum)');
32238 this.red._verify1(this);
32239 return this.red.pow(this, num);
32240 };
ebd8d4e8 32241
8b095871
IC
32242 // Prime numbers with efficient reduction
32243 var primes = {
32244 k256: null,
32245 p224: null,
32246 p192: null,
32247 p25519: null
32248 };
ebd8d4e8 32249
8b095871
IC
32250 // Pseudo-Mersenne prime
32251 function MPrime (name, p) {
32252 // P = 2 ^ N - K
32253 this.name = name;
32254 this.p = new BN(p, 16);
32255 this.n = this.p.bitLength();
32256 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 32257
8b095871
IC
32258 this.tmp = this._tmp();
32259 }
ebd8d4e8 32260
8b095871
IC
32261 MPrime.prototype._tmp = function _tmp () {
32262 var tmp = new BN(null);
32263 tmp.words = new Array(Math.ceil(this.n / 13));
32264 return tmp;
32265 };
ebd8d4e8 32266
8b095871
IC
32267 MPrime.prototype.ireduce = function ireduce (num) {
32268 // Assumes that `num` is less than `P^2`
32269 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
32270 var r = num;
32271 var rlen;
ebd8d4e8 32272
8b095871
IC
32273 do {
32274 this.split(r, this.tmp);
32275 r = this.imulK(r);
32276 r = r.iadd(this.tmp);
32277 rlen = r.bitLength();
32278 } while (rlen > this.n);
32279
32280 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
32281 if (cmp === 0) {
32282 r.words[0] = 0;
32283 r.length = 1;
32284 } else if (cmp > 0) {
32285 r.isub(this.p);
32286 } else {
32287 r.strip();
32288 }
ebd8d4e8 32289
8b095871
IC
32290 return r;
32291 };
ebd8d4e8 32292
8b095871
IC
32293 MPrime.prototype.split = function split (input, out) {
32294 input.iushrn(this.n, 0, out);
32295 };
ebd8d4e8 32296
8b095871
IC
32297 MPrime.prototype.imulK = function imulK (num) {
32298 return num.imul(this.k);
32299 };
ebd8d4e8 32300
8b095871
IC
32301 function K256 () {
32302 MPrime.call(
32303 this,
32304 'k256',
32305 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
32306 }
32307 inherits(K256, MPrime);
ebd8d4e8 32308
8b095871
IC
32309 K256.prototype.split = function split (input, output) {
32310 // 256 = 9 * 26 + 22
32311 var mask = 0x3fffff;
ebd8d4e8 32312
8b095871
IC
32313 var outLen = Math.min(input.length, 9);
32314 for (var i = 0; i < outLen; i++) {
32315 output.words[i] = input.words[i];
32316 }
32317 output.length = outLen;
ebd8d4e8 32318
8b095871
IC
32319 if (input.length <= 9) {
32320 input.words[0] = 0;
32321 input.length = 1;
32322 return;
32323 }
ebd8d4e8 32324
8b095871
IC
32325 // Shift by 9 limbs
32326 var prev = input.words[9];
32327 output.words[output.length++] = prev & mask;
ebd8d4e8 32328
8b095871
IC
32329 for (i = 10; i < input.length; i++) {
32330 var next = input.words[i] | 0;
32331 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
32332 prev = next;
32333 }
32334 prev >>>= 22;
32335 input.words[i - 10] = prev;
32336 if (prev === 0 && input.length > 10) {
32337 input.length -= 10;
32338 } else {
32339 input.length -= 9;
32340 }
32341 };
ebd8d4e8 32342
8b095871
IC
32343 K256.prototype.imulK = function imulK (num) {
32344 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
32345 num.words[num.length] = 0;
32346 num.words[num.length + 1] = 0;
32347 num.length += 2;
32348
32349 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
32350 var lo = 0;
32351 for (var i = 0; i < num.length; i++) {
32352 var w = num.words[i] | 0;
32353 lo += w * 0x3d1;
32354 num.words[i] = lo & 0x3ffffff;
32355 lo = w * 0x40 + ((lo / 0x4000000) | 0);
32356 }
32357
32358 // Fast length reduction
32359 if (num.words[num.length - 1] === 0) {
32360 num.length--;
32361 if (num.words[num.length - 1] === 0) {
32362 num.length--;
32363 }
32364 }
32365 return num;
32366 };
ebd8d4e8 32367
8b095871
IC
32368 function P224 () {
32369 MPrime.call(
32370 this,
32371 'p224',
32372 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
32373 }
32374 inherits(P224, MPrime);
ebd8d4e8 32375
8b095871
IC
32376 function P192 () {
32377 MPrime.call(
32378 this,
32379 'p192',
32380 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
32381 }
32382 inherits(P192, MPrime);
ebd8d4e8 32383
8b095871
IC
32384 function P25519 () {
32385 // 2 ^ 255 - 19
32386 MPrime.call(
32387 this,
32388 '25519',
32389 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
32390 }
32391 inherits(P25519, MPrime);
ebd8d4e8 32392
8b095871
IC
32393 P25519.prototype.imulK = function imulK (num) {
32394 // K = 0x13
32395 var carry = 0;
32396 for (var i = 0; i < num.length; i++) {
32397 var hi = (num.words[i] | 0) * 0x13 + carry;
32398 var lo = hi & 0x3ffffff;
32399 hi >>>= 26;
ebd8d4e8 32400
8b095871
IC
32401 num.words[i] = lo;
32402 carry = hi;
32403 }
32404 if (carry !== 0) {
32405 num.words[num.length++] = carry;
32406 }
32407 return num;
32408 };
ebd8d4e8 32409
8b095871
IC
32410 // Exported mostly for testing purposes, use plain name instead
32411 BN._prime = function prime (name) {
32412 // Cached version of prime
32413 if (primes[name]) return primes[name];
32414
32415 var prime;
32416 if (name === 'k256') {
32417 prime = new K256();
32418 } else if (name === 'p224') {
32419 prime = new P224();
32420 } else if (name === 'p192') {
32421 prime = new P192();
32422 } else if (name === 'p25519') {
32423 prime = new P25519();
32424 } else {
32425 throw new Error('Unknown prime ' + name);
32426 }
32427 primes[name] = prime;
ab78acc6 32428
8b095871
IC
32429 return prime;
32430 };
ab78acc6 32431
8b095871
IC
32432 //
32433 // Base reduction engine
32434 //
32435 function Red (m) {
32436 if (typeof m === 'string') {
32437 var prime = BN._prime(m);
32438 this.m = prime.p;
32439 this.prime = prime;
32440 } else {
32441 assert(m.gtn(1), 'modulus must be greater than 1');
32442 this.m = m;
32443 this.prime = null;
32444 }
32445 }
ab78acc6 32446
8b095871
IC
32447 Red.prototype._verify1 = function _verify1 (a) {
32448 assert(a.negative === 0, 'red works only with positives');
32449 assert(a.red, 'red works only with red numbers');
32450 };
ab78acc6 32451
8b095871
IC
32452 Red.prototype._verify2 = function _verify2 (a, b) {
32453 assert((a.negative | b.negative) === 0, 'red works only with positives');
32454 assert(a.red && a.red === b.red,
32455 'red works only with red numbers');
32456 };
ebd8d4e8 32457
8b095871
IC
32458 Red.prototype.imod = function imod (a) {
32459 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
32460 return a.umod(this.m)._forceRed(this);
32461 };
ebd8d4e8 32462
8b095871
IC
32463 Red.prototype.neg = function neg (a) {
32464 if (a.isZero()) {
32465 return a.clone();
32466 }
ebd8d4e8 32467
8b095871
IC
32468 return this.m.sub(a)._forceRed(this);
32469 };
ab78acc6 32470
8b095871
IC
32471 Red.prototype.add = function add (a, b) {
32472 this._verify2(a, b);
ab78acc6 32473
8b095871
IC
32474 var res = a.add(b);
32475 if (res.cmp(this.m) >= 0) {
32476 res.isub(this.m);
32477 }
32478 return res._forceRed(this);
32479 };
ab78acc6 32480
8b095871
IC
32481 Red.prototype.iadd = function iadd (a, b) {
32482 this._verify2(a, b);
ab78acc6 32483
8b095871
IC
32484 var res = a.iadd(b);
32485 if (res.cmp(this.m) >= 0) {
32486 res.isub(this.m);
32487 }
32488 return res;
32489 };
ab78acc6 32490
8b095871
IC
32491 Red.prototype.sub = function sub (a, b) {
32492 this._verify2(a, b);
ab78acc6 32493
8b095871
IC
32494 var res = a.sub(b);
32495 if (res.cmpn(0) < 0) {
32496 res.iadd(this.m);
32497 }
32498 return res._forceRed(this);
32499 };
ab78acc6 32500
8b095871
IC
32501 Red.prototype.isub = function isub (a, b) {
32502 this._verify2(a, b);
ebd8d4e8 32503
8b095871
IC
32504 var res = a.isub(b);
32505 if (res.cmpn(0) < 0) {
32506 res.iadd(this.m);
32507 }
32508 return res;
32509 };
ebd8d4e8 32510
8b095871
IC
32511 Red.prototype.shl = function shl (a, num) {
32512 this._verify1(a);
32513 return this.imod(a.ushln(num));
32514 };
ebd8d4e8 32515
8b095871
IC
32516 Red.prototype.imul = function imul (a, b) {
32517 this._verify2(a, b);
32518 return this.imod(a.imul(b));
32519 };
ebd8d4e8 32520
8b095871
IC
32521 Red.prototype.mul = function mul (a, b) {
32522 this._verify2(a, b);
32523 return this.imod(a.mul(b));
32524 };
ebd8d4e8 32525
8b095871
IC
32526 Red.prototype.isqr = function isqr (a) {
32527 return this.imul(a, a.clone());
32528 };
32529
32530 Red.prototype.sqr = function sqr (a) {
32531 return this.mul(a, a);
32532 };
ebd8d4e8 32533
8b095871
IC
32534 Red.prototype.sqrt = function sqrt (a) {
32535 if (a.isZero()) return a.clone();
ebd8d4e8 32536
8b095871
IC
32537 var mod3 = this.m.andln(3);
32538 assert(mod3 % 2 === 1);
ebd8d4e8 32539
8b095871
IC
32540 // Fast case
32541 if (mod3 === 3) {
32542 var pow = this.m.add(new BN(1)).iushrn(2);
32543 return this.pow(a, pow);
32544 }
ebd8d4e8 32545
8b095871
IC
32546 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
32547 //
32548 // Find Q and S, that Q * 2 ^ S = (P - 1)
32549 var q = this.m.subn(1);
32550 var s = 0;
32551 while (!q.isZero() && q.andln(1) === 0) {
32552 s++;
32553 q.iushrn(1);
32554 }
32555 assert(!q.isZero());
ebd8d4e8 32556
8b095871
IC
32557 var one = new BN(1).toRed(this);
32558 var nOne = one.redNeg();
ebd8d4e8 32559
8b095871
IC
32560 // Find quadratic non-residue
32561 // NOTE: Max is such because of generalized Riemann hypothesis.
32562 var lpow = this.m.subn(1).iushrn(1);
32563 var z = this.m.bitLength();
32564 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 32565
8b095871
IC
32566 while (this.pow(z, lpow).cmp(nOne) !== 0) {
32567 z.redIAdd(nOne);
32568 }
ebd8d4e8 32569
8b095871
IC
32570 var c = this.pow(z, q);
32571 var r = this.pow(a, q.addn(1).iushrn(1));
32572 var t = this.pow(a, q);
32573 var m = s;
32574 while (t.cmp(one) !== 0) {
32575 var tmp = t;
32576 for (var i = 0; tmp.cmp(one) !== 0; i++) {
32577 tmp = tmp.redSqr();
32578 }
32579 assert(i < m);
32580 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 32581
8b095871
IC
32582 r = r.redMul(b);
32583 c = b.redSqr();
32584 t = t.redMul(c);
32585 m = i;
32586 }
ebd8d4e8 32587
8b095871
IC
32588 return r;
32589 };
ebd8d4e8 32590
8b095871
IC
32591 Red.prototype.invm = function invm (a) {
32592 var inv = a._invmp(this.m);
32593 if (inv.negative !== 0) {
32594 inv.negative = 0;
32595 return this.imod(inv).redNeg();
32596 } else {
32597 return this.imod(inv);
32598 }
32599 };
ebd8d4e8 32600
8b095871
IC
32601 Red.prototype.pow = function pow (a, num) {
32602 if (num.isZero()) return new BN(1);
32603 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 32604
8b095871
IC
32605 var windowSize = 4;
32606 var wnd = new Array(1 << windowSize);
32607 wnd[0] = new BN(1).toRed(this);
32608 wnd[1] = a;
32609 for (var i = 2; i < wnd.length; i++) {
32610 wnd[i] = this.mul(wnd[i - 1], a);
32611 }
ebd8d4e8 32612
8b095871
IC
32613 var res = wnd[0];
32614 var current = 0;
32615 var currentLen = 0;
32616 var start = num.bitLength() % 26;
32617 if (start === 0) {
32618 start = 26;
32619 }
ebd8d4e8 32620
8b095871
IC
32621 for (i = num.length - 1; i >= 0; i--) {
32622 var word = num.words[i];
32623 for (var j = start - 1; j >= 0; j--) {
32624 var bit = (word >> j) & 1;
32625 if (res !== wnd[0]) {
32626 res = this.sqr(res);
32627 }
ebd8d4e8 32628
8b095871
IC
32629 if (bit === 0 && current === 0) {
32630 currentLen = 0;
32631 continue;
32632 }
ebd8d4e8 32633
8b095871
IC
32634 current <<= 1;
32635 current |= bit;
32636 currentLen++;
32637 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 32638
8b095871
IC
32639 res = this.mul(res, wnd[current]);
32640 currentLen = 0;
32641 current = 0;
32642 }
32643 start = 26;
32644 }
ebd8d4e8 32645
8b095871
IC
32646 return res;
32647 };
ebd8d4e8 32648
8b095871
IC
32649 Red.prototype.convertTo = function convertTo (num) {
32650 var r = num.umod(this.m);
ebd8d4e8 32651
8b095871
IC
32652 return r === num ? r.clone() : r;
32653 };
ebd8d4e8 32654
8b095871
IC
32655 Red.prototype.convertFrom = function convertFrom (num) {
32656 var res = num.clone();
32657 res.red = null;
32658 return res;
32659 };
ebd8d4e8 32660
8b095871
IC
32661 //
32662 // Montgomery method engine
32663 //
ebd8d4e8 32664
8b095871
IC
32665 BN.mont = function mont (num) {
32666 return new Mont(num);
32667 };
ebd8d4e8 32668
8b095871
IC
32669 function Mont (m) {
32670 Red.call(this, m);
ebd8d4e8 32671
8b095871
IC
32672 this.shift = this.m.bitLength();
32673 if (this.shift % 26 !== 0) {
32674 this.shift += 26 - (this.shift % 26);
32675 }
ebd8d4e8 32676
8b095871
IC
32677 this.r = new BN(1).iushln(this.shift);
32678 this.r2 = this.imod(this.r.sqr());
32679 this.rinv = this.r._invmp(this.m);
32680
32681 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
32682 this.minv = this.minv.umod(this.r);
32683 this.minv = this.r.sub(this.minv);
ebd8d4e8 32684 }
8b095871 32685 inherits(Mont, Red);
ebd8d4e8 32686
8b095871
IC
32687 Mont.prototype.convertTo = function convertTo (num) {
32688 return this.imod(num.ushln(this.shift));
32689 };
ab78acc6 32690
8b095871
IC
32691 Mont.prototype.convertFrom = function convertFrom (num) {
32692 var r = this.imod(num.mul(this.rinv));
32693 r.red = null;
32694 return r;
32695 };
ebd8d4e8 32696
8b095871
IC
32697 Mont.prototype.imul = function imul (a, b) {
32698 if (a.isZero() || b.isZero()) {
32699 a.words[0] = 0;
32700 a.length = 1;
32701 return a;
32702 }
ebd8d4e8 32703
8b095871
IC
32704 var t = a.imul(b);
32705 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32706 var u = t.isub(c).iushrn(this.shift);
32707 var res = u;
ab78acc6 32708
8b095871
IC
32709 if (u.cmp(this.m) >= 0) {
32710 res = u.isub(this.m);
32711 } else if (u.cmpn(0) < 0) {
32712 res = u.iadd(this.m);
32713 }
ab78acc6 32714
8b095871
IC
32715 return res._forceRed(this);
32716 };
ab78acc6 32717
8b095871
IC
32718 Mont.prototype.mul = function mul (a, b) {
32719 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 32720
8b095871
IC
32721 var t = a.mul(b);
32722 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32723 var u = t.isub(c).iushrn(this.shift);
32724 var res = u;
32725 if (u.cmp(this.m) >= 0) {
32726 res = u.isub(this.m);
32727 } else if (u.cmpn(0) < 0) {
32728 res = u.iadd(this.m);
32729 }
ab78acc6 32730
8b095871
IC
32731 return res._forceRed(this);
32732 };
ab78acc6 32733
8b095871
IC
32734 Mont.prototype.invm = function invm (a) {
32735 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
32736 var res = this.imod(a._invmp(this.m).mul(this.r2));
32737 return res._forceRed(this);
32738 };
32739})(typeof module === 'undefined' || module, this);
ab78acc6 32740
8b095871
IC
32741},{}],34:[function(require,module,exports){
32742var r;
ebd8d4e8 32743
8b095871
IC
32744module.exports = function rand(len) {
32745 if (!r)
32746 r = new Rand(null);
ebd8d4e8 32747
8b095871
IC
32748 return r.generate(len);
32749};
ab78acc6 32750
8b095871
IC
32751function Rand(rand) {
32752 this.rand = rand;
ab78acc6 32753}
8b095871 32754module.exports.Rand = Rand;
ab78acc6 32755
8b095871
IC
32756Rand.prototype.generate = function generate(len) {
32757 return this._rand(len);
32758};
ab78acc6 32759
8b095871
IC
32760if (typeof self === 'object') {
32761 if (self.crypto && self.crypto.getRandomValues) {
32762 // Modern browsers
32763 Rand.prototype._rand = function _rand(n) {
32764 var arr = new Uint8Array(n);
32765 self.crypto.getRandomValues(arr);
32766 return arr;
32767 };
32768 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
32769 // IE
32770 Rand.prototype._rand = function _rand(n) {
32771 var arr = new Uint8Array(n);
32772 self.msCrypto.getRandomValues(arr);
32773 return arr;
32774 };
32775 } else {
32776 // Old junk
32777 Rand.prototype._rand = function() {
32778 throw new Error('Not implemented yet');
32779 };
32780 }
32781} else {
32782 // Node.js or Web worker with no crypto support
32783 try {
32784 var crypto = require('crypto');
ab78acc6 32785
8b095871
IC
32786 Rand.prototype._rand = function _rand(n) {
32787 return crypto.randomBytes(n);
32788 };
32789 } catch (e) {
32790 // Emulate crypto API using randy
32791 Rand.prototype._rand = function _rand(n) {
32792 var res = new Uint8Array(n);
32793 for (var i = 0; i < res.length; i++)
32794 res[i] = this.rand.getByte();
32795 return res;
32796 };
32797 }
32798}
32799
32800},{"crypto":3}],35:[function(require,module,exports){
32801(function (Buffer){
32802var Transform = require('stream').Transform
32803var inherits = require('inherits')
32804var StringDecoder = require('string_decoder').StringDecoder
32805module.exports = CipherBase
32806inherits(CipherBase, Transform)
32807function CipherBase (hashMode) {
32808 Transform.call(this)
32809 this.hashMode = typeof hashMode === 'string'
32810 if (this.hashMode) {
32811 this[hashMode] = this._finalOrDigest
32812 } else {
32813 this.final = this._finalOrDigest
32814 }
32815 this._decoder = null
32816 this._encoding = null
32817}
32818CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
32819 if (typeof data === 'string') {
32820 data = new Buffer(data, inputEnc)
32821 }
32822 var outData = this._update(data)
32823 if (this.hashMode) {
32824 return this
32825 }
32826 if (outputEnc) {
32827 outData = this._toString(outData, outputEnc)
32828 }
32829 return outData
32830}
ab78acc6 32831
8b095871 32832CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 32833
8b095871
IC
32834CipherBase.prototype.getAuthTag = function () {
32835 throw new Error('trying to get auth tag in unsupported state')
32836}
ab78acc6 32837
8b095871
IC
32838CipherBase.prototype.setAuthTag = function () {
32839 throw new Error('trying to set auth tag in unsupported state')
32840}
ab78acc6 32841
8b095871
IC
32842CipherBase.prototype.setAAD = function () {
32843 throw new Error('trying to set aad in unsupported state')
32844}
ab78acc6 32845
8b095871
IC
32846CipherBase.prototype._transform = function (data, _, next) {
32847 var err
32848 try {
32849 if (this.hashMode) {
32850 this._update(data)
32851 } else {
32852 this.push(this._update(data))
32853 }
32854 } catch (e) {
32855 err = e
32856 } finally {
32857 next(err)
32858 }
32859}
32860CipherBase.prototype._flush = function (done) {
32861 var err
32862 try {
32863 this.push(this._final())
32864 } catch (e) {
32865 err = e
32866 } finally {
32867 done(err)
32868 }
32869}
32870CipherBase.prototype._finalOrDigest = function (outputEnc) {
32871 var outData = this._final() || new Buffer('')
32872 if (outputEnc) {
32873 outData = this._toString(outData, outputEnc, true)
32874 }
32875 return outData
32876}
ebd8d4e8 32877
8b095871
IC
32878CipherBase.prototype._toString = function (value, enc, fin) {
32879 if (!this._decoder) {
32880 this._decoder = new StringDecoder(enc)
32881 this._encoding = enc
32882 }
32883 if (this._encoding !== enc) {
32884 throw new Error('can\'t switch encodings')
32885 }
32886 var out = this._decoder.write(value)
32887 if (fin) {
32888 out += this._decoder.end()
ab78acc6 32889 }
8b095871
IC
32890 return out
32891}
ab78acc6 32892
8b095871
IC
32893}).call(this,require("buffer").Buffer)
32894},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
32895(function (Buffer){
32896'use strict';
32897var inherits = require('inherits')
32898var md5 = require('./md5')
32899var rmd160 = require('ripemd160')
32900var sha = require('sha.js')
ebd8d4e8 32901
8b095871 32902var Base = require('cipher-base')
ebd8d4e8 32903
8b095871
IC
32904function HashNoConstructor(hash) {
32905 Base.call(this, 'digest')
ebd8d4e8 32906
8b095871
IC
32907 this._hash = hash
32908 this.buffers = []
32909}
ebd8d4e8 32910
8b095871 32911inherits(HashNoConstructor, Base)
ebd8d4e8 32912
8b095871
IC
32913HashNoConstructor.prototype._update = function (data) {
32914 this.buffers.push(data)
32915}
ebd8d4e8 32916
8b095871
IC
32917HashNoConstructor.prototype._final = function () {
32918 var buf = Buffer.concat(this.buffers)
32919 var r = this._hash(buf)
32920 this.buffers = null
ebd8d4e8 32921
8b095871
IC
32922 return r
32923}
ab78acc6 32924
8b095871
IC
32925function Hash(hash) {
32926 Base.call(this, 'digest')
ab78acc6 32927
8b095871
IC
32928 this._hash = hash
32929}
ab78acc6 32930
8b095871 32931inherits(Hash, Base)
ab78acc6 32932
8b095871
IC
32933Hash.prototype._update = function (data) {
32934 this._hash.update(data)
32935}
ab78acc6 32936
8b095871
IC
32937Hash.prototype._final = function () {
32938 return this._hash.digest()
32939}
ab78acc6 32940
8b095871
IC
32941module.exports = function createHash (alg) {
32942 alg = alg.toLowerCase()
32943 if ('md5' === alg) return new HashNoConstructor(md5)
32944 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
32945
32946 return new Hash(sha(alg))
ab78acc6
IC
32947}
32948
8b095871
IC
32949}).call(this,require("buffer").Buffer)
32950},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
32951(function (Buffer){
32952'use strict';
32953var intSize = 4;
32954var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
32955var chrsz = 8;
ab78acc6 32956
8b095871
IC
32957function toArray(buf, bigEndian) {
32958 if ((buf.length % intSize) !== 0) {
32959 var len = buf.length + (intSize - (buf.length % intSize));
32960 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
32961 }
32962
8b095871
IC
32963 var arr = [];
32964 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
32965 for (var i = 0; i < buf.length; i += intSize) {
32966 arr.push(fn.call(buf, i));
32967 }
32968 return arr;
ab78acc6
IC
32969}
32970
8b095871
IC
32971function toBuffer(arr, size, bigEndian) {
32972 var buf = new Buffer(size);
32973 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
32974 for (var i = 0; i < arr.length; i++) {
32975 fn.call(buf, arr[i], i * 4, true);
32976 }
32977 return buf;
32978}
ab78acc6 32979
8b095871
IC
32980function hash(buf, fn, hashSize, bigEndian) {
32981 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
32982 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
32983 return toBuffer(arr, hashSize, bigEndian);
32984}
32985exports.hash = hash;
ab78acc6 32986}).call(this,require("buffer").Buffer)
8b095871 32987},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 32988'use strict';
8b095871
IC
32989/*
32990 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
32991 * Digest Algorithm, as defined in RFC 1321.
32992 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
32993 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
32994 * Distributed under the BSD License
32995 * See http://pajhome.org.uk/crypt/md5 for more info.
32996 */
ebd8d4e8 32997
8b095871 32998var helpers = require('./helpers');
ebd8d4e8 32999
8b095871
IC
33000/*
33001 * Calculate the MD5 of an array of little-endian words, and a bit length
33002 */
33003function core_md5(x, len)
33004{
33005 /* append padding */
33006 x[len >> 5] |= 0x80 << ((len) % 32);
33007 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 33008
8b095871
IC
33009 var a = 1732584193;
33010 var b = -271733879;
33011 var c = -1732584194;
33012 var d = 271733878;
ebd8d4e8 33013
8b095871
IC
33014 for(var i = 0; i < x.length; i += 16)
33015 {
33016 var olda = a;
33017 var oldb = b;
33018 var oldc = c;
33019 var oldd = d;
ebd8d4e8 33020
8b095871
IC
33021 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
33022 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
33023 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
33024 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
33025 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
33026 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
33027 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
33028 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
33029 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
33030 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
33031 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
33032 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
33033 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
33034 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
33035 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
33036 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 33037
8b095871
IC
33038 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
33039 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
33040 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
33041 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
33042 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
33043 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
33044 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
33045 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
33046 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
33047 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
33048 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
33049 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
33050 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
33051 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
33052 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
33053 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 33054
8b095871
IC
33055 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
33056 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
33057 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
33058 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
33059 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
33060 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
33061 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
33062 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
33063 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
33064 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
33065 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
33066 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
33067 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
33068 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
33069 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
33070 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 33071
8b095871
IC
33072 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
33073 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
33074 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
33075 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
33076 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
33077 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
33078 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
33079 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
33080 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
33081 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
33082 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
33083 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
33084 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
33085 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
33086 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
33087 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 33088
8b095871
IC
33089 a = safe_add(a, olda);
33090 b = safe_add(b, oldb);
33091 c = safe_add(c, oldc);
33092 d = safe_add(d, oldd);
ab78acc6 33093 }
8b095871 33094 return Array(a, b, c, d);
ebd8d4e8 33095
ab78acc6 33096}
ebd8d4e8 33097
8b095871
IC
33098/*
33099 * These functions implement the four basic operations the algorithm uses.
33100 */
33101function md5_cmn(q, a, b, x, s, t)
33102{
33103 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 33104}
8b095871
IC
33105function md5_ff(a, b, c, d, x, s, t)
33106{
33107 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 33108}
8b095871
IC
33109function md5_gg(a, b, c, d, x, s, t)
33110{
33111 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 33112}
8b095871
IC
33113function md5_hh(a, b, c, d, x, s, t)
33114{
33115 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
33116}
33117function md5_ii(a, b, c, d, x, s, t)
33118{
33119 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 33120}
ebd8d4e8 33121
8b095871
IC
33122/*
33123 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
33124 * to work around bugs in some JS interpreters.
33125 */
33126function safe_add(x, y)
33127{
33128 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
33129 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
33130 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 33131}
ebd8d4e8 33132
8b095871
IC
33133/*
33134 * Bitwise rotate a 32-bit number to the left.
33135 */
33136function bit_rol(num, cnt)
33137{
33138 return (num << cnt) | (num >>> (32 - cnt));
33139}
ebd8d4e8 33140
8b095871
IC
33141module.exports = function md5(buf) {
33142 return helpers.hash(buf, core_md5, 16);
33143};
33144},{"./helpers":37}],39:[function(require,module,exports){
33145'use strict';
ebd8d4e8 33146
8b095871 33147var elliptic = exports;
ebd8d4e8 33148
8b095871
IC
33149elliptic.version = require('../package.json').version;
33150elliptic.utils = require('./elliptic/utils');
33151elliptic.rand = require('brorand');
33152elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
33153elliptic.curve = require('./elliptic/curve');
33154elliptic.curves = require('./elliptic/curves');
ebd8d4e8 33155
8b095871
IC
33156// Protocols
33157elliptic.ec = require('./elliptic/ec');
33158elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 33159
8b095871
IC
33160},{"../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){
33161'use strict';
ebd8d4e8 33162
8b095871
IC
33163var BN = require('bn.js');
33164var elliptic = require('../../elliptic');
33165var utils = elliptic.utils;
33166var getNAF = utils.getNAF;
33167var getJSF = utils.getJSF;
33168var assert = utils.assert;
33169
33170function BaseCurve(type, conf) {
33171 this.type = type;
33172 this.p = new BN(conf.p, 16);
33173
33174 // Use Montgomery, when there is no fast reduction for the prime
33175 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
33176
33177 // Useful for many curves
33178 this.zero = new BN(0).toRed(this.red);
33179 this.one = new BN(1).toRed(this.red);
33180 this.two = new BN(2).toRed(this.red);
33181
33182 // Curve configuration, optional
33183 this.n = conf.n && new BN(conf.n, 16);
33184 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
33185
33186 // Temporary arrays
33187 this._wnafT1 = new Array(4);
33188 this._wnafT2 = new Array(4);
33189 this._wnafT3 = new Array(4);
33190 this._wnafT4 = new Array(4);
33191
33192 // Generalized Greg Maxwell's trick
33193 var adjustCount = this.n && this.p.div(this.n);
33194 if (!adjustCount || adjustCount.cmpn(100) > 0) {
33195 this.redN = null;
33196 } else {
33197 this._maxwellTrick = true;
33198 this.redN = this.n.toRed(this.red);
ebd8d4e8 33199 }
ebd8d4e8 33200}
8b095871 33201module.exports = BaseCurve;
ebd8d4e8 33202
8b095871
IC
33203BaseCurve.prototype.point = function point() {
33204 throw new Error('Not implemented');
33205};
ebd8d4e8 33206
8b095871
IC
33207BaseCurve.prototype.validate = function validate() {
33208 throw new Error('Not implemented');
33209};
ebd8d4e8 33210
8b095871
IC
33211BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
33212 assert(p.precomputed);
33213 var doubles = p._getDoubles();
ebd8d4e8 33214
8b095871
IC
33215 var naf = getNAF(k, 1);
33216 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
33217 I /= 3;
ebd8d4e8 33218
8b095871
IC
33219 // Translate into more windowed form
33220 var repr = [];
33221 for (var j = 0; j < naf.length; j += doubles.step) {
33222 var nafW = 0;
33223 for (var k = j + doubles.step - 1; k >= j; k--)
33224 nafW = (nafW << 1) + naf[k];
33225 repr.push(nafW);
33226 }
ebd8d4e8 33227
8b095871
IC
33228 var a = this.jpoint(null, null, null);
33229 var b = this.jpoint(null, null, null);
33230 for (var i = I; i > 0; i--) {
33231 for (var j = 0; j < repr.length; j++) {
33232 var nafW = repr[j];
33233 if (nafW === i)
33234 b = b.mixedAdd(doubles.points[j]);
33235 else if (nafW === -i)
33236 b = b.mixedAdd(doubles.points[j].neg());
33237 }
33238 a = a.add(b);
33239 }
33240 return a.toP();
33241};
ebd8d4e8 33242
8b095871
IC
33243BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
33244 var w = 4;
ebd8d4e8 33245
8b095871
IC
33246 // Precompute window
33247 var nafPoints = p._getNAFPoints(w);
33248 w = nafPoints.wnd;
33249 var wnd = nafPoints.points;
ebd8d4e8 33250
8b095871
IC
33251 // Get NAF form
33252 var naf = getNAF(k, w);
ebd8d4e8 33253
8b095871
IC
33254 // Add `this`*(N+1) for every w-NAF index
33255 var acc = this.jpoint(null, null, null);
33256 for (var i = naf.length - 1; i >= 0; i--) {
33257 // Count zeroes
33258 for (var k = 0; i >= 0 && naf[i] === 0; i--)
33259 k++;
33260 if (i >= 0)
33261 k++;
33262 acc = acc.dblp(k);
ebd8d4e8 33263
8b095871
IC
33264 if (i < 0)
33265 break;
33266 var z = naf[i];
33267 assert(z !== 0);
33268 if (p.type === 'affine') {
33269 // J +- P
33270 if (z > 0)
33271 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
33272 else
33273 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
33274 } else {
33275 // J +- J
33276 if (z > 0)
33277 acc = acc.add(wnd[(z - 1) >> 1]);
33278 else
33279 acc = acc.add(wnd[(-z - 1) >> 1].neg());
33280 }
ebd8d4e8 33281 }
8b095871
IC
33282 return p.type === 'affine' ? acc.toP() : acc;
33283};
ebd8d4e8 33284
8b095871
IC
33285BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
33286 points,
33287 coeffs,
33288 len,
33289 jacobianResult) {
33290 var wndWidth = this._wnafT1;
33291 var wnd = this._wnafT2;
33292 var naf = this._wnafT3;
33293
33294 // Fill all arrays
33295 var max = 0;
33296 for (var i = 0; i < len; i++) {
33297 var p = points[i];
33298 var nafPoints = p._getNAFPoints(defW);
33299 wndWidth[i] = nafPoints.wnd;
33300 wnd[i] = nafPoints.points;
33301 }
33302
33303 // Comb small window NAFs
33304 for (var i = len - 1; i >= 1; i -= 2) {
33305 var a = i - 1;
33306 var b = i;
33307 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
33308 naf[a] = getNAF(coeffs[a], wndWidth[a]);
33309 naf[b] = getNAF(coeffs[b], wndWidth[b]);
33310 max = Math.max(naf[a].length, max);
33311 max = Math.max(naf[b].length, max);
33312 continue;
33313 }
ebd8d4e8 33314
8b095871
IC
33315 var comb = [
33316 points[a], /* 1 */
33317 null, /* 3 */
33318 null, /* 5 */
33319 points[b] /* 7 */
33320 ];
33321
33322 // Try to avoid Projective points, if possible
33323 if (points[a].y.cmp(points[b].y) === 0) {
33324 comb[1] = points[a].add(points[b]);
33325 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33326 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
33327 comb[1] = points[a].toJ().mixedAdd(points[b]);
33328 comb[2] = points[a].add(points[b].neg());
33329 } else {
33330 comb[1] = points[a].toJ().mixedAdd(points[b]);
33331 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33332 }
ebd8d4e8 33333
8b095871
IC
33334 var index = [
33335 -3, /* -1 -1 */
33336 -1, /* -1 0 */
33337 -5, /* -1 1 */
33338 -7, /* 0 -1 */
33339 0, /* 0 0 */
33340 7, /* 0 1 */
33341 5, /* 1 -1 */
33342 1, /* 1 0 */
33343 3 /* 1 1 */
33344 ];
ebd8d4e8 33345
8b095871
IC
33346 var jsf = getJSF(coeffs[a], coeffs[b]);
33347 max = Math.max(jsf[0].length, max);
33348 naf[a] = new Array(max);
33349 naf[b] = new Array(max);
33350 for (var j = 0; j < max; j++) {
33351 var ja = jsf[0][j] | 0;
33352 var jb = jsf[1][j] | 0;
ebd8d4e8 33353
8b095871
IC
33354 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
33355 naf[b][j] = 0;
33356 wnd[a] = comb;
33357 }
33358 }
ebd8d4e8 33359
8b095871
IC
33360 var acc = this.jpoint(null, null, null);
33361 var tmp = this._wnafT4;
33362 for (var i = max; i >= 0; i--) {
33363 var k = 0;
ebd8d4e8 33364
8b095871
IC
33365 while (i >= 0) {
33366 var zero = true;
33367 for (var j = 0; j < len; j++) {
33368 tmp[j] = naf[j][i] | 0;
33369 if (tmp[j] !== 0)
33370 zero = false;
33371 }
33372 if (!zero)
33373 break;
33374 k++;
33375 i--;
33376 }
33377 if (i >= 0)
33378 k++;
33379 acc = acc.dblp(k);
33380 if (i < 0)
33381 break;
ebd8d4e8 33382
8b095871
IC
33383 for (var j = 0; j < len; j++) {
33384 var z = tmp[j];
33385 var p;
33386 if (z === 0)
33387 continue;
33388 else if (z > 0)
33389 p = wnd[j][(z - 1) >> 1];
33390 else if (z < 0)
33391 p = wnd[j][(-z - 1) >> 1].neg();
33392
33393 if (p.type === 'affine')
33394 acc = acc.mixedAdd(p);
33395 else
33396 acc = acc.add(p);
33397 }
33398 }
33399 // Zeroify references
33400 for (var i = 0; i < len; i++)
33401 wnd[i] = null;
ebd8d4e8 33402
8b095871
IC
33403 if (jacobianResult)
33404 return acc;
33405 else
33406 return acc.toP();
33407};
ebd8d4e8 33408
8b095871
IC
33409function BasePoint(curve, type) {
33410 this.curve = curve;
33411 this.type = type;
33412 this.precomputed = null;
33413}
33414BaseCurve.BasePoint = BasePoint;
ebd8d4e8 33415
8b095871
IC
33416BasePoint.prototype.eq = function eq(/*other*/) {
33417 throw new Error('Not implemented');
33418};
ebd8d4e8 33419
8b095871
IC
33420BasePoint.prototype.validate = function validate() {
33421 return this.curve.validate(this);
33422};
ebd8d4e8 33423
8b095871
IC
33424BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
33425 bytes = utils.toArray(bytes, enc);
ebd8d4e8 33426
8b095871 33427 var len = this.p.byteLength();
ebd8d4e8 33428
8b095871
IC
33429 // uncompressed, hybrid-odd, hybrid-even
33430 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
33431 bytes.length - 1 === 2 * len) {
33432 if (bytes[0] === 0x06)
33433 assert(bytes[bytes.length - 1] % 2 === 0);
33434 else if (bytes[0] === 0x07)
33435 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 33436
8b095871
IC
33437 var res = this.point(bytes.slice(1, 1 + len),
33438 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 33439
8b095871
IC
33440 return res;
33441 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
33442 bytes.length - 1 === len) {
33443 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 33444 }
8b095871
IC
33445 throw new Error('Unknown point format');
33446};
ebd8d4e8 33447
8b095871
IC
33448BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
33449 return this.encode(enc, true);
33450};
33451
33452BasePoint.prototype._encode = function _encode(compact) {
33453 var len = this.curve.p.byteLength();
33454 var x = this.getX().toArray('be', len);
33455
33456 if (compact)
33457 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
33458
33459 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
33460};
33461
33462BasePoint.prototype.encode = function encode(enc, compact) {
33463 return utils.encode(this._encode(compact), enc);
33464};
33465
33466BasePoint.prototype.precompute = function precompute(power) {
33467 if (this.precomputed)
33468 return this;
33469
33470 var precomputed = {
33471 doubles: null,
33472 naf: null,
33473 beta: null
33474 };
33475 precomputed.naf = this._getNAFPoints(8);
33476 precomputed.doubles = this._getDoubles(4, power);
33477 precomputed.beta = this._getBeta();
33478 this.precomputed = precomputed;
33479
33480 return this;
33481};
33482
33483BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
33484 if (!this.precomputed)
33485 return false;
33486
33487 var doubles = this.precomputed.doubles;
33488 if (!doubles)
33489 return false;
33490
33491 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
33492};
33493
33494BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
33495 if (this.precomputed && this.precomputed.doubles)
33496 return this.precomputed.doubles;
33497
33498 var doubles = [ this ];
33499 var acc = this;
33500 for (var i = 0; i < power; i += step) {
33501 for (var j = 0; j < step; j++)
33502 acc = acc.dbl();
33503 doubles.push(acc);
ebd8d4e8 33504 }
8b095871
IC
33505 return {
33506 step: step,
33507 points: doubles
33508 };
33509};
ebd8d4e8 33510
8b095871
IC
33511BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
33512 if (this.precomputed && this.precomputed.naf)
33513 return this.precomputed.naf;
ebd8d4e8 33514
8b095871
IC
33515 var res = [ this ];
33516 var max = (1 << wnd) - 1;
33517 var dbl = max === 1 ? null : this.dbl();
33518 for (var i = 1; i < max; i++)
33519 res[i] = res[i - 1].add(dbl);
33520 return {
33521 wnd: wnd,
33522 points: res
33523 };
33524};
ebd8d4e8 33525
8b095871
IC
33526BasePoint.prototype._getBeta = function _getBeta() {
33527 return null;
33528};
ebd8d4e8 33529
8b095871
IC
33530BasePoint.prototype.dblp = function dblp(k) {
33531 var r = this;
33532 for (var i = 0; i < k; i++)
33533 r = r.dbl();
33534 return r;
33535};
ebd8d4e8 33536
8b095871
IC
33537},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
33538'use strict';
ebd8d4e8 33539
8b095871
IC
33540var curve = require('../curve');
33541var elliptic = require('../../elliptic');
33542var BN = require('bn.js');
33543var inherits = require('inherits');
33544var Base = curve.base;
ebd8d4e8 33545
8b095871 33546var assert = elliptic.utils.assert;
ebd8d4e8 33547
8b095871
IC
33548function EdwardsCurve(conf) {
33549 // NOTE: Important as we are creating point in Base.call()
33550 this.twisted = (conf.a | 0) !== 1;
33551 this.mOneA = this.twisted && (conf.a | 0) === -1;
33552 this.extended = this.mOneA;
33553
33554 Base.call(this, 'edwards', conf);
33555
33556 this.a = new BN(conf.a, 16).umod(this.red.m);
33557 this.a = this.a.toRed(this.red);
33558 this.c = new BN(conf.c, 16).toRed(this.red);
33559 this.c2 = this.c.redSqr();
33560 this.d = new BN(conf.d, 16).toRed(this.red);
33561 this.dd = this.d.redAdd(this.d);
33562
33563 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
33564 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 33565}
8b095871
IC
33566inherits(EdwardsCurve, Base);
33567module.exports = EdwardsCurve;
ebd8d4e8 33568
8b095871
IC
33569EdwardsCurve.prototype._mulA = function _mulA(num) {
33570 if (this.mOneA)
33571 return num.redNeg();
33572 else
33573 return this.a.redMul(num);
33574};
ebd8d4e8 33575
8b095871
IC
33576EdwardsCurve.prototype._mulC = function _mulC(num) {
33577 if (this.oneC)
33578 return num;
33579 else
33580 return this.c.redMul(num);
33581};
ebd8d4e8 33582
8b095871
IC
33583// Just for compatibility with Short curve
33584EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
33585 return this.point(x, y, z, t);
33586};
ebd8d4e8 33587
8b095871
IC
33588EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
33589 x = new BN(x, 16);
33590 if (!x.red)
33591 x = x.toRed(this.red);
ebd8d4e8 33592
8b095871
IC
33593 var x2 = x.redSqr();
33594 var rhs = this.c2.redSub(this.a.redMul(x2));
33595 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
33596
33597 var y2 = rhs.redMul(lhs.redInvm());
33598 var y = y2.redSqrt();
33599 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
33600 throw new Error('invalid point');
33601
33602 var isOdd = y.fromRed().isOdd();
33603 if (odd && !isOdd || !odd && isOdd)
33604 y = y.redNeg();
33605
33606 return this.point(x, y);
33607};
33608
33609EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
33610 y = new BN(y, 16);
33611 if (!y.red)
33612 y = y.toRed(this.red);
33613
33614 // x^2 = (y^2 - 1) / (d y^2 + 1)
33615 var y2 = y.redSqr();
33616 var lhs = y2.redSub(this.one);
33617 var rhs = y2.redMul(this.d).redAdd(this.one);
33618 var x2 = lhs.redMul(rhs.redInvm());
33619
33620 if (x2.cmp(this.zero) === 0) {
33621 if (odd)
33622 throw new Error('invalid point');
33623 else
33624 return this.point(this.zero, y);
ebd8d4e8
IC
33625 }
33626
8b095871
IC
33627 var x = x2.redSqrt();
33628 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
33629 throw new Error('invalid point');
ebd8d4e8 33630
8b095871
IC
33631 if (x.isOdd() !== odd)
33632 x = x.redNeg();
ebd8d4e8 33633
8b095871
IC
33634 return this.point(x, y);
33635};
ebd8d4e8 33636
8b095871
IC
33637EdwardsCurve.prototype.validate = function validate(point) {
33638 if (point.isInfinity())
33639 return true;
ebd8d4e8 33640
8b095871
IC
33641 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
33642 point.normalize();
ebd8d4e8 33643
8b095871
IC
33644 var x2 = point.x.redSqr();
33645 var y2 = point.y.redSqr();
33646 var lhs = x2.redMul(this.a).redAdd(y2);
33647 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 33648
8b095871
IC
33649 return lhs.cmp(rhs) === 0;
33650};
ebd8d4e8 33651
8b095871
IC
33652function Point(curve, x, y, z, t) {
33653 Base.BasePoint.call(this, curve, 'projective');
33654 if (x === null && y === null && z === null) {
33655 this.x = this.curve.zero;
33656 this.y = this.curve.one;
33657 this.z = this.curve.one;
33658 this.t = this.curve.zero;
33659 this.zOne = true;
33660 } else {
33661 this.x = new BN(x, 16);
33662 this.y = new BN(y, 16);
33663 this.z = z ? new BN(z, 16) : this.curve.one;
33664 this.t = t && new BN(t, 16);
33665 if (!this.x.red)
33666 this.x = this.x.toRed(this.curve.red);
33667 if (!this.y.red)
33668 this.y = this.y.toRed(this.curve.red);
33669 if (!this.z.red)
33670 this.z = this.z.toRed(this.curve.red);
33671 if (this.t && !this.t.red)
33672 this.t = this.t.toRed(this.curve.red);
33673 this.zOne = this.z === this.curve.one;
33674
33675 // Use extended coordinates
33676 if (this.curve.extended && !this.t) {
33677 this.t = this.x.redMul(this.y);
33678 if (!this.zOne)
33679 this.t = this.t.redMul(this.z.redInvm());
33680 }
33681 }
33682}
33683inherits(Point, Base.BasePoint);
33684
33685EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
33686 return Point.fromJSON(this, obj);
33687};
33688
33689EdwardsCurve.prototype.point = function point(x, y, z, t) {
33690 return new Point(this, x, y, z, t);
33691};
33692
33693Point.fromJSON = function fromJSON(curve, obj) {
33694 return new Point(curve, obj[0], obj[1], obj[2]);
33695};
33696
33697Point.prototype.inspect = function inspect() {
33698 if (this.isInfinity())
33699 return '<EC Point Infinity>';
33700 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
33701 ' y: ' + this.y.fromRed().toString(16, 2) +
33702 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
33703};
33704
33705Point.prototype.isInfinity = function isInfinity() {
33706 // XXX This code assumes that zero is always zero in red
33707 return this.x.cmpn(0) === 0 &&
33708 this.y.cmp(this.z) === 0;
33709};
33710
33711Point.prototype._extDbl = function _extDbl() {
33712 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33713 // #doubling-dbl-2008-hwcd
33714 // 4M + 4S
33715
33716 // A = X1^2
33717 var a = this.x.redSqr();
33718 // B = Y1^2
33719 var b = this.y.redSqr();
33720 // C = 2 * Z1^2
33721 var c = this.z.redSqr();
33722 c = c.redIAdd(c);
33723 // D = a * A
33724 var d = this.curve._mulA(a);
33725 // E = (X1 + Y1)^2 - A - B
33726 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
33727 // G = D + B
33728 var g = d.redAdd(b);
33729 // F = G - C
33730 var f = g.redSub(c);
33731 // H = D - B
33732 var h = d.redSub(b);
33733 // X3 = E * F
33734 var nx = e.redMul(f);
33735 // Y3 = G * H
33736 var ny = g.redMul(h);
33737 // T3 = E * H
33738 var nt = e.redMul(h);
33739 // Z3 = F * G
33740 var nz = f.redMul(g);
33741 return this.curve.point(nx, ny, nz, nt);
33742};
33743
33744Point.prototype._projDbl = function _projDbl() {
33745 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33746 // #doubling-dbl-2008-bbjlp
33747 // #doubling-dbl-2007-bl
33748 // and others
33749 // Generally 3M + 4S or 2M + 4S
33750
33751 // B = (X1 + Y1)^2
33752 var b = this.x.redAdd(this.y).redSqr();
33753 // C = X1^2
33754 var c = this.x.redSqr();
33755 // D = Y1^2
33756 var d = this.y.redSqr();
33757
33758 var nx;
33759 var ny;
33760 var nz;
33761 if (this.curve.twisted) {
33762 // E = a * C
33763 var e = this.curve._mulA(c);
33764 // F = E + D
33765 var f = e.redAdd(d);
33766 if (this.zOne) {
33767 // X3 = (B - C - D) * (F - 2)
33768 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
33769 // Y3 = F * (E - D)
33770 ny = f.redMul(e.redSub(d));
33771 // Z3 = F^2 - 2 * F
33772 nz = f.redSqr().redSub(f).redSub(f);
33773 } else {
33774 // H = Z1^2
33775 var h = this.z.redSqr();
33776 // J = F - 2 * H
33777 var j = f.redSub(h).redISub(h);
33778 // X3 = (B-C-D)*J
33779 nx = b.redSub(c).redISub(d).redMul(j);
33780 // Y3 = F * (E - D)
33781 ny = f.redMul(e.redSub(d));
33782 // Z3 = F * J
33783 nz = f.redMul(j);
33784 }
33785 } else {
33786 // E = C + D
33787 var e = c.redAdd(d);
33788 // H = (c * Z1)^2
33789 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
33790 // J = E - 2 * H
33791 var j = e.redSub(h).redSub(h);
33792 // X3 = c * (B - E) * J
33793 nx = this.curve._mulC(b.redISub(e)).redMul(j);
33794 // Y3 = c * E * (C - D)
33795 ny = this.curve._mulC(e).redMul(c.redISub(d));
33796 // Z3 = E * J
33797 nz = e.redMul(j);
33798 }
33799 return this.curve.point(nx, ny, nz);
33800};
33801
33802Point.prototype.dbl = function dbl() {
33803 if (this.isInfinity())
33804 return this;
33805
33806 // Double in extended coordinates
33807 if (this.curve.extended)
33808 return this._extDbl();
33809 else
33810 return this._projDbl();
33811};
33812
33813Point.prototype._extAdd = function _extAdd(p) {
33814 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33815 // #addition-add-2008-hwcd-3
33816 // 8M
33817
33818 // A = (Y1 - X1) * (Y2 - X2)
33819 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
33820 // B = (Y1 + X1) * (Y2 + X2)
33821 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
33822 // C = T1 * k * T2
33823 var c = this.t.redMul(this.curve.dd).redMul(p.t);
33824 // D = Z1 * 2 * Z2
33825 var d = this.z.redMul(p.z.redAdd(p.z));
33826 // E = B - A
33827 var e = b.redSub(a);
33828 // F = D - C
33829 var f = d.redSub(c);
33830 // G = D + C
33831 var g = d.redAdd(c);
33832 // H = B + A
33833 var h = b.redAdd(a);
33834 // X3 = E * F
33835 var nx = e.redMul(f);
33836 // Y3 = G * H
33837 var ny = g.redMul(h);
33838 // T3 = E * H
33839 var nt = e.redMul(h);
33840 // Z3 = F * G
33841 var nz = f.redMul(g);
33842 return this.curve.point(nx, ny, nz, nt);
33843};
33844
33845Point.prototype._projAdd = function _projAdd(p) {
33846 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33847 // #addition-add-2008-bbjlp
33848 // #addition-add-2007-bl
33849 // 10M + 1S
33850
33851 // A = Z1 * Z2
33852 var a = this.z.redMul(p.z);
33853 // B = A^2
33854 var b = a.redSqr();
33855 // C = X1 * X2
33856 var c = this.x.redMul(p.x);
33857 // D = Y1 * Y2
33858 var d = this.y.redMul(p.y);
33859 // E = d * C * D
33860 var e = this.curve.d.redMul(c).redMul(d);
33861 // F = B - E
33862 var f = b.redSub(e);
33863 // G = B + E
33864 var g = b.redAdd(e);
33865 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
33866 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
33867 var nx = a.redMul(f).redMul(tmp);
33868 var ny;
33869 var nz;
33870 if (this.curve.twisted) {
33871 // Y3 = A * G * (D - a * C)
33872 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
33873 // Z3 = F * G
33874 nz = f.redMul(g);
33875 } else {
33876 // Y3 = A * G * (D - C)
33877 ny = a.redMul(g).redMul(d.redSub(c));
33878 // Z3 = c * F * G
33879 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 33880 }
8b095871
IC
33881 return this.curve.point(nx, ny, nz);
33882};
ebd8d4e8 33883
8b095871
IC
33884Point.prototype.add = function add(p) {
33885 if (this.isInfinity())
33886 return p;
33887 if (p.isInfinity())
33888 return this;
ebd8d4e8 33889
8b095871
IC
33890 if (this.curve.extended)
33891 return this._extAdd(p);
33892 else
33893 return this._projAdd(p);
33894};
ebd8d4e8 33895
8b095871
IC
33896Point.prototype.mul = function mul(k) {
33897 if (this._hasDoubles(k))
33898 return this.curve._fixedNafMul(this, k);
33899 else
33900 return this.curve._wnafMul(this, k);
33901};
ebd8d4e8 33902
8b095871
IC
33903Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
33904 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
33905};
ebd8d4e8 33906
8b095871
IC
33907Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
33908 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
33909};
ebd8d4e8 33910
8b095871
IC
33911Point.prototype.normalize = function normalize() {
33912 if (this.zOne)
33913 return this;
33914
33915 // Normalize coordinates
33916 var zi = this.z.redInvm();
33917 this.x = this.x.redMul(zi);
33918 this.y = this.y.redMul(zi);
33919 if (this.t)
33920 this.t = this.t.redMul(zi);
33921 this.z = this.curve.one;
33922 this.zOne = true;
33923 return this;
33924};
33925
33926Point.prototype.neg = function neg() {
33927 return this.curve.point(this.x.redNeg(),
33928 this.y,
33929 this.z,
33930 this.t && this.t.redNeg());
33931};
33932
33933Point.prototype.getX = function getX() {
33934 this.normalize();
33935 return this.x.fromRed();
33936};
33937
33938Point.prototype.getY = function getY() {
33939 this.normalize();
33940 return this.y.fromRed();
33941};
33942
33943Point.prototype.eq = function eq(other) {
33944 return this === other ||
33945 this.getX().cmp(other.getX()) === 0 &&
33946 this.getY().cmp(other.getY()) === 0;
33947};
33948
33949Point.prototype.eqXToP = function eqXToP(x) {
33950 var rx = x.toRed(this.curve.red).redMul(this.z);
33951 if (this.x.cmp(rx) === 0)
33952 return true;
ebd8d4e8 33953
8b095871
IC
33954 var xc = x.clone();
33955 var t = this.curve.redN.redMul(this.z);
33956 for (;;) {
33957 xc.iadd(this.curve.n);
33958 if (xc.cmp(this.curve.p) >= 0)
33959 return false;
ebd8d4e8 33960
8b095871
IC
33961 rx.redIAdd(t);
33962 if (this.x.cmp(rx) === 0)
33963 return true;
ebd8d4e8 33964 }
8b095871
IC
33965 return false;
33966};
ebd8d4e8 33967
8b095871
IC
33968// Compatibility with BaseCurve
33969Point.prototype.toP = Point.prototype.normalize;
33970Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 33971
8b095871
IC
33972},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
33973'use strict';
ebd8d4e8 33974
8b095871 33975var curve = exports;
ebd8d4e8 33976
8b095871
IC
33977curve.base = require('./base');
33978curve.short = require('./short');
33979curve.mont = require('./mont');
33980curve.edwards = require('./edwards');
ebd8d4e8 33981
8b095871
IC
33982},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
33983'use strict';
ebd8d4e8 33984
8b095871
IC
33985var curve = require('../curve');
33986var BN = require('bn.js');
33987var inherits = require('inherits');
33988var Base = curve.base;
ebd8d4e8 33989
8b095871
IC
33990var elliptic = require('../../elliptic');
33991var utils = elliptic.utils;
ebd8d4e8 33992
8b095871
IC
33993function MontCurve(conf) {
33994 Base.call(this, 'mont', conf);
ebd8d4e8 33995
8b095871
IC
33996 this.a = new BN(conf.a, 16).toRed(this.red);
33997 this.b = new BN(conf.b, 16).toRed(this.red);
33998 this.i4 = new BN(4).toRed(this.red).redInvm();
33999 this.two = new BN(2).toRed(this.red);
34000 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 34001}
8b095871
IC
34002inherits(MontCurve, Base);
34003module.exports = MontCurve;
ebd8d4e8 34004
8b095871
IC
34005MontCurve.prototype.validate = function validate(point) {
34006 var x = point.normalize().x;
34007 var x2 = x.redSqr();
34008 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
34009 var y = rhs.redSqrt();
ebd8d4e8 34010
8b095871
IC
34011 return y.redSqr().cmp(rhs) === 0;
34012};
ebd8d4e8 34013
8b095871
IC
34014function Point(curve, x, z) {
34015 Base.BasePoint.call(this, curve, 'projective');
34016 if (x === null && z === null) {
34017 this.x = this.curve.one;
34018 this.z = this.curve.zero;
34019 } else {
34020 this.x = new BN(x, 16);
34021 this.z = new BN(z, 16);
34022 if (!this.x.red)
34023 this.x = this.x.toRed(this.curve.red);
34024 if (!this.z.red)
34025 this.z = this.z.toRed(this.curve.red);
34026 }
34027}
34028inherits(Point, Base.BasePoint);
ebd8d4e8 34029
8b095871
IC
34030MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
34031 return this.point(utils.toArray(bytes, enc), 1);
34032};
ebd8d4e8 34033
8b095871
IC
34034MontCurve.prototype.point = function point(x, z) {
34035 return new Point(this, x, z);
34036};
ebd8d4e8 34037
8b095871
IC
34038MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
34039 return Point.fromJSON(this, obj);
34040};
ebd8d4e8 34041
8b095871
IC
34042Point.prototype.precompute = function precompute() {
34043 // No-op
34044};
ebd8d4e8 34045
8b095871
IC
34046Point.prototype._encode = function _encode() {
34047 return this.getX().toArray('be', this.curve.p.byteLength());
34048};
ebd8d4e8 34049
8b095871
IC
34050Point.fromJSON = function fromJSON(curve, obj) {
34051 return new Point(curve, obj[0], obj[1] || curve.one);
34052};
ebd8d4e8 34053
8b095871
IC
34054Point.prototype.inspect = function inspect() {
34055 if (this.isInfinity())
34056 return '<EC Point Infinity>';
34057 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34058 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
34059};
ebd8d4e8 34060
8b095871
IC
34061Point.prototype.isInfinity = function isInfinity() {
34062 // XXX This code assumes that zero is always zero in red
34063 return this.z.cmpn(0) === 0;
34064};
ebd8d4e8 34065
8b095871
IC
34066Point.prototype.dbl = function dbl() {
34067 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
34068 // 2M + 2S + 4A
34069
34070 // A = X1 + Z1
34071 var a = this.x.redAdd(this.z);
34072 // AA = A^2
34073 var aa = a.redSqr();
34074 // B = X1 - Z1
34075 var b = this.x.redSub(this.z);
34076 // BB = B^2
34077 var bb = b.redSqr();
34078 // C = AA - BB
34079 var c = aa.redSub(bb);
34080 // X3 = AA * BB
34081 var nx = aa.redMul(bb);
34082 // Z3 = C * (BB + A24 * C)
34083 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
34084 return this.curve.point(nx, nz);
34085};
ebd8d4e8 34086
8b095871
IC
34087Point.prototype.add = function add() {
34088 throw new Error('Not supported on Montgomery curve');
34089};
ebd8d4e8 34090
8b095871
IC
34091Point.prototype.diffAdd = function diffAdd(p, diff) {
34092 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
34093 // 4M + 2S + 6A
34094
34095 // A = X2 + Z2
34096 var a = this.x.redAdd(this.z);
34097 // B = X2 - Z2
34098 var b = this.x.redSub(this.z);
34099 // C = X3 + Z3
34100 var c = p.x.redAdd(p.z);
34101 // D = X3 - Z3
34102 var d = p.x.redSub(p.z);
34103 // DA = D * A
34104 var da = d.redMul(a);
34105 // CB = C * B
34106 var cb = c.redMul(b);
34107 // X5 = Z1 * (DA + CB)^2
34108 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
34109 // Z5 = X1 * (DA - CB)^2
34110 var nz = diff.x.redMul(da.redISub(cb).redSqr());
34111 return this.curve.point(nx, nz);
34112};
ebd8d4e8 34113
8b095871
IC
34114Point.prototype.mul = function mul(k) {
34115 var t = k.clone();
34116 var a = this; // (N / 2) * Q + Q
34117 var b = this.curve.point(null, null); // (N / 2) * Q
34118 var c = this; // Q
34119
34120 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
34121 bits.push(t.andln(1));
34122
34123 for (var i = bits.length - 1; i >= 0; i--) {
34124 if (bits[i] === 0) {
34125 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
34126 a = a.diffAdd(b, c);
34127 // N * Q = 2 * ((N / 2) * Q + Q))
34128 b = b.dbl();
34129 } else {
34130 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
34131 b = a.diffAdd(b, c);
34132 // N * Q + Q = 2 * ((N / 2) * Q + Q)
34133 a = a.dbl();
34134 }
ebd8d4e8 34135 }
8b095871
IC
34136 return b;
34137};
ebd8d4e8 34138
8b095871
IC
34139Point.prototype.mulAdd = function mulAdd() {
34140 throw new Error('Not supported on Montgomery curve');
34141};
ebd8d4e8 34142
8b095871
IC
34143Point.prototype.jumlAdd = function jumlAdd() {
34144 throw new Error('Not supported on Montgomery curve');
34145};
ebd8d4e8 34146
8b095871
IC
34147Point.prototype.eq = function eq(other) {
34148 return this.getX().cmp(other.getX()) === 0;
34149};
ebd8d4e8 34150
8b095871
IC
34151Point.prototype.normalize = function normalize() {
34152 this.x = this.x.redMul(this.z.redInvm());
34153 this.z = this.curve.one;
34154 return this;
34155};
ebd8d4e8 34156
8b095871
IC
34157Point.prototype.getX = function getX() {
34158 // Normalize coordinates
34159 this.normalize();
34160
34161 return this.x.fromRed();
34162};
34163
34164},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 34165'use strict';
ebd8d4e8 34166
8b095871
IC
34167var curve = require('../curve');
34168var elliptic = require('../../elliptic');
34169var BN = require('bn.js');
34170var inherits = require('inherits');
34171var Base = curve.base;
ab78acc6 34172
8b095871 34173var assert = elliptic.utils.assert;
ebd8d4e8 34174
8b095871
IC
34175function ShortCurve(conf) {
34176 Base.call(this, 'short', conf);
ebd8d4e8 34177
8b095871
IC
34178 this.a = new BN(conf.a, 16).toRed(this.red);
34179 this.b = new BN(conf.b, 16).toRed(this.red);
34180 this.tinv = this.two.redInvm();
ab78acc6 34181
8b095871
IC
34182 this.zeroA = this.a.fromRed().cmpn(0) === 0;
34183 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 34184
8b095871
IC
34185 // If the curve is endomorphic, precalculate beta and lambda
34186 this.endo = this._getEndomorphism(conf);
34187 this._endoWnafT1 = new Array(4);
34188 this._endoWnafT2 = new Array(4);
ebd8d4e8 34189}
8b095871
IC
34190inherits(ShortCurve, Base);
34191module.exports = ShortCurve;
ebd8d4e8 34192
8b095871
IC
34193ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
34194 // No efficient endomorphism
34195 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
34196 return;
ebd8d4e8 34197
8b095871
IC
34198 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
34199 var beta;
34200 var lambda;
34201 if (conf.beta) {
34202 beta = new BN(conf.beta, 16).toRed(this.red);
34203 } else {
34204 var betas = this._getEndoRoots(this.p);
34205 // Choose the smallest beta
34206 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
34207 beta = beta.toRed(this.red);
34208 }
34209 if (conf.lambda) {
34210 lambda = new BN(conf.lambda, 16);
34211 } else {
34212 // Choose the lambda that is matching selected beta
34213 var lambdas = this._getEndoRoots(this.n);
34214 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
34215 lambda = lambdas[0];
34216 } else {
34217 lambda = lambdas[1];
34218 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
34219 }
34220 }
ab78acc6 34221
8b095871
IC
34222 // Get basis vectors, used for balanced length-two representation
34223 var basis;
34224 if (conf.basis) {
34225 basis = conf.basis.map(function(vec) {
34226 return {
34227 a: new BN(vec.a, 16),
34228 b: new BN(vec.b, 16)
34229 };
34230 });
34231 } else {
34232 basis = this._getEndoBasis(lambda);
34233 }
ab78acc6 34234
8b095871
IC
34235 return {
34236 beta: beta,
34237 lambda: lambda,
34238 basis: basis
34239 };
34240};
ab78acc6 34241
8b095871
IC
34242ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
34243 // Find roots of for x^2 + x + 1 in F
34244 // Root = (-1 +- Sqrt(-3)) / 2
34245 //
34246 var red = num === this.p ? this.red : BN.mont(num);
34247 var tinv = new BN(2).toRed(red).redInvm();
34248 var ntinv = tinv.redNeg();
ab78acc6 34249
8b095871 34250 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 34251
8b095871
IC
34252 var l1 = ntinv.redAdd(s).fromRed();
34253 var l2 = ntinv.redSub(s).fromRed();
34254 return [ l1, l2 ];
34255};
ab78acc6 34256
8b095871
IC
34257ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
34258 // aprxSqrt >= sqrt(this.n)
34259 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
34260
34261 // 3.74
34262 // Run EGCD, until r(L + 1) < aprxSqrt
34263 var u = lambda;
34264 var v = this.n.clone();
34265 var x1 = new BN(1);
34266 var y1 = new BN(0);
34267 var x2 = new BN(0);
34268 var y2 = new BN(1);
34269
34270 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
34271 var a0;
34272 var b0;
34273 // First vector
34274 var a1;
34275 var b1;
34276 // Second vector
34277 var a2;
34278 var b2;
34279
34280 var prevR;
34281 var i = 0;
34282 var r;
34283 var x;
34284 while (u.cmpn(0) !== 0) {
34285 var q = v.div(u);
34286 r = v.sub(q.mul(u));
34287 x = x2.sub(q.mul(x1));
34288 var y = y2.sub(q.mul(y1));
34289
34290 if (!a1 && r.cmp(aprxSqrt) < 0) {
34291 a0 = prevR.neg();
34292 b0 = x1;
34293 a1 = r.neg();
34294 b1 = x;
34295 } else if (a1 && ++i === 2) {
34296 break;
ab78acc6 34297 }
8b095871 34298 prevR = r;
ab78acc6 34299
8b095871
IC
34300 v = u;
34301 u = r;
34302 x2 = x1;
34303 x1 = x;
34304 y2 = y1;
34305 y1 = y;
ebd8d4e8 34306 }
8b095871
IC
34307 a2 = r.neg();
34308 b2 = x;
ab78acc6 34309
8b095871
IC
34310 var len1 = a1.sqr().add(b1.sqr());
34311 var len2 = a2.sqr().add(b2.sqr());
34312 if (len2.cmp(len1) >= 0) {
34313 a2 = a0;
34314 b2 = b0;
34315 }
ebd8d4e8 34316
8b095871
IC
34317 // Normalize signs
34318 if (a1.negative) {
34319 a1 = a1.neg();
34320 b1 = b1.neg();
34321 }
34322 if (a2.negative) {
34323 a2 = a2.neg();
34324 b2 = b2.neg();
34325 }
ebd8d4e8 34326
8b095871
IC
34327 return [
34328 { a: a1, b: b1 },
34329 { a: a2, b: b2 }
34330 ];
34331};
ab78acc6 34332
8b095871
IC
34333ShortCurve.prototype._endoSplit = function _endoSplit(k) {
34334 var basis = this.endo.basis;
34335 var v1 = basis[0];
34336 var v2 = basis[1];
ab78acc6 34337
8b095871
IC
34338 var c1 = v2.b.mul(k).divRound(this.n);
34339 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 34340
8b095871
IC
34341 var p1 = c1.mul(v1.a);
34342 var p2 = c2.mul(v2.a);
34343 var q1 = c1.mul(v1.b);
34344 var q2 = c2.mul(v2.b);
ab78acc6 34345
8b095871
IC
34346 // Calculate answer
34347 var k1 = k.sub(p1).sub(p2);
34348 var k2 = q1.add(q2).neg();
34349 return { k1: k1, k2: k2 };
34350};
ab78acc6 34351
8b095871
IC
34352ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
34353 x = new BN(x, 16);
34354 if (!x.red)
34355 x = x.toRed(this.red);
ab78acc6 34356
8b095871
IC
34357 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
34358 var y = y2.redSqrt();
34359 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
34360 throw new Error('invalid point');
ab78acc6 34361
8b095871
IC
34362 // XXX Is there any way to tell if the number is odd without converting it
34363 // to non-red form?
34364 var isOdd = y.fromRed().isOdd();
34365 if (odd && !isOdd || !odd && isOdd)
34366 y = y.redNeg();
ab78acc6 34367
8b095871
IC
34368 return this.point(x, y);
34369};
ab78acc6 34370
8b095871
IC
34371ShortCurve.prototype.validate = function validate(point) {
34372 if (point.inf)
34373 return true;
ab78acc6 34374
8b095871
IC
34375 var x = point.x;
34376 var y = point.y;
ab78acc6 34377
8b095871
IC
34378 var ax = this.a.redMul(x);
34379 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
34380 return y.redSqr().redISub(rhs).cmpn(0) === 0;
34381};
ab78acc6 34382
8b095871
IC
34383ShortCurve.prototype._endoWnafMulAdd =
34384 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
34385 var npoints = this._endoWnafT1;
34386 var ncoeffs = this._endoWnafT2;
34387 for (var i = 0; i < points.length; i++) {
34388 var split = this._endoSplit(coeffs[i]);
34389 var p = points[i];
34390 var beta = p._getBeta();
ab78acc6 34391
8b095871
IC
34392 if (split.k1.negative) {
34393 split.k1.ineg();
34394 p = p.neg(true);
34395 }
34396 if (split.k2.negative) {
34397 split.k2.ineg();
34398 beta = beta.neg(true);
ab78acc6 34399 }
ab78acc6 34400
8b095871
IC
34401 npoints[i * 2] = p;
34402 npoints[i * 2 + 1] = beta;
34403 ncoeffs[i * 2] = split.k1;
34404 ncoeffs[i * 2 + 1] = split.k2;
34405 }
34406 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 34407
8b095871
IC
34408 // Clean-up references to points and coefficients
34409 for (var j = 0; j < i * 2; j++) {
34410 npoints[j] = null;
34411 ncoeffs[j] = null;
34412 }
34413 return res;
34414};
34415
34416function Point(curve, x, y, isRed) {
34417 Base.BasePoint.call(this, curve, 'affine');
34418 if (x === null && y === null) {
34419 this.x = null;
34420 this.y = null;
34421 this.inf = true;
34422 } else {
34423 this.x = new BN(x, 16);
34424 this.y = new BN(y, 16);
34425 // Force redgomery representation when loading from JSON
34426 if (isRed) {
34427 this.x.forceRed(this.curve.red);
34428 this.y.forceRed(this.curve.red);
ab78acc6 34429 }
8b095871
IC
34430 if (!this.x.red)
34431 this.x = this.x.toRed(this.curve.red);
34432 if (!this.y.red)
34433 this.y = this.y.toRed(this.curve.red);
34434 this.inf = false;
34435 }
34436}
34437inherits(Point, Base.BasePoint);
ab78acc6 34438
8b095871
IC
34439ShortCurve.prototype.point = function point(x, y, isRed) {
34440 return new Point(this, x, y, isRed);
34441};
ab78acc6 34442
8b095871
IC
34443ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
34444 return Point.fromJSON(this, obj, red);
34445};
ab78acc6 34446
8b095871
IC
34447Point.prototype._getBeta = function _getBeta() {
34448 if (!this.curve.endo)
34449 return;
ab78acc6 34450
8b095871
IC
34451 var pre = this.precomputed;
34452 if (pre && pre.beta)
34453 return pre.beta;
ab78acc6 34454
8b095871
IC
34455 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
34456 if (pre) {
34457 var curve = this.curve;
34458 var endoMul = function(p) {
34459 return curve.point(p.x.redMul(curve.endo.beta), p.y);
34460 };
34461 pre.beta = beta;
34462 beta.precomputed = {
34463 beta: null,
34464 naf: pre.naf && {
34465 wnd: pre.naf.wnd,
34466 points: pre.naf.points.map(endoMul)
34467 },
34468 doubles: pre.doubles && {
34469 step: pre.doubles.step,
34470 points: pre.doubles.points.map(endoMul)
34471 }
ab78acc6 34472 };
ab78acc6 34473 }
8b095871 34474 return beta;
ab78acc6
IC
34475};
34476
8b095871
IC
34477Point.prototype.toJSON = function toJSON() {
34478 if (!this.precomputed)
34479 return [ this.x, this.y ];
ab78acc6 34480
8b095871
IC
34481 return [ this.x, this.y, this.precomputed && {
34482 doubles: this.precomputed.doubles && {
34483 step: this.precomputed.doubles.step,
34484 points: this.precomputed.doubles.points.slice(1)
34485 },
34486 naf: this.precomputed.naf && {
34487 wnd: this.precomputed.naf.wnd,
34488 points: this.precomputed.naf.points.slice(1)
34489 }
34490 } ];
34491};
ab78acc6 34492
8b095871
IC
34493Point.fromJSON = function fromJSON(curve, obj, red) {
34494 if (typeof obj === 'string')
34495 obj = JSON.parse(obj);
34496 var res = curve.point(obj[0], obj[1], red);
34497 if (!obj[2])
34498 return res;
ab78acc6 34499
8b095871
IC
34500 function obj2point(obj) {
34501 return curve.point(obj[0], obj[1], red);
34502 }
34503
34504 var pre = obj[2];
34505 res.precomputed = {
34506 beta: null,
34507 doubles: pre.doubles && {
34508 step: pre.doubles.step,
34509 points: [ res ].concat(pre.doubles.points.map(obj2point))
34510 },
34511 naf: pre.naf && {
34512 wnd: pre.naf.wnd,
34513 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 34514 }
8b095871
IC
34515 };
34516 return res;
34517};
ab78acc6 34518
8b095871
IC
34519Point.prototype.inspect = function inspect() {
34520 if (this.isInfinity())
34521 return '<EC Point Infinity>';
34522 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34523 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
34524};
ab78acc6 34525
8b095871
IC
34526Point.prototype.isInfinity = function isInfinity() {
34527 return this.inf;
34528};
ebd8d4e8 34529
8b095871
IC
34530Point.prototype.add = function add(p) {
34531 // O + P = P
34532 if (this.inf)
34533 return p;
ab78acc6 34534
8b095871
IC
34535 // P + O = P
34536 if (p.inf)
34537 return this;
ab78acc6 34538
8b095871
IC
34539 // P + P = 2P
34540 if (this.eq(p))
34541 return this.dbl();
ab78acc6 34542
8b095871
IC
34543 // P + (-P) = O
34544 if (this.neg().eq(p))
34545 return this.curve.point(null, null);
ab78acc6 34546
8b095871
IC
34547 // P + Q = O
34548 if (this.x.cmp(p.x) === 0)
34549 return this.curve.point(null, null);
ebd8d4e8 34550
8b095871
IC
34551 var c = this.y.redSub(p.y);
34552 if (c.cmpn(0) !== 0)
34553 c = c.redMul(this.x.redSub(p.x).redInvm());
34554 var nx = c.redSqr().redISub(this.x).redISub(p.x);
34555 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34556 return this.curve.point(nx, ny);
34557};
ab78acc6 34558
8b095871
IC
34559Point.prototype.dbl = function dbl() {
34560 if (this.inf)
34561 return this;
ebd8d4e8 34562
8b095871
IC
34563 // 2P = O
34564 var ys1 = this.y.redAdd(this.y);
34565 if (ys1.cmpn(0) === 0)
34566 return this.curve.point(null, null);
ebd8d4e8 34567
8b095871 34568 var a = this.curve.a;
ebd8d4e8 34569
8b095871
IC
34570 var x2 = this.x.redSqr();
34571 var dyinv = ys1.redInvm();
34572 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 34573
8b095871
IC
34574 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
34575 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34576 return this.curve.point(nx, ny);
34577};
ebd8d4e8 34578
8b095871
IC
34579Point.prototype.getX = function getX() {
34580 return this.x.fromRed();
34581};
ab78acc6 34582
8b095871
IC
34583Point.prototype.getY = function getY() {
34584 return this.y.fromRed();
34585};
ebd8d4e8 34586
8b095871
IC
34587Point.prototype.mul = function mul(k) {
34588 k = new BN(k, 16);
ebd8d4e8 34589
8b095871
IC
34590 if (this._hasDoubles(k))
34591 return this.curve._fixedNafMul(this, k);
34592 else if (this.curve.endo)
34593 return this.curve._endoWnafMulAdd([ this ], [ k ]);
34594 else
34595 return this.curve._wnafMul(this, k);
34596};
ebd8d4e8 34597
8b095871
IC
34598Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
34599 var points = [ this, p2 ];
34600 var coeffs = [ k1, k2 ];
34601 if (this.curve.endo)
34602 return this.curve._endoWnafMulAdd(points, coeffs);
34603 else
34604 return this.curve._wnafMulAdd(1, points, coeffs, 2);
34605};
ebd8d4e8 34606
8b095871
IC
34607Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
34608 var points = [ this, p2 ];
34609 var coeffs = [ k1, k2 ];
34610 if (this.curve.endo)
34611 return this.curve._endoWnafMulAdd(points, coeffs, true);
34612 else
34613 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
34614};
ebd8d4e8 34615
8b095871
IC
34616Point.prototype.eq = function eq(p) {
34617 return this === p ||
34618 this.inf === p.inf &&
34619 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
34620};
ebd8d4e8 34621
8b095871
IC
34622Point.prototype.neg = function neg(_precompute) {
34623 if (this.inf)
34624 return this;
ebd8d4e8 34625
8b095871
IC
34626 var res = this.curve.point(this.x, this.y.redNeg());
34627 if (_precompute && this.precomputed) {
34628 var pre = this.precomputed;
34629 var negate = function(p) {
34630 return p.neg();
34631 };
34632 res.precomputed = {
34633 naf: pre.naf && {
34634 wnd: pre.naf.wnd,
34635 points: pre.naf.points.map(negate)
34636 },
34637 doubles: pre.doubles && {
34638 step: pre.doubles.step,
34639 points: pre.doubles.points.map(negate)
34640 }
34641 };
34642 }
34643 return res;
34644};
ebd8d4e8 34645
8b095871
IC
34646Point.prototype.toJ = function toJ() {
34647 if (this.inf)
34648 return this.curve.jpoint(null, null, null);
ebd8d4e8 34649
8b095871
IC
34650 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
34651 return res;
34652};
ebd8d4e8 34653
8b095871
IC
34654function JPoint(curve, x, y, z) {
34655 Base.BasePoint.call(this, curve, 'jacobian');
34656 if (x === null && y === null && z === null) {
34657 this.x = this.curve.one;
34658 this.y = this.curve.one;
34659 this.z = new BN(0);
34660 } else {
34661 this.x = new BN(x, 16);
34662 this.y = new BN(y, 16);
34663 this.z = new BN(z, 16);
34664 }
34665 if (!this.x.red)
34666 this.x = this.x.toRed(this.curve.red);
34667 if (!this.y.red)
34668 this.y = this.y.toRed(this.curve.red);
34669 if (!this.z.red)
34670 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 34671
8b095871 34672 this.zOne = this.z === this.curve.one;
ab78acc6 34673}
8b095871 34674inherits(JPoint, Base.BasePoint);
ab78acc6 34675
8b095871
IC
34676ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
34677 return new JPoint(this, x, y, z);
34678};
ab78acc6 34679
8b095871
IC
34680JPoint.prototype.toP = function toP() {
34681 if (this.isInfinity())
34682 return this.curve.point(null, null);
ab78acc6 34683
8b095871
IC
34684 var zinv = this.z.redInvm();
34685 var zinv2 = zinv.redSqr();
34686 var ax = this.x.redMul(zinv2);
34687 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 34688
8b095871
IC
34689 return this.curve.point(ax, ay);
34690};
ab78acc6 34691
8b095871
IC
34692JPoint.prototype.neg = function neg() {
34693 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
34694};
ab78acc6 34695
8b095871
IC
34696JPoint.prototype.add = function add(p) {
34697 // O + P = P
34698 if (this.isInfinity())
34699 return p;
ab78acc6 34700
8b095871
IC
34701 // P + O = P
34702 if (p.isInfinity())
34703 return this;
ab78acc6 34704
8b095871
IC
34705 // 12M + 4S + 7A
34706 var pz2 = p.z.redSqr();
34707 var z2 = this.z.redSqr();
34708 var u1 = this.x.redMul(pz2);
34709 var u2 = p.x.redMul(z2);
34710 var s1 = this.y.redMul(pz2.redMul(p.z));
34711 var s2 = p.y.redMul(z2.redMul(this.z));
34712
34713 var h = u1.redSub(u2);
34714 var r = s1.redSub(s2);
34715 if (h.cmpn(0) === 0) {
34716 if (r.cmpn(0) !== 0)
34717 return this.curve.jpoint(null, null, null);
34718 else
34719 return this.dbl();
34720 }
ab78acc6 34721
8b095871
IC
34722 var h2 = h.redSqr();
34723 var h3 = h2.redMul(h);
34724 var v = u1.redMul(h2);
ab78acc6 34725
8b095871
IC
34726 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34727 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34728 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 34729
8b095871
IC
34730 return this.curve.jpoint(nx, ny, nz);
34731};
ab78acc6 34732
8b095871
IC
34733JPoint.prototype.mixedAdd = function mixedAdd(p) {
34734 // O + P = P
34735 if (this.isInfinity())
34736 return p.toJ();
ab78acc6 34737
8b095871
IC
34738 // P + O = P
34739 if (p.isInfinity())
34740 return this;
ab78acc6 34741
8b095871
IC
34742 // 8M + 3S + 7A
34743 var z2 = this.z.redSqr();
34744 var u1 = this.x;
34745 var u2 = p.x.redMul(z2);
34746 var s1 = this.y;
34747 var s2 = p.y.redMul(z2).redMul(this.z);
34748
34749 var h = u1.redSub(u2);
34750 var r = s1.redSub(s2);
34751 if (h.cmpn(0) === 0) {
34752 if (r.cmpn(0) !== 0)
34753 return this.curve.jpoint(null, null, null);
34754 else
34755 return this.dbl();
ab78acc6
IC
34756 }
34757
8b095871
IC
34758 var h2 = h.redSqr();
34759 var h3 = h2.redMul(h);
34760 var v = u1.redMul(h2);
ab78acc6 34761
8b095871
IC
34762 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34763 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34764 var nz = this.z.redMul(h);
ab78acc6 34765
8b095871
IC
34766 return this.curve.jpoint(nx, ny, nz);
34767};
ab78acc6 34768
8b095871
IC
34769JPoint.prototype.dblp = function dblp(pow) {
34770 if (pow === 0)
34771 return this;
34772 if (this.isInfinity())
34773 return this;
34774 if (!pow)
34775 return this.dbl();
34776
34777 if (this.curve.zeroA || this.curve.threeA) {
34778 var r = this;
34779 for (var i = 0; i < pow; i++)
34780 r = r.dbl();
34781 return r;
34782 }
34783
34784 // 1M + 2S + 1A + N * (4S + 5M + 8A)
34785 // N = 1 => 6M + 6S + 9A
34786 var a = this.curve.a;
34787 var tinv = this.curve.tinv;
34788
34789 var jx = this.x;
34790 var jy = this.y;
34791 var jz = this.z;
34792 var jz4 = jz.redSqr().redSqr();
34793
34794 // Reuse results
34795 var jyd = jy.redAdd(jy);
34796 for (var i = 0; i < pow; i++) {
34797 var jx2 = jx.redSqr();
34798 var jyd2 = jyd.redSqr();
34799 var jyd4 = jyd2.redSqr();
34800 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
34801
34802 var t1 = jx.redMul(jyd2);
34803 var nx = c.redSqr().redISub(t1.redAdd(t1));
34804 var t2 = t1.redISub(nx);
34805 var dny = c.redMul(t2);
34806 dny = dny.redIAdd(dny).redISub(jyd4);
34807 var nz = jyd.redMul(jz);
34808 if (i + 1 < pow)
34809 jz4 = jz4.redMul(jyd4);
34810
34811 jx = nx;
34812 jz = nz;
34813 jyd = dny;
34814 }
34815
34816 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
34817};
ab78acc6 34818
8b095871
IC
34819JPoint.prototype.dbl = function dbl() {
34820 if (this.isInfinity())
34821 return this;
ab78acc6 34822
8b095871
IC
34823 if (this.curve.zeroA)
34824 return this._zeroDbl();
34825 else if (this.curve.threeA)
34826 return this._threeDbl();
34827 else
34828 return this._dbl();
34829};
ab78acc6 34830
8b095871
IC
34831JPoint.prototype._zeroDbl = function _zeroDbl() {
34832 var nx;
34833 var ny;
34834 var nz;
34835 // Z = 1
34836 if (this.zOne) {
34837 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34838 // #doubling-mdbl-2007-bl
34839 // 1M + 5S + 14A
34840
34841 // XX = X1^2
34842 var xx = this.x.redSqr();
34843 // YY = Y1^2
34844 var yy = this.y.redSqr();
34845 // YYYY = YY^2
34846 var yyyy = yy.redSqr();
34847 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34848 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34849 s = s.redIAdd(s);
34850 // M = 3 * XX + a; a = 0
34851 var m = xx.redAdd(xx).redIAdd(xx);
34852 // T = M ^ 2 - 2*S
34853 var t = m.redSqr().redISub(s).redISub(s);
34854
34855 // 8 * YYYY
34856 var yyyy8 = yyyy.redIAdd(yyyy);
34857 yyyy8 = yyyy8.redIAdd(yyyy8);
34858 yyyy8 = yyyy8.redIAdd(yyyy8);
34859
34860 // X3 = T
34861 nx = t;
34862 // Y3 = M * (S - T) - 8 * YYYY
34863 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34864 // Z3 = 2*Y1
34865 nz = this.y.redAdd(this.y);
34866 } else {
34867 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34868 // #doubling-dbl-2009-l
34869 // 2M + 5S + 13A
34870
34871 // A = X1^2
34872 var a = this.x.redSqr();
34873 // B = Y1^2
34874 var b = this.y.redSqr();
34875 // C = B^2
34876 var c = b.redSqr();
34877 // D = 2 * ((X1 + B)^2 - A - C)
34878 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
34879 d = d.redIAdd(d);
34880 // E = 3 * A
34881 var e = a.redAdd(a).redIAdd(a);
34882 // F = E^2
34883 var f = e.redSqr();
34884
34885 // 8 * C
34886 var c8 = c.redIAdd(c);
34887 c8 = c8.redIAdd(c8);
34888 c8 = c8.redIAdd(c8);
34889
34890 // X3 = F - 2 * D
34891 nx = f.redISub(d).redISub(d);
34892 // Y3 = E * (D - X3) - 8 * C
34893 ny = e.redMul(d.redISub(nx)).redISub(c8);
34894 // Z3 = 2 * Y1 * Z1
34895 nz = this.y.redMul(this.z);
34896 nz = nz.redIAdd(nz);
34897 }
34898
34899 return this.curve.jpoint(nx, ny, nz);
34900};
ab78acc6 34901
8b095871
IC
34902JPoint.prototype._threeDbl = function _threeDbl() {
34903 var nx;
34904 var ny;
34905 var nz;
34906 // Z = 1
34907 if (this.zOne) {
34908 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
34909 // #doubling-mdbl-2007-bl
34910 // 1M + 5S + 15A
34911
34912 // XX = X1^2
34913 var xx = this.x.redSqr();
34914 // YY = Y1^2
34915 var yy = this.y.redSqr();
34916 // YYYY = YY^2
34917 var yyyy = yy.redSqr();
34918 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34919 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34920 s = s.redIAdd(s);
34921 // M = 3 * XX + a
34922 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
34923 // T = M^2 - 2 * S
34924 var t = m.redSqr().redISub(s).redISub(s);
34925 // X3 = T
34926 nx = t;
34927 // Y3 = M * (S - T) - 8 * YYYY
34928 var yyyy8 = yyyy.redIAdd(yyyy);
34929 yyyy8 = yyyy8.redIAdd(yyyy8);
34930 yyyy8 = yyyy8.redIAdd(yyyy8);
34931 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34932 // Z3 = 2 * Y1
34933 nz = this.y.redAdd(this.y);
34934 } else {
34935 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
34936 // 3M + 5S
34937
34938 // delta = Z1^2
34939 var delta = this.z.redSqr();
34940 // gamma = Y1^2
34941 var gamma = this.y.redSqr();
34942 // beta = X1 * gamma
34943 var beta = this.x.redMul(gamma);
34944 // alpha = 3 * (X1 - delta) * (X1 + delta)
34945 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
34946 alpha = alpha.redAdd(alpha).redIAdd(alpha);
34947 // X3 = alpha^2 - 8 * beta
34948 var beta4 = beta.redIAdd(beta);
34949 beta4 = beta4.redIAdd(beta4);
34950 var beta8 = beta4.redAdd(beta4);
34951 nx = alpha.redSqr().redISub(beta8);
34952 // Z3 = (Y1 + Z1)^2 - gamma - delta
34953 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
34954 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
34955 var ggamma8 = gamma.redSqr();
34956 ggamma8 = ggamma8.redIAdd(ggamma8);
34957 ggamma8 = ggamma8.redIAdd(ggamma8);
34958 ggamma8 = ggamma8.redIAdd(ggamma8);
34959 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
34960 }
34961
34962 return this.curve.jpoint(nx, ny, nz);
34963};
ab78acc6 34964
8b095871
IC
34965JPoint.prototype._dbl = function _dbl() {
34966 var a = this.curve.a;
ab78acc6 34967
8b095871
IC
34968 // 4M + 6S + 10A
34969 var jx = this.x;
34970 var jy = this.y;
34971 var jz = this.z;
34972 var jz4 = jz.redSqr().redSqr();
ab78acc6 34973
8b095871
IC
34974 var jx2 = jx.redSqr();
34975 var jy2 = jy.redSqr();
ebd8d4e8 34976
8b095871 34977 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 34978
8b095871
IC
34979 var jxd4 = jx.redAdd(jx);
34980 jxd4 = jxd4.redIAdd(jxd4);
34981 var t1 = jxd4.redMul(jy2);
34982 var nx = c.redSqr().redISub(t1.redAdd(t1));
34983 var t2 = t1.redISub(nx);
ebd8d4e8 34984
8b095871
IC
34985 var jyd8 = jy2.redSqr();
34986 jyd8 = jyd8.redIAdd(jyd8);
34987 jyd8 = jyd8.redIAdd(jyd8);
34988 jyd8 = jyd8.redIAdd(jyd8);
34989 var ny = c.redMul(t2).redISub(jyd8);
34990 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 34991
8b095871
IC
34992 return this.curve.jpoint(nx, ny, nz);
34993};
ebd8d4e8 34994
8b095871
IC
34995JPoint.prototype.trpl = function trpl() {
34996 if (!this.curve.zeroA)
34997 return this.dbl().add(this);
34998
34999 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
35000 // 5M + 10S + ...
35001
35002 // XX = X1^2
35003 var xx = this.x.redSqr();
35004 // YY = Y1^2
35005 var yy = this.y.redSqr();
35006 // ZZ = Z1^2
35007 var zz = this.z.redSqr();
35008 // YYYY = YY^2
35009 var yyyy = yy.redSqr();
35010 // M = 3 * XX + a * ZZ2; a = 0
35011 var m = xx.redAdd(xx).redIAdd(xx);
35012 // MM = M^2
35013 var mm = m.redSqr();
35014 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
35015 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
35016 e = e.redIAdd(e);
35017 e = e.redAdd(e).redIAdd(e);
35018 e = e.redISub(mm);
35019 // EE = E^2
35020 var ee = e.redSqr();
35021 // T = 16*YYYY
35022 var t = yyyy.redIAdd(yyyy);
35023 t = t.redIAdd(t);
35024 t = t.redIAdd(t);
35025 t = t.redIAdd(t);
35026 // U = (M + E)^2 - MM - EE - T
35027 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
35028 // X3 = 4 * (X1 * EE - 4 * YY * U)
35029 var yyu4 = yy.redMul(u);
35030 yyu4 = yyu4.redIAdd(yyu4);
35031 yyu4 = yyu4.redIAdd(yyu4);
35032 var nx = this.x.redMul(ee).redISub(yyu4);
35033 nx = nx.redIAdd(nx);
35034 nx = nx.redIAdd(nx);
35035 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
35036 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
35037 ny = ny.redIAdd(ny);
35038 ny = ny.redIAdd(ny);
35039 ny = ny.redIAdd(ny);
35040 // Z3 = (Z1 + E)^2 - ZZ - EE
35041 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
35042
35043 return this.curve.jpoint(nx, ny, nz);
35044};
ebd8d4e8 35045
8b095871
IC
35046JPoint.prototype.mul = function mul(k, kbase) {
35047 k = new BN(k, kbase);
ebd8d4e8 35048
8b095871
IC
35049 return this.curve._wnafMul(this, k);
35050};
ebd8d4e8 35051
8b095871
IC
35052JPoint.prototype.eq = function eq(p) {
35053 if (p.type === 'affine')
35054 return this.eq(p.toJ());
ebd8d4e8 35055
8b095871
IC
35056 if (this === p)
35057 return true;
ebd8d4e8 35058
8b095871
IC
35059 // x1 * z2^2 == x2 * z1^2
35060 var z2 = this.z.redSqr();
35061 var pz2 = p.z.redSqr();
35062 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
35063 return false;
ebd8d4e8 35064
8b095871
IC
35065 // y1 * z2^3 == y2 * z1^3
35066 var z3 = z2.redMul(this.z);
35067 var pz3 = pz2.redMul(p.z);
35068 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
35069};
ab78acc6 35070
8b095871
IC
35071JPoint.prototype.eqXToP = function eqXToP(x) {
35072 var zs = this.z.redSqr();
35073 var rx = x.toRed(this.curve.red).redMul(zs);
35074 if (this.x.cmp(rx) === 0)
35075 return true;
ebd8d4e8 35076
8b095871
IC
35077 var xc = x.clone();
35078 var t = this.curve.redN.redMul(zs);
35079 for (;;) {
35080 xc.iadd(this.curve.n);
35081 if (xc.cmp(this.curve.p) >= 0)
35082 return false;
ebd8d4e8 35083
8b095871
IC
35084 rx.redIAdd(t);
35085 if (this.x.cmp(rx) === 0)
35086 return true;
35087 }
35088 return false;
35089};
ebd8d4e8 35090
8b095871
IC
35091JPoint.prototype.inspect = function inspect() {
35092 if (this.isInfinity())
35093 return '<EC JPoint Infinity>';
35094 return '<EC JPoint x: ' + this.x.toString(16, 2) +
35095 ' y: ' + this.y.toString(16, 2) +
35096 ' z: ' + this.z.toString(16, 2) + '>';
35097};
ebd8d4e8 35098
8b095871
IC
35099JPoint.prototype.isInfinity = function isInfinity() {
35100 // XXX This code assumes that zero is always zero in red
35101 return this.z.cmpn(0) === 0;
35102};
ebd8d4e8 35103
8b095871
IC
35104},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
35105'use strict';
ebd8d4e8 35106
8b095871 35107var curves = exports;
ebd8d4e8 35108
8b095871
IC
35109var hash = require('hash.js');
35110var elliptic = require('../elliptic');
ebd8d4e8 35111
8b095871 35112var assert = elliptic.utils.assert;
ebd8d4e8 35113
8b095871
IC
35114function PresetCurve(options) {
35115 if (options.type === 'short')
35116 this.curve = new elliptic.curve.short(options);
35117 else if (options.type === 'edwards')
35118 this.curve = new elliptic.curve.edwards(options);
35119 else
35120 this.curve = new elliptic.curve.mont(options);
35121 this.g = this.curve.g;
35122 this.n = this.curve.n;
35123 this.hash = options.hash;
35124
35125 assert(this.g.validate(), 'Invalid curve');
35126 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
35127}
35128curves.PresetCurve = PresetCurve;
35129
35130function defineCurve(name, options) {
35131 Object.defineProperty(curves, name, {
35132 configurable: true,
35133 enumerable: true,
35134 get: function() {
35135 var curve = new PresetCurve(options);
35136 Object.defineProperty(curves, name, {
35137 configurable: true,
35138 enumerable: true,
35139 value: curve
35140 });
35141 return curve;
35142 }
35143 });
ebd8d4e8
IC
35144}
35145
8b095871
IC
35146defineCurve('p192', {
35147 type: 'short',
35148 prime: 'p192',
35149 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
35150 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
35151 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
35152 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
35153 hash: hash.sha256,
35154 gRed: false,
35155 g: [
35156 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
35157 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
35158 ]
35159});
ebd8d4e8 35160
8b095871
IC
35161defineCurve('p224', {
35162 type: 'short',
35163 prime: 'p224',
35164 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
35165 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
35166 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
35167 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
35168 hash: hash.sha256,
35169 gRed: false,
35170 g: [
35171 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
35172 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
35173 ]
35174});
ebd8d4e8 35175
8b095871
IC
35176defineCurve('p256', {
35177 type: 'short',
35178 prime: null,
35179 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
35180 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
35181 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
35182 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
35183 hash: hash.sha256,
35184 gRed: false,
35185 g: [
35186 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
35187 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
35188 ]
35189});
ebd8d4e8 35190
8b095871
IC
35191defineCurve('p384', {
35192 type: 'short',
35193 prime: null,
35194 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35195 'fffffffe ffffffff 00000000 00000000 ffffffff',
35196 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35197 'fffffffe ffffffff 00000000 00000000 fffffffc',
35198 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
35199 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
35200 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
35201 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
35202 hash: hash.sha384,
35203 gRed: false,
35204 g: [
35205 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
35206 '5502f25d bf55296c 3a545e38 72760ab7',
35207 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
35208 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
35209 ]
35210});
ebd8d4e8 35211
8b095871
IC
35212defineCurve('p521', {
35213 type: 'short',
35214 prime: null,
35215 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35216 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35217 'ffffffff ffffffff ffffffff ffffffff ffffffff',
35218 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35219 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35220 'ffffffff ffffffff ffffffff ffffffff fffffffc',
35221 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
35222 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
35223 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
35224 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35225 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
35226 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
35227 hash: hash.sha512,
35228 gRed: false,
35229 g: [
35230 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
35231 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
35232 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
35233 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
35234 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
35235 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
35236 ]
35237});
ebd8d4e8 35238
8b095871
IC
35239defineCurve('curve25519', {
35240 type: 'mont',
35241 prime: 'p25519',
35242 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35243 a: '76d06',
35244 b: '1',
35245 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35246 hash: hash.sha256,
35247 gRed: false,
35248 g: [
35249 '9'
35250 ]
35251});
ebd8d4e8 35252
8b095871
IC
35253defineCurve('ed25519', {
35254 type: 'edwards',
35255 prime: 'p25519',
35256 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35257 a: '-1',
35258 c: '1',
35259 // -121665 * (121666^(-1)) (mod P)
35260 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
35261 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35262 hash: hash.sha256,
35263 gRed: false,
35264 g: [
35265 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
35266
35267 // 4/5
35268 '6666666666666666666666666666666666666666666666666666666666666658'
35269 ]
35270});
ebd8d4e8 35271
8b095871
IC
35272var pre;
35273try {
35274 pre = require('./precomputed/secp256k1');
35275} catch (e) {
35276 pre = undefined;
35277}
35278
35279defineCurve('secp256k1', {
35280 type: 'short',
35281 prime: 'k256',
35282 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
35283 a: '0',
35284 b: '7',
35285 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
35286 h: '1',
35287 hash: hash.sha256,
35288
35289 // Precomputed endomorphism
35290 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
35291 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
35292 basis: [
35293 {
35294 a: '3086d221a7d46bcde86c90e49284eb15',
35295 b: '-e4437ed6010e88286f547fa90abfe4c3'
35296 },
35297 {
35298 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
35299 b: '3086d221a7d46bcde86c90e49284eb15'
35300 }
35301 ],
ebd8d4e8 35302
8b095871
IC
35303 gRed: false,
35304 g: [
35305 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
35306 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
35307 pre
35308 ]
35309});
ebd8d4e8 35310
8b095871
IC
35311},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
35312'use strict';
ebd8d4e8 35313
8b095871
IC
35314var BN = require('bn.js');
35315var elliptic = require('../../elliptic');
35316var utils = elliptic.utils;
35317var assert = utils.assert;
ebd8d4e8 35318
8b095871
IC
35319var KeyPair = require('./key');
35320var Signature = require('./signature');
ebd8d4e8 35321
8b095871
IC
35322function EC(options) {
35323 if (!(this instanceof EC))
35324 return new EC(options);
ebd8d4e8 35325
8b095871
IC
35326 // Shortcut `elliptic.ec(curve-name)`
35327 if (typeof options === 'string') {
35328 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
35329
35330 options = elliptic.curves[options];
ebd8d4e8
IC
35331 }
35332
8b095871
IC
35333 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
35334 if (options instanceof elliptic.curves.PresetCurve)
35335 options = { curve: options };
ebd8d4e8 35336
8b095871
IC
35337 this.curve = options.curve.curve;
35338 this.n = this.curve.n;
35339 this.nh = this.n.ushrn(1);
35340 this.g = this.curve.g;
ebd8d4e8 35341
8b095871
IC
35342 // Point on curve
35343 this.g = options.curve.g;
35344 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 35345
8b095871
IC
35346 // Hash for function for DRBG
35347 this.hash = options.hash || options.curve.hash;
ebd8d4e8 35348}
8b095871 35349module.exports = EC;
ebd8d4e8 35350
8b095871
IC
35351EC.prototype.keyPair = function keyPair(options) {
35352 return new KeyPair(this, options);
35353};
35354
35355EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
35356 return KeyPair.fromPrivate(this, priv, enc);
35357};
35358
35359EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
35360 return KeyPair.fromPublic(this, pub, enc);
35361};
35362
35363EC.prototype.genKeyPair = function genKeyPair(options) {
35364 if (!options)
35365 options = {};
35366
35367 // Instantiate Hmac_DRBG
35368 var drbg = new elliptic.hmacDRBG({
35369 hash: this.hash,
35370 pers: options.pers,
35371 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
35372 nonce: this.n.toArray()
35373 });
ebd8d4e8 35374
8b095871
IC
35375 var bytes = this.n.byteLength();
35376 var ns2 = this.n.sub(new BN(2));
35377 do {
35378 var priv = new BN(drbg.generate(bytes));
35379 if (priv.cmp(ns2) > 0)
35380 continue;
ebd8d4e8 35381
8b095871
IC
35382 priv.iaddn(1);
35383 return this.keyFromPrivate(priv);
35384 } while (true);
35385};
ebd8d4e8 35386
8b095871
IC
35387EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
35388 var delta = msg.byteLength() * 8 - this.n.bitLength();
35389 if (delta > 0)
35390 msg = msg.ushrn(delta);
35391 if (!truncOnly && msg.cmp(this.n) >= 0)
35392 return msg.sub(this.n);
35393 else
35394 return msg;
35395};
ebd8d4e8 35396
8b095871
IC
35397EC.prototype.sign = function sign(msg, key, enc, options) {
35398 if (typeof enc === 'object') {
35399 options = enc;
35400 enc = null;
ebd8d4e8 35401 }
8b095871
IC
35402 if (!options)
35403 options = {};
ebd8d4e8 35404
8b095871
IC
35405 key = this.keyFromPrivate(key, enc);
35406 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 35407
8b095871
IC
35408 // Zero-extend key to provide enough entropy
35409 var bytes = this.n.byteLength();
35410 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 35411
8b095871
IC
35412 // Zero-extend nonce to have the same byte size as N
35413 var nonce = msg.toArray('be', bytes);
ab78acc6 35414
8b095871
IC
35415 // Instantiate Hmac_DRBG
35416 var drbg = new elliptic.hmacDRBG({
35417 hash: this.hash,
35418 entropy: bkey,
35419 nonce: nonce,
35420 pers: options.pers,
35421 persEnc: options.persEnc
35422 });
ab78acc6 35423
8b095871
IC
35424 // Number of bytes to generate
35425 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 35426
8b095871
IC
35427 for (var iter = 0; true; iter++) {
35428 var k = options.k ?
35429 options.k(iter) :
35430 new BN(drbg.generate(this.n.byteLength()));
35431 k = this._truncateToN(k, true);
35432 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
35433 continue;
ebd8d4e8 35434
8b095871
IC
35435 var kp = this.g.mul(k);
35436 if (kp.isInfinity())
35437 continue;
ebd8d4e8 35438
8b095871
IC
35439 var kpX = kp.getX();
35440 var r = kpX.umod(this.n);
35441 if (r.cmpn(0) === 0)
35442 continue;
ebd8d4e8 35443
8b095871
IC
35444 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
35445 s = s.umod(this.n);
35446 if (s.cmpn(0) === 0)
35447 continue;
ebd8d4e8 35448
8b095871
IC
35449 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
35450 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 35451
8b095871
IC
35452 // Use complement of `s`, if it is > `n / 2`
35453 if (options.canonical && s.cmp(this.nh) > 0) {
35454 s = this.n.sub(s);
35455 recoveryParam ^= 1;
35456 }
ebd8d4e8 35457
8b095871
IC
35458 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
35459 }
35460};
ebd8d4e8 35461
8b095871
IC
35462EC.prototype.verify = function verify(msg, signature, key, enc) {
35463 msg = this._truncateToN(new BN(msg, 16));
35464 key = this.keyFromPublic(key, enc);
35465 signature = new Signature(signature, 'hex');
ebd8d4e8 35466
8b095871
IC
35467 // Perform primitive values validation
35468 var r = signature.r;
35469 var s = signature.s;
35470 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
35471 return false;
35472 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
35473 return false;
ebd8d4e8 35474
8b095871
IC
35475 // Validate signature
35476 var sinv = s.invm(this.n);
35477 var u1 = sinv.mul(msg).umod(this.n);
35478 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 35479
8b095871
IC
35480 if (!this.curve._maxwellTrick) {
35481 var p = this.g.mulAdd(u1, key.getPublic(), u2);
35482 if (p.isInfinity())
35483 return false;
ebd8d4e8 35484
8b095871
IC
35485 return p.getX().umod(this.n).cmp(r) === 0;
35486 }
ab78acc6 35487
8b095871
IC
35488 // NOTE: Greg Maxwell's trick, inspired by:
35489 // https://git.io/vad3K
ebd8d4e8 35490
8b095871
IC
35491 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
35492 if (p.isInfinity())
35493 return false;
ab78acc6 35494
8b095871
IC
35495 // Compare `p.x` of Jacobian point with `r`,
35496 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
35497 // inverse of `p.z^2`
35498 return p.eqXToP(r);
35499};
ab78acc6 35500
8b095871
IC
35501EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
35502 assert((3 & j) === j, 'The recovery param is more than two bits');
35503 signature = new Signature(signature, enc);
ab78acc6 35504
8b095871
IC
35505 var n = this.n;
35506 var e = new BN(msg);
35507 var r = signature.r;
35508 var s = signature.s;
ab78acc6 35509
8b095871
IC
35510 // A set LSB signifies that the y-coordinate is odd
35511 var isYOdd = j & 1;
35512 var isSecondKey = j >> 1;
35513 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
35514 throw new Error('Unable to find sencond key candinate');
35515
35516 // 1.1. Let x = r + jn.
35517 if (isSecondKey)
35518 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
35519 else
35520 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 35521
8b095871
IC
35522 var rInv = signature.r.invm(n);
35523 var s1 = n.sub(e).mul(rInv).umod(n);
35524 var s2 = s.mul(rInv).umod(n);
ab78acc6 35525
8b095871
IC
35526 // 1.6.1 Compute Q = r^-1 (sR - eG)
35527 // Q = r^-1 (sR + -eG)
35528 return this.g.mulAdd(s1, r, s2);
35529};
ab78acc6 35530
8b095871
IC
35531EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
35532 signature = new Signature(signature, enc);
35533 if (signature.recoveryParam !== null)
35534 return signature.recoveryParam;
ab78acc6 35535
8b095871
IC
35536 for (var i = 0; i < 4; i++) {
35537 var Qprime;
35538 try {
35539 Qprime = this.recoverPubKey(e, signature, i);
35540 } catch (e) {
35541 continue;
ab78acc6 35542 }
ab78acc6 35543
8b095871
IC
35544 if (Qprime.eq(Q))
35545 return i;
35546 }
35547 throw new Error('Unable to find valid recovery factor');
35548};
ebd8d4e8 35549
8b095871
IC
35550},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
35551'use strict';
ebd8d4e8 35552
8b095871
IC
35553var BN = require('bn.js');
35554var elliptic = require('../../elliptic');
35555var utils = elliptic.utils;
35556var assert = utils.assert;
ebd8d4e8 35557
8b095871
IC
35558function KeyPair(ec, options) {
35559 this.ec = ec;
35560 this.priv = null;
35561 this.pub = null;
ebd8d4e8 35562
8b095871
IC
35563 // KeyPair(ec, { priv: ..., pub: ... })
35564 if (options.priv)
35565 this._importPrivate(options.priv, options.privEnc);
35566 if (options.pub)
35567 this._importPublic(options.pub, options.pubEnc);
35568}
35569module.exports = KeyPair;
ebd8d4e8 35570
8b095871
IC
35571KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
35572 if (pub instanceof KeyPair)
35573 return pub;
ebd8d4e8 35574
8b095871
IC
35575 return new KeyPair(ec, {
35576 pub: pub,
35577 pubEnc: enc
35578 });
35579};
ebd8d4e8 35580
8b095871
IC
35581KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
35582 if (priv instanceof KeyPair)
35583 return priv;
ebd8d4e8 35584
8b095871
IC
35585 return new KeyPair(ec, {
35586 priv: priv,
35587 privEnc: enc
35588 });
35589};
ebd8d4e8 35590
8b095871
IC
35591KeyPair.prototype.validate = function validate() {
35592 var pub = this.getPublic();
ebd8d4e8 35593
8b095871
IC
35594 if (pub.isInfinity())
35595 return { result: false, reason: 'Invalid public key' };
35596 if (!pub.validate())
35597 return { result: false, reason: 'Public key is not a point' };
35598 if (!pub.mul(this.ec.curve.n).isInfinity())
35599 return { result: false, reason: 'Public key * N != O' };
ab78acc6 35600
8b095871
IC
35601 return { result: true, reason: null };
35602};
ebd8d4e8 35603
8b095871
IC
35604KeyPair.prototype.getPublic = function getPublic(compact, enc) {
35605 // compact is optional argument
35606 if (typeof compact === 'string') {
35607 enc = compact;
35608 compact = null;
ebd8d4e8
IC
35609 }
35610
8b095871
IC
35611 if (!this.pub)
35612 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 35613
8b095871
IC
35614 if (!enc)
35615 return this.pub;
ebd8d4e8 35616
8b095871
IC
35617 return this.pub.encode(enc, compact);
35618};
ebd8d4e8 35619
8b095871
IC
35620KeyPair.prototype.getPrivate = function getPrivate(enc) {
35621 if (enc === 'hex')
35622 return this.priv.toString(16, 2);
35623 else
35624 return this.priv;
35625};
ab78acc6 35626
8b095871
IC
35627KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
35628 this.priv = new BN(key, enc || 16);
ab78acc6 35629
8b095871
IC
35630 // Ensure that the priv won't be bigger than n, otherwise we may fail
35631 // in fixed multiplication method
35632 this.priv = this.priv.umod(this.ec.curve.n);
35633};
ab78acc6 35634
8b095871
IC
35635KeyPair.prototype._importPublic = function _importPublic(key, enc) {
35636 if (key.x || key.y) {
35637 // Montgomery points only have an `x` coordinate.
35638 // Weierstrass/Edwards points on the other hand have both `x` and
35639 // `y` coordinates.
35640 if (this.ec.curve.type === 'mont') {
35641 assert(key.x, 'Need x coordinate');
35642 } else if (this.ec.curve.type === 'short' ||
35643 this.ec.curve.type === 'edwards') {
35644 assert(key.x && key.y, 'Need both x and y coordinate');
35645 }
35646 this.pub = this.ec.curve.point(key.x, key.y);
35647 return;
35648 }
35649 this.pub = this.ec.curve.decodePoint(key, enc);
35650};
ebd8d4e8 35651
8b095871
IC
35652// ECDH
35653KeyPair.prototype.derive = function derive(pub) {
35654 return pub.mul(this.priv).getX();
35655};
ebd8d4e8 35656
8b095871
IC
35657// ECDSA
35658KeyPair.prototype.sign = function sign(msg, enc, options) {
35659 return this.ec.sign(msg, this, enc, options);
35660};
ebd8d4e8 35661
8b095871
IC
35662KeyPair.prototype.verify = function verify(msg, signature) {
35663 return this.ec.verify(msg, signature, this);
35664};
ebd8d4e8 35665
8b095871
IC
35666KeyPair.prototype.inspect = function inspect() {
35667 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
35668 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
35669};
ebd8d4e8 35670
8b095871
IC
35671},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
35672'use strict';
ebd8d4e8 35673
8b095871 35674var BN = require('bn.js');
ebd8d4e8 35675
8b095871
IC
35676var elliptic = require('../../elliptic');
35677var utils = elliptic.utils;
35678var assert = utils.assert;
ebd8d4e8 35679
8b095871
IC
35680function Signature(options, enc) {
35681 if (options instanceof Signature)
35682 return options;
ebd8d4e8 35683
8b095871
IC
35684 if (this._importDER(options, enc))
35685 return;
ebd8d4e8 35686
8b095871
IC
35687 assert(options.r && options.s, 'Signature without r or s');
35688 this.r = new BN(options.r, 16);
35689 this.s = new BN(options.s, 16);
35690 if (options.recoveryParam === undefined)
35691 this.recoveryParam = null;
35692 else
35693 this.recoveryParam = options.recoveryParam;
35694}
35695module.exports = Signature;
35696
35697function Position() {
35698 this.place = 0;
35699}
35700
35701function getLength(buf, p) {
35702 var initial = buf[p.place++];
35703 if (!(initial & 0x80)) {
35704 return initial;
35705 }
35706 var octetLen = initial & 0xf;
35707 var val = 0;
35708 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
35709 val <<= 8;
35710 val |= buf[off];
35711 }
35712 p.place = off;
35713 return val;
35714}
35715
35716function rmPadding(buf) {
35717 var i = 0;
35718 var len = buf.length - 1;
35719 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
35720 i++;
35721 }
35722 if (i === 0) {
35723 return buf;
35724 }
35725 return buf.slice(i);
35726}
ebd8d4e8 35727
8b095871
IC
35728Signature.prototype._importDER = function _importDER(data, enc) {
35729 data = utils.toArray(data, enc);
35730 var p = new Position();
35731 if (data[p.place++] !== 0x30) {
35732 return false;
35733 }
35734 var len = getLength(data, p);
35735 if ((len + p.place) !== data.length) {
35736 return false;
35737 }
35738 if (data[p.place++] !== 0x02) {
35739 return false;
35740 }
35741 var rlen = getLength(data, p);
35742 var r = data.slice(p.place, rlen + p.place);
35743 p.place += rlen;
35744 if (data[p.place++] !== 0x02) {
35745 return false;
35746 }
35747 var slen = getLength(data, p);
35748 if (data.length !== slen + p.place) {
35749 return false;
35750 }
35751 var s = data.slice(p.place, slen + p.place);
35752 if (r[0] === 0 && (r[1] & 0x80)) {
35753 r = r.slice(1);
35754 }
35755 if (s[0] === 0 && (s[1] & 0x80)) {
35756 s = s.slice(1);
35757 }
ab78acc6 35758
8b095871
IC
35759 this.r = new BN(r);
35760 this.s = new BN(s);
35761 this.recoveryParam = null;
ebd8d4e8 35762
8b095871
IC
35763 return true;
35764};
ab78acc6 35765
8b095871
IC
35766function constructLength(arr, len) {
35767 if (len < 0x80) {
35768 arr.push(len);
35769 return;
35770 }
35771 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
35772 arr.push(octets | 0x80);
35773 while (--octets) {
35774 arr.push((len >>> (octets << 3)) & 0xff);
35775 }
35776 arr.push(len);
35777}
35778
35779Signature.prototype.toDER = function toDER(enc) {
35780 var r = this.r.toArray();
35781 var s = this.s.toArray();
35782
35783 // Pad values
35784 if (r[0] & 0x80)
35785 r = [ 0 ].concat(r);
35786 // Pad values
35787 if (s[0] & 0x80)
35788 s = [ 0 ].concat(s);
35789
35790 r = rmPadding(r);
35791 s = rmPadding(s);
35792
35793 while (!s[0] && !(s[1] & 0x80)) {
35794 s = s.slice(1);
35795 }
35796 var arr = [ 0x02 ];
35797 constructLength(arr, r.length);
35798 arr = arr.concat(r);
35799 arr.push(0x02);
35800 constructLength(arr, s.length);
35801 var backHalf = arr.concat(s);
35802 var res = [ 0x30 ];
35803 constructLength(res, backHalf.length);
35804 res = res.concat(backHalf);
35805 return utils.encode(res, enc);
35806};
ab78acc6 35807
8b095871
IC
35808},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
35809'use strict';
ebd8d4e8 35810
8b095871
IC
35811var hash = require('hash.js');
35812var elliptic = require('../../elliptic');
35813var utils = elliptic.utils;
35814var assert = utils.assert;
35815var parseBytes = utils.parseBytes;
35816var KeyPair = require('./key');
35817var Signature = require('./signature');
ab78acc6 35818
8b095871
IC
35819function EDDSA(curve) {
35820 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 35821
8b095871
IC
35822 if (!(this instanceof EDDSA))
35823 return new EDDSA(curve);
ab78acc6 35824
8b095871
IC
35825 var curve = elliptic.curves[curve].curve;
35826 this.curve = curve;
35827 this.g = curve.g;
35828 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 35829
8b095871
IC
35830 this.pointClass = curve.point().constructor;
35831 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
35832 this.hash = hash.sha512;
35833}
ebd8d4e8 35834
8b095871 35835module.exports = EDDSA;
ebd8d4e8 35836
8b095871
IC
35837/**
35838* @param {Array|String} message - message bytes
35839* @param {Array|String|KeyPair} secret - secret bytes or a keypair
35840* @returns {Signature} - signature
35841*/
35842EDDSA.prototype.sign = function sign(message, secret) {
35843 message = parseBytes(message);
35844 var key = this.keyFromSecret(secret);
35845 var r = this.hashInt(key.messagePrefix(), message);
35846 var R = this.g.mul(r);
35847 var Rencoded = this.encodePoint(R);
35848 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
35849 .mul(key.priv());
35850 var S = r.add(s_).umod(this.curve.n);
35851 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
35852};
ebd8d4e8 35853
8b095871
IC
35854/**
35855* @param {Array} message - message bytes
35856* @param {Array|String|Signature} sig - sig bytes
35857* @param {Array|String|Point|KeyPair} pub - public key
35858* @returns {Boolean} - true if public key matches sig of message
35859*/
35860EDDSA.prototype.verify = function verify(message, sig, pub) {
35861 message = parseBytes(message);
35862 sig = this.makeSignature(sig);
35863 var key = this.keyFromPublic(pub);
35864 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
35865 var SG = this.g.mul(sig.S());
35866 var RplusAh = sig.R().add(key.pub().mul(h));
35867 return RplusAh.eq(SG);
35868};
ebd8d4e8 35869
8b095871
IC
35870EDDSA.prototype.hashInt = function hashInt() {
35871 var hash = this.hash();
35872 for (var i = 0; i < arguments.length; i++)
35873 hash.update(arguments[i]);
35874 return utils.intFromLE(hash.digest()).umod(this.curve.n);
35875};
ebd8d4e8 35876
8b095871
IC
35877EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
35878 return KeyPair.fromPublic(this, pub);
35879};
ebd8d4e8 35880
8b095871
IC
35881EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
35882 return KeyPair.fromSecret(this, secret);
35883};
35884
35885EDDSA.prototype.makeSignature = function makeSignature(sig) {
35886 if (sig instanceof Signature)
35887 return sig;
35888 return new Signature(this, sig);
35889};
ebd8d4e8
IC
35890
35891/**
8b095871
IC
35892* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
35893*
35894* EDDSA defines methods for encoding and decoding points and integers. These are
35895* helper convenience methods, that pass along to utility functions implied
35896* parameters.
35897*
35898*/
35899EDDSA.prototype.encodePoint = function encodePoint(point) {
35900 var enc = point.getY().toArray('le', this.encodingLength);
35901 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
35902 return enc;
35903};
ebd8d4e8 35904
8b095871
IC
35905EDDSA.prototype.decodePoint = function decodePoint(bytes) {
35906 bytes = utils.parseBytes(bytes);
ebd8d4e8 35907
8b095871
IC
35908 var lastIx = bytes.length - 1;
35909 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
35910 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 35911
8b095871
IC
35912 var y = utils.intFromLE(normed);
35913 return this.curve.pointFromY(y, xIsOdd);
35914};
ebd8d4e8 35915
8b095871
IC
35916EDDSA.prototype.encodeInt = function encodeInt(num) {
35917 return num.toArray('le', this.encodingLength);
35918};
ebd8d4e8 35919
8b095871
IC
35920EDDSA.prototype.decodeInt = function decodeInt(bytes) {
35921 return utils.intFromLE(bytes);
35922};
ebd8d4e8 35923
8b095871
IC
35924EDDSA.prototype.isPoint = function isPoint(val) {
35925 return val instanceof this.pointClass;
35926};
ebd8d4e8 35927
8b095871
IC
35928},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
35929'use strict';
ebd8d4e8 35930
8b095871
IC
35931var elliptic = require('../../elliptic');
35932var utils = elliptic.utils;
35933var assert = utils.assert;
35934var parseBytes = utils.parseBytes;
35935var cachedProperty = utils.cachedProperty;
ebd8d4e8 35936
8b095871
IC
35937/**
35938* @param {EDDSA} eddsa - instance
35939* @param {Object} params - public/private key parameters
35940*
35941* @param {Array<Byte>} [params.secret] - secret seed bytes
35942* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
35943* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
35944*
35945*/
35946function KeyPair(eddsa, params) {
35947 this.eddsa = eddsa;
35948 this._secret = parseBytes(params.secret);
35949 if (eddsa.isPoint(params.pub))
35950 this._pub = params.pub;
35951 else
35952 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
35953}
35954
8b095871
IC
35955KeyPair.fromPublic = function fromPublic(eddsa, pub) {
35956 if (pub instanceof KeyPair)
35957 return pub;
35958 return new KeyPair(eddsa, { pub: pub });
35959};
ebd8d4e8 35960
8b095871
IC
35961KeyPair.fromSecret = function fromSecret(eddsa, secret) {
35962 if (secret instanceof KeyPair)
35963 return secret;
35964 return new KeyPair(eddsa, { secret: secret });
35965};
ebd8d4e8 35966
8b095871
IC
35967KeyPair.prototype.secret = function secret() {
35968 return this._secret;
35969};
ebd8d4e8 35970
8b095871
IC
35971cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
35972 return this.eddsa.encodePoint(this.pub());
35973});
ebd8d4e8 35974
8b095871
IC
35975cachedProperty(KeyPair, 'pub', function pub() {
35976 if (this._pubBytes)
35977 return this.eddsa.decodePoint(this._pubBytes);
35978 return this.eddsa.g.mul(this.priv());
35979});
ebd8d4e8 35980
8b095871
IC
35981cachedProperty(KeyPair, 'privBytes', function privBytes() {
35982 var eddsa = this.eddsa;
35983 var hash = this.hash();
35984 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 35985
8b095871
IC
35986 var a = hash.slice(0, eddsa.encodingLength);
35987 a[0] &= 248;
35988 a[lastIx] &= 127;
35989 a[lastIx] |= 64;
ebd8d4e8 35990
8b095871
IC
35991 return a;
35992});
ebd8d4e8 35993
8b095871
IC
35994cachedProperty(KeyPair, 'priv', function priv() {
35995 return this.eddsa.decodeInt(this.privBytes());
35996});
ebd8d4e8 35997
8b095871
IC
35998cachedProperty(KeyPair, 'hash', function hash() {
35999 return this.eddsa.hash().update(this.secret()).digest();
36000});
ebd8d4e8 36001
8b095871
IC
36002cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
36003 return this.hash().slice(this.eddsa.encodingLength);
36004});
ebd8d4e8 36005
8b095871
IC
36006KeyPair.prototype.sign = function sign(message) {
36007 assert(this._secret, 'KeyPair can only verify');
36008 return this.eddsa.sign(message, this);
36009};
ebd8d4e8 36010
8b095871
IC
36011KeyPair.prototype.verify = function verify(message, sig) {
36012 return this.eddsa.verify(message, sig, this);
36013};
ebd8d4e8 36014
8b095871
IC
36015KeyPair.prototype.getSecret = function getSecret(enc) {
36016 assert(this._secret, 'KeyPair is public only');
36017 return utils.encode(this.secret(), enc);
36018};
ebd8d4e8 36019
8b095871
IC
36020KeyPair.prototype.getPublic = function getPublic(enc) {
36021 return utils.encode(this.pubBytes(), enc);
36022};
ebd8d4e8 36023
8b095871 36024module.exports = KeyPair;
ebd8d4e8 36025
8b095871
IC
36026},{"../../elliptic":39}],51:[function(require,module,exports){
36027'use strict';
ebd8d4e8 36028
8b095871
IC
36029var BN = require('bn.js');
36030var elliptic = require('../../elliptic');
36031var utils = elliptic.utils;
36032var assert = utils.assert;
36033var cachedProperty = utils.cachedProperty;
36034var parseBytes = utils.parseBytes;
ebd8d4e8 36035
8b095871
IC
36036/**
36037* @param {EDDSA} eddsa - eddsa instance
36038* @param {Array<Bytes>|Object} sig -
36039* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
36040* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
36041* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
36042* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
36043*/
36044function Signature(eddsa, sig) {
36045 this.eddsa = eddsa;
ebd8d4e8 36046
8b095871
IC
36047 if (typeof sig !== 'object')
36048 sig = parseBytes(sig);
ebd8d4e8 36049
8b095871
IC
36050 if (Array.isArray(sig)) {
36051 sig = {
36052 R: sig.slice(0, eddsa.encodingLength),
36053 S: sig.slice(eddsa.encodingLength)
36054 };
ab78acc6 36055 }
ebd8d4e8 36056
8b095871 36057 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 36058
8b095871
IC
36059 if (eddsa.isPoint(sig.R))
36060 this._R = sig.R;
36061 if (sig.S instanceof BN)
36062 this._S = sig.S;
36063
36064 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
36065 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
36066}
36067
8b095871
IC
36068cachedProperty(Signature, 'S', function S() {
36069 return this.eddsa.decodeInt(this.Sencoded());
36070});
ab78acc6 36071
8b095871
IC
36072cachedProperty(Signature, 'R', function R() {
36073 return this.eddsa.decodePoint(this.Rencoded());
36074});
ebd8d4e8 36075
8b095871
IC
36076cachedProperty(Signature, 'Rencoded', function Rencoded() {
36077 return this.eddsa.encodePoint(this.R());
36078});
ebd8d4e8 36079
8b095871
IC
36080cachedProperty(Signature, 'Sencoded', function Sencoded() {
36081 return this.eddsa.encodeInt(this.S());
36082});
ebd8d4e8 36083
8b095871
IC
36084Signature.prototype.toBytes = function toBytes() {
36085 return this.Rencoded().concat(this.Sencoded());
36086};
ebd8d4e8 36087
8b095871
IC
36088Signature.prototype.toHex = function toHex() {
36089 return utils.encode(this.toBytes(), 'hex').toUpperCase();
36090};
ebd8d4e8 36091
8b095871 36092module.exports = Signature;
ebd8d4e8 36093
8b095871
IC
36094},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
36095'use strict';
ebd8d4e8 36096
8b095871
IC
36097var hash = require('hash.js');
36098var elliptic = require('../elliptic');
36099var utils = elliptic.utils;
36100var assert = utils.assert;
ebd8d4e8 36101
8b095871
IC
36102function HmacDRBG(options) {
36103 if (!(this instanceof HmacDRBG))
36104 return new HmacDRBG(options);
36105 this.hash = options.hash;
36106 this.predResist = !!options.predResist;
ab78acc6 36107
8b095871
IC
36108 this.outLen = this.hash.outSize;
36109 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 36110
8b095871
IC
36111 this.reseed = null;
36112 this.reseedInterval = null;
36113 this.K = null;
36114 this.V = null;
ebd8d4e8 36115
8b095871
IC
36116 var entropy = utils.toArray(options.entropy, options.entropyEnc);
36117 var nonce = utils.toArray(options.nonce, options.nonceEnc);
36118 var pers = utils.toArray(options.pers, options.persEnc);
36119 assert(entropy.length >= (this.minEntropy / 8),
36120 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
36121 this._init(entropy, nonce, pers);
ebd8d4e8 36122}
8b095871 36123module.exports = HmacDRBG;
ebd8d4e8 36124
8b095871
IC
36125HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
36126 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 36127
8b095871
IC
36128 this.K = new Array(this.outLen / 8);
36129 this.V = new Array(this.outLen / 8);
36130 for (var i = 0; i < this.V.length; i++) {
36131 this.K[i] = 0x00;
36132 this.V[i] = 0x01;
36133 }
ebd8d4e8 36134
8b095871
IC
36135 this._update(seed);
36136 this.reseed = 1;
36137 this.reseedInterval = 0x1000000000000; // 2^48
36138};
ebd8d4e8 36139
8b095871
IC
36140HmacDRBG.prototype._hmac = function hmac() {
36141 return new hash.hmac(this.hash, this.K);
36142};
ebd8d4e8 36143
8b095871
IC
36144HmacDRBG.prototype._update = function update(seed) {
36145 var kmac = this._hmac()
36146 .update(this.V)
36147 .update([ 0x00 ]);
36148 if (seed)
36149 kmac = kmac.update(seed);
36150 this.K = kmac.digest();
36151 this.V = this._hmac().update(this.V).digest();
36152 if (!seed)
36153 return;
36154
36155 this.K = this._hmac()
36156 .update(this.V)
36157 .update([ 0x01 ])
36158 .update(seed)
36159 .digest();
36160 this.V = this._hmac().update(this.V).digest();
36161};
36162
36163HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
36164 // Optional entropy enc
36165 if (typeof entropyEnc !== 'string') {
36166 addEnc = add;
36167 add = entropyEnc;
36168 entropyEnc = null;
ebd8d4e8 36169 }
ebd8d4e8 36170
8b095871
IC
36171 entropy = utils.toBuffer(entropy, entropyEnc);
36172 add = utils.toBuffer(add, addEnc);
ebd8d4e8 36173
8b095871
IC
36174 assert(entropy.length >= (this.minEntropy / 8),
36175 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 36176
8b095871
IC
36177 this._update(entropy.concat(add || []));
36178 this.reseed = 1;
36179};
ebd8d4e8 36180
8b095871
IC
36181HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
36182 if (this.reseed > this.reseedInterval)
36183 throw new Error('Reseed is required');
ebd8d4e8 36184
8b095871
IC
36185 // Optional encoding
36186 if (typeof enc !== 'string') {
36187 addEnc = add;
36188 add = enc;
36189 enc = null;
36190 }
ebd8d4e8 36191
8b095871
IC
36192 // Optional additional data
36193 if (add) {
36194 add = utils.toArray(add, addEnc);
36195 this._update(add);
ebd8d4e8
IC
36196 }
36197
8b095871
IC
36198 var temp = [];
36199 while (temp.length < len) {
36200 this.V = this._hmac().update(this.V).digest();
36201 temp = temp.concat(this.V);
ebd8d4e8
IC
36202 }
36203
8b095871
IC
36204 var res = temp.slice(0, len);
36205 this._update(add);
36206 this.reseed++;
36207 return utils.encode(res, enc);
36208};
ebd8d4e8 36209
8b095871
IC
36210},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
36211module.exports = {
36212 doubles: {
36213 step: 4,
36214 points: [
36215 [
36216 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
36217 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
36218 ],
36219 [
36220 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
36221 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
36222 ],
36223 [
36224 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
36225 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
36226 ],
36227 [
36228 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
36229 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
36230 ],
36231 [
36232 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
36233 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
36234 ],
36235 [
36236 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
36237 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
36238 ],
36239 [
36240 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
36241 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
36242 ],
36243 [
36244 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
36245 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
36246 ],
36247 [
36248 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
36249 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
36250 ],
36251 [
36252 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
36253 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
36254 ],
36255 [
36256 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
36257 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
36258 ],
36259 [
36260 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
36261 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
36262 ],
36263 [
36264 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
36265 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
36266 ],
36267 [
36268 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
36269 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
36270 ],
36271 [
36272 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
36273 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
36274 ],
36275 [
36276 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
36277 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
36278 ],
36279 [
36280 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
36281 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
36282 ],
36283 [
36284 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
36285 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
36286 ],
36287 [
36288 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
36289 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
36290 ],
36291 [
36292 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
36293 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
36294 ],
36295 [
36296 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
36297 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
36298 ],
36299 [
36300 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
36301 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
36302 ],
36303 [
36304 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
36305 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
36306 ],
36307 [
36308 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
36309 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
36310 ],
36311 [
36312 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
36313 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
36314 ],
36315 [
36316 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
36317 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
36318 ],
36319 [
36320 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
36321 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
36322 ],
36323 [
36324 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
36325 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
36326 ],
36327 [
36328 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
36329 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
36330 ],
36331 [
36332 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
36333 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
36334 ],
36335 [
36336 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
36337 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
36338 ],
36339 [
36340 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
36341 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
36342 ],
36343 [
36344 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
36345 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
36346 ],
36347 [
36348 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
36349 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
36350 ],
36351 [
36352 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
36353 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
36354 ],
36355 [
36356 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
36357 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
36358 ],
36359 [
36360 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
36361 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
36362 ],
36363 [
36364 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
36365 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
36366 ],
36367 [
36368 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
36369 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
36370 ],
36371 [
36372 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
36373 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
36374 ],
36375 [
36376 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
36377 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
36378 ],
36379 [
36380 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
36381 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
36382 ],
36383 [
36384 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
36385 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
36386 ],
36387 [
36388 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
36389 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
36390 ],
36391 [
36392 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
36393 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
36394 ],
36395 [
36396 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
36397 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
36398 ],
36399 [
36400 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
36401 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
36402 ],
36403 [
36404 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
36405 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
36406 ],
36407 [
36408 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
36409 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
36410 ],
36411 [
36412 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
36413 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
36414 ],
36415 [
36416 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
36417 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
36418 ],
36419 [
36420 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
36421 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
36422 ],
36423 [
36424 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
36425 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
36426 ],
36427 [
36428 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
36429 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
36430 ],
36431 [
36432 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
36433 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
36434 ],
36435 [
36436 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
36437 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
36438 ],
36439 [
36440 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
36441 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
36442 ],
36443 [
36444 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
36445 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
36446 ],
36447 [
36448 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
36449 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
36450 ],
36451 [
36452 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
36453 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
36454 ],
36455 [
36456 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
36457 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
36458 ],
36459 [
36460 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
36461 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
36462 ],
36463 [
36464 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
36465 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
36466 ],
36467 [
36468 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
36469 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
36470 ],
36471 [
36472 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
36473 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
36474 ]
36475 ]
36476 },
36477 naf: {
36478 wnd: 7,
36479 points: [
36480 [
36481 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
36482 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
36483 ],
36484 [
36485 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
36486 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
36487 ],
36488 [
36489 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
36490 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
36491 ],
36492 [
36493 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
36494 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
36495 ],
36496 [
36497 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
36498 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
36499 ],
36500 [
36501 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
36502 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
36503 ],
36504 [
36505 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
36506 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
36507 ],
36508 [
36509 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
36510 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
36511 ],
36512 [
36513 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
36514 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
36515 ],
36516 [
36517 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
36518 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
36519 ],
36520 [
36521 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
36522 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
36523 ],
36524 [
36525 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
36526 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
36527 ],
36528 [
36529 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
36530 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
36531 ],
36532 [
36533 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
36534 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
36535 ],
36536 [
36537 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
36538 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
36539 ],
36540 [
36541 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
36542 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
36543 ],
36544 [
36545 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
36546 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
36547 ],
36548 [
36549 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
36550 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
36551 ],
36552 [
36553 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
36554 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
36555 ],
36556 [
36557 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
36558 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
36559 ],
36560 [
36561 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
36562 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
36563 ],
36564 [
36565 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
36566 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
36567 ],
36568 [
36569 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
36570 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
36571 ],
36572 [
36573 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
36574 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
36575 ],
36576 [
36577 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
36578 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
36579 ],
36580 [
36581 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
36582 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
36583 ],
36584 [
36585 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
36586 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
36587 ],
36588 [
36589 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
36590 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
36591 ],
36592 [
36593 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
36594 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
36595 ],
36596 [
36597 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
36598 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
36599 ],
36600 [
36601 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
36602 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
36603 ],
36604 [
36605 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
36606 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
36607 ],
36608 [
36609 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
36610 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
36611 ],
36612 [
36613 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
36614 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
36615 ],
36616 [
36617 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
36618 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
36619 ],
36620 [
36621 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
36622 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
36623 ],
36624 [
36625 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
36626 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
36627 ],
36628 [
36629 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
36630 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
36631 ],
36632 [
36633 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
36634 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
36635 ],
36636 [
36637 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
36638 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
36639 ],
36640 [
36641 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
36642 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
36643 ],
36644 [
36645 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
36646 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
36647 ],
36648 [
36649 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
36650 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
36651 ],
36652 [
36653 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
36654 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
36655 ],
36656 [
36657 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
36658 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
36659 ],
36660 [
36661 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
36662 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
36663 ],
36664 [
36665 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
36666 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
36667 ],
36668 [
36669 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
36670 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
36671 ],
36672 [
36673 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
36674 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
36675 ],
36676 [
36677 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
36678 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
36679 ],
36680 [
36681 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
36682 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
36683 ],
36684 [
36685 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
36686 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
36687 ],
36688 [
36689 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
36690 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
36691 ],
36692 [
36693 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
36694 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
36695 ],
36696 [
36697 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
36698 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
36699 ],
36700 [
36701 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
36702 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
36703 ],
36704 [
36705 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
36706 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
36707 ],
36708 [
36709 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
36710 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
36711 ],
36712 [
36713 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
36714 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
36715 ],
36716 [
36717 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
36718 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
36719 ],
36720 [
36721 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
36722 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
36723 ],
36724 [
36725 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
36726 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
36727 ],
36728 [
36729 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
36730 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
36731 ],
36732 [
36733 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
36734 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
36735 ],
36736 [
36737 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
36738 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
36739 ],
36740 [
36741 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
36742 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
36743 ],
36744 [
36745 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
36746 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
36747 ],
36748 [
36749 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
36750 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
36751 ],
36752 [
36753 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
36754 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
36755 ],
36756 [
36757 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
36758 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
36759 ],
36760 [
36761 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
36762 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
36763 ],
36764 [
36765 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
36766 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
36767 ],
36768 [
36769 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
36770 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
36771 ],
36772 [
36773 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
36774 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
36775 ],
36776 [
36777 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
36778 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
36779 ],
36780 [
36781 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
36782 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
36783 ],
36784 [
36785 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
36786 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
36787 ],
36788 [
36789 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
36790 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
36791 ],
36792 [
36793 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
36794 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
36795 ],
36796 [
36797 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
36798 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
36799 ],
36800 [
36801 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
36802 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
36803 ],
36804 [
36805 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
36806 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
36807 ],
36808 [
36809 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
36810 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
36811 ],
36812 [
36813 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
36814 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
36815 ],
36816 [
36817 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
36818 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
36819 ],
36820 [
36821 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
36822 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
36823 ],
36824 [
36825 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
36826 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
36827 ],
36828 [
36829 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
36830 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
36831 ],
36832 [
36833 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
36834 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
36835 ],
36836 [
36837 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
36838 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
36839 ],
36840 [
36841 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
36842 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
36843 ],
36844 [
36845 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
36846 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
36847 ],
36848 [
36849 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
36850 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
36851 ],
36852 [
36853 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
36854 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
36855 ],
36856 [
36857 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
36858 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
36859 ],
36860 [
36861 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
36862 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
36863 ],
36864 [
36865 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
36866 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
36867 ],
36868 [
36869 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
36870 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
36871 ],
36872 [
36873 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
36874 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
36875 ],
36876 [
36877 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
36878 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
36879 ],
36880 [
36881 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
36882 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
36883 ],
36884 [
36885 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
36886 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
36887 ],
36888 [
36889 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
36890 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
36891 ],
36892 [
36893 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
36894 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
36895 ],
36896 [
36897 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
36898 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
36899 ],
36900 [
36901 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
36902 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
36903 ],
36904 [
36905 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
36906 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
36907 ],
36908 [
36909 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
36910 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
36911 ],
36912 [
36913 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
36914 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
36915 ],
36916 [
36917 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
36918 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
36919 ],
36920 [
36921 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
36922 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
36923 ],
36924 [
36925 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
36926 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
36927 ],
36928 [
36929 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
36930 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
36931 ],
36932 [
36933 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
36934 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
36935 ],
36936 [
36937 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
36938 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
36939 ],
36940 [
36941 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
36942 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
36943 ],
36944 [
36945 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
36946 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
36947 ],
36948 [
36949 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
36950 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
36951 ],
36952 [
36953 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
36954 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
36955 ],
36956 [
36957 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
36958 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
36959 ],
36960 [
36961 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
36962 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
36963 ],
36964 [
36965 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
36966 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
36967 ],
36968 [
36969 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
36970 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
36971 ],
36972 [
36973 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
36974 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
36975 ],
36976 [
36977 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
36978 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
36979 ],
36980 [
36981 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
36982 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
36983 ],
36984 [
36985 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
36986 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
36987 ]
36988 ]
36989 }
36990};
ebd8d4e8 36991
8b095871
IC
36992},{}],54:[function(require,module,exports){
36993'use strict';
ebd8d4e8 36994
8b095871
IC
36995var utils = exports;
36996var BN = require('bn.js');
ebd8d4e8 36997
8b095871
IC
36998utils.assert = function assert(val, msg) {
36999 if (!val)
37000 throw new Error(msg || 'Assertion failed');
37001};
ebd8d4e8 37002
8b095871
IC
37003function toArray(msg, enc) {
37004 if (Array.isArray(msg))
37005 return msg.slice();
37006 if (!msg)
37007 return [];
37008 var res = [];
37009 if (typeof msg !== 'string') {
37010 for (var i = 0; i < msg.length; i++)
37011 res[i] = msg[i] | 0;
37012 return res;
37013 }
37014 if (!enc) {
37015 for (var i = 0; i < msg.length; i++) {
37016 var c = msg.charCodeAt(i);
37017 var hi = c >> 8;
37018 var lo = c & 0xff;
37019 if (hi)
37020 res.push(hi, lo);
37021 else
37022 res.push(lo);
37023 }
37024 } else if (enc === 'hex') {
37025 msg = msg.replace(/[^a-z0-9]+/ig, '');
37026 if (msg.length % 2 !== 0)
37027 msg = '0' + msg;
37028 for (var i = 0; i < msg.length; i += 2)
37029 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 37030 }
8b095871 37031 return res;
ebd8d4e8 37032}
8b095871 37033utils.toArray = toArray;
ebd8d4e8 37034
8b095871
IC
37035function zero2(word) {
37036 if (word.length === 1)
37037 return '0' + word;
37038 else
37039 return word;
37040}
37041utils.zero2 = zero2;
ab78acc6 37042
8b095871
IC
37043function toHex(msg) {
37044 var res = '';
37045 for (var i = 0; i < msg.length; i++)
37046 res += zero2(msg[i].toString(16));
37047 return res;
37048}
37049utils.toHex = toHex;
ebd8d4e8 37050
8b095871
IC
37051utils.encode = function encode(arr, enc) {
37052 if (enc === 'hex')
37053 return toHex(arr);
37054 else
37055 return arr;
37056};
ebd8d4e8 37057
8b095871
IC
37058// Represent num in a w-NAF form
37059function getNAF(num, w) {
37060 var naf = [];
37061 var ws = 1 << (w + 1);
37062 var k = num.clone();
37063 while (k.cmpn(1) >= 0) {
37064 var z;
37065 if (k.isOdd()) {
37066 var mod = k.andln(ws - 1);
37067 if (mod > (ws >> 1) - 1)
37068 z = (ws >> 1) - mod;
37069 else
37070 z = mod;
37071 k.isubn(z);
37072 } else {
37073 z = 0;
37074 }
37075 naf.push(z);
37076
37077 // Optimization, shift by word if possible
37078 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
37079 for (var i = 1; i < shift; i++)
37080 naf.push(0);
37081 k.iushrn(shift);
37082 }
37083
37084 return naf;
37085}
37086utils.getNAF = getNAF;
37087
37088// Represent k1, k2 in a Joint Sparse Form
37089function getJSF(k1, k2) {
37090 var jsf = [
37091 [],
37092 []
37093 ];
37094
37095 k1 = k1.clone();
37096 k2 = k2.clone();
37097 var d1 = 0;
37098 var d2 = 0;
37099 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
37100
37101 // First phase
37102 var m14 = (k1.andln(3) + d1) & 3;
37103 var m24 = (k2.andln(3) + d2) & 3;
37104 if (m14 === 3)
37105 m14 = -1;
37106 if (m24 === 3)
37107 m24 = -1;
37108 var u1;
37109 if ((m14 & 1) === 0) {
37110 u1 = 0;
37111 } else {
37112 var m8 = (k1.andln(7) + d1) & 7;
37113 if ((m8 === 3 || m8 === 5) && m24 === 2)
37114 u1 = -m14;
37115 else
37116 u1 = m14;
37117 }
37118 jsf[0].push(u1);
ebd8d4e8 37119
8b095871
IC
37120 var u2;
37121 if ((m24 & 1) === 0) {
37122 u2 = 0;
37123 } else {
37124 var m8 = (k2.andln(7) + d2) & 7;
37125 if ((m8 === 3 || m8 === 5) && m14 === 2)
37126 u2 = -m24;
37127 else
37128 u2 = m24;
37129 }
37130 jsf[1].push(u2);
ebd8d4e8 37131
8b095871
IC
37132 // Second phase
37133 if (2 * d1 === u1 + 1)
37134 d1 = 1 - d1;
37135 if (2 * d2 === u2 + 1)
37136 d2 = 1 - d2;
37137 k1.iushrn(1);
37138 k2.iushrn(1);
37139 }
ebd8d4e8 37140
8b095871
IC
37141 return jsf;
37142}
37143utils.getJSF = getJSF;
ab78acc6 37144
8b095871
IC
37145function cachedProperty(obj, name, computer) {
37146 var key = '_' + name;
37147 obj.prototype[name] = function cachedProperty() {
37148 return this[key] !== undefined ? this[key] :
37149 this[key] = computer.call(this);
37150 };
37151}
37152utils.cachedProperty = cachedProperty;
ebd8d4e8 37153
8b095871
IC
37154function parseBytes(bytes) {
37155 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
37156 bytes;
37157}
37158utils.parseBytes = parseBytes;
ebd8d4e8 37159
8b095871
IC
37160function intFromLE(bytes) {
37161 return new BN(bytes, 'hex', 'le');
37162}
37163utils.intFromLE = intFromLE;
ebd8d4e8 37164
8b095871
IC
37165
37166},{"bn.js":33}],55:[function(require,module,exports){
37167module.exports={
37168 "_args": [
37169 [
37170 {
37171 "raw": "elliptic@^6.2.3",
37172 "scope": null,
37173 "escapedName": "elliptic",
37174 "name": "elliptic",
37175 "rawSpec": "^6.2.3",
37176 "spec": ">=6.2.3 <7.0.0",
37177 "type": "range"
37178 },
37179 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
37180 ]
37181 ],
37182 "_from": "elliptic@>=6.2.3 <7.0.0",
37183 "_id": "elliptic@6.3.3",
37184 "_inCache": true,
37185 "_location": "/elliptic",
37186 "_nodeVersion": "7.0.0",
37187 "_npmOperationalInternal": {
37188 "host": "packages-18-east.internal.npmjs.com",
37189 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
37190 },
37191 "_npmUser": {
37192 "name": "indutny",
37193 "email": "fedor@indutny.com"
37194 },
37195 "_npmVersion": "3.10.8",
37196 "_phantomChildren": {},
37197 "_requested": {
37198 "raw": "elliptic@^6.2.3",
37199 "scope": null,
37200 "escapedName": "elliptic",
37201 "name": "elliptic",
37202 "rawSpec": "^6.2.3",
37203 "spec": ">=6.2.3 <7.0.0",
37204 "type": "range"
37205 },
37206 "_requiredBy": [
37207 "/browserify-sign",
37208 "/create-ecdh",
37209 "/secp256k1"
37210 ],
37211 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
37212 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37213 "_shrinkwrap": null,
37214 "_spec": "elliptic@^6.2.3",
37215 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
37216 "author": {
37217 "name": "Fedor Indutny",
37218 "email": "fedor@indutny.com"
37219 },
37220 "bugs": {
37221 "url": "https://github.com/indutny/elliptic/issues"
37222 },
37223 "dependencies": {
37224 "bn.js": "^4.4.0",
37225 "brorand": "^1.0.1",
37226 "hash.js": "^1.0.0",
37227 "inherits": "^2.0.1"
37228 },
37229 "description": "EC cryptography",
37230 "devDependencies": {
37231 "brfs": "^1.4.3",
37232 "coveralls": "^2.11.3",
37233 "grunt": "^0.4.5",
37234 "grunt-browserify": "^5.0.0",
37235 "grunt-cli": "^1.2.0",
37236 "grunt-contrib-connect": "^1.0.0",
37237 "grunt-contrib-copy": "^1.0.0",
37238 "grunt-contrib-uglify": "^1.0.1",
37239 "grunt-mocha-istanbul": "^3.0.1",
37240 "grunt-saucelabs": "^8.6.2",
37241 "istanbul": "^0.4.2",
37242 "jscs": "^2.9.0",
37243 "jshint": "^2.6.0",
37244 "mocha": "^2.1.0"
37245 },
37246 "directories": {},
37247 "dist": {
37248 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37249 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
37250 },
37251 "files": [
37252 "lib"
37253 ],
37254 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
37255 "homepage": "https://github.com/indutny/elliptic",
37256 "keywords": [
37257 "EC",
37258 "Elliptic",
37259 "curve",
37260 "Cryptography"
37261 ],
37262 "license": "MIT",
37263 "main": "lib/elliptic.js",
37264 "maintainers": [
37265 {
37266 "name": "indutny",
37267 "email": "fedor@indutny.com"
37268 }
37269 ],
37270 "name": "elliptic",
37271 "optionalDependencies": {},
37272 "readme": "ERROR: No README data found!",
37273 "repository": {
37274 "type": "git",
37275 "url": "git+ssh://git@github.com/indutny/elliptic.git"
37276 },
37277 "scripts": {
37278 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37279 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37280 "lint": "npm run jscs && npm run jshint",
37281 "test": "npm run lint && npm run unit",
37282 "unit": "istanbul test _mocha --reporter=spec test/index.js",
37283 "version": "grunt dist && git add dist/"
37284 },
37285 "version": "6.3.3"
ebd8d4e8
IC
37286}
37287
8b095871
IC
37288},{}],56:[function(require,module,exports){
37289(function (Buffer){
37290'use strict';
ab78acc6 37291
8b095871
IC
37292var isHexPrefixed = require('is-hex-prefixed');
37293var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 37294
8b095871
IC
37295/**
37296 * Pads a `String` to have an even length
37297 * @param {String} value
37298 * @return {String} output
37299 */
37300function padToEven(value) {
37301 var a = value; // eslint-disable-line
37302
37303 if (typeof a !== 'string') {
37304 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
37305 }
37306
37307 if (a.length % 2) {
37308 a = '0' + a;
37309 }
37310
37311 return a;
ebd8d4e8
IC
37312}
37313
8b095871
IC
37314/**
37315 * Converts a `Number` into a hex `String`
37316 * @param {Number} i
37317 * @return {String}
37318 */
37319function intToHex(i) {
37320 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 37321
8b095871
IC
37322 return '0x' + padToEven(hex);
37323}
ab78acc6 37324
8b095871
IC
37325/**
37326 * Converts an `Number` to a `Buffer`
37327 * @param {Number} i
37328 * @return {Buffer}
37329 */
37330function intToBuffer(i) {
37331 var hex = intToHex(i);
ab78acc6 37332
8b095871
IC
37333 return new Buffer(hex.slice(2), 'hex');
37334}
ebd8d4e8 37335
8b095871
IC
37336/**
37337 * Get the binary size of a string
37338 * @param {String} str
37339 * @return {Number}
37340 */
37341function getBinarySize(str) {
37342 if (typeof str !== 'string') {
37343 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
37344 }
ebd8d4e8 37345
8b095871
IC
37346 return Buffer.byteLength(str, 'utf8');
37347}
37348
37349/**
37350 * Returns TRUE if the first specified array contains all elements
37351 * from the second one. FALSE otherwise.
37352 *
37353 * @param {array} superset
37354 * @param {array} subset
37355 *
37356 * @returns {boolean}
37357 */
37358function arrayContainsArray(superset, subset, some) {
37359 if (Array.isArray(superset) !== true) {
37360 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
37361 }
37362 if (Array.isArray(subset) !== true) {
37363 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
37364 }
37365
8b095871
IC
37366 return subset[Boolean(some) && 'some' || 'every'](function (value) {
37367 return superset.indexOf(value) >= 0;
37368 });
ebd8d4e8
IC
37369}
37370
8b095871
IC
37371/**
37372 * Should be called to get utf8 from it's hex representation
37373 *
37374 * @method toUtf8
37375 * @param {String} string in hex
37376 * @returns {String} ascii string representation of hex value
37377 */
37378function toUtf8(hex) {
37379 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 37380
8b095871
IC
37381 return bufferValue.toString('utf8');
37382}
ab78acc6 37383
8b095871
IC
37384/**
37385 * Should be called to get ascii from it's hex representation
37386 *
37387 * @method toAscii
37388 * @param {String} string in hex
37389 * @returns {String} ascii string representation of hex value
37390 */
37391function toAscii(hex) {
37392 var str = ''; // eslint-disable-line
37393 var i = 0,
37394 l = hex.length; // eslint-disable-line
ebd8d4e8 37395
8b095871
IC
37396 if (hex.substring(0, 2) === '0x') {
37397 i = 2;
37398 }
ebd8d4e8 37399
8b095871
IC
37400 for (; i < l; i += 2) {
37401 var code = parseInt(hex.substr(i, 2), 16);
37402 str += String.fromCharCode(code);
ebd8d4e8 37403 }
8b095871
IC
37404
37405 return str;
ebd8d4e8
IC
37406}
37407
8b095871
IC
37408/**
37409 * Should be called to get hex representation (prefixed by 0x) of utf8 string
37410 *
37411 * @method fromUtf8
37412 * @param {String} string
37413 * @param {Number} optional padding
37414 * @returns {String} hex representation of input string
37415 */
37416function fromUtf8(stringValue) {
37417 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 37418
8b095871
IC
37419 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
37420}
ab78acc6 37421
8b095871
IC
37422/**
37423 * Should be called to get hex representation (prefixed by 0x) of ascii string
37424 *
37425 * @method fromAscii
37426 * @param {String} string
37427 * @param {Number} optional padding
37428 * @returns {String} hex representation of input string
37429 */
37430function fromAscii(stringValue) {
37431 var hex = ''; // eslint-disable-line
37432 for (var i = 0; i < stringValue.length; i++) {
37433 // eslint-disable-line
37434 var code = stringValue.charCodeAt(i);
37435 var n = code.toString(16);
37436 hex += n.length < 2 ? '0' + n : n;
37437 }
ab78acc6 37438
8b095871
IC
37439 return '0x' + hex;
37440}
ebd8d4e8 37441
8b095871
IC
37442/**
37443 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
37444 *
37445 * @method getKeys get specific key from inner object array of objects
37446 * @param {String} params
37447 * @param {String} key
37448 * @param {Boolean} allowEmpty
37449 * @returns {Array} output just a simple array of output keys
37450 */
37451function getKeys(params, key, allowEmpty) {
37452 if (!Array.isArray(params)) {
37453 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
37454 }
37455 if (typeof key !== 'string') {
37456 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
37457 }
ebd8d4e8 37458
8b095871 37459 var result = []; // eslint-disable-line
ebd8d4e8 37460
8b095871
IC
37461 for (var i = 0; i < params.length; i++) {
37462 // eslint-disable-line
37463 var value = params[i][key]; // eslint-disable-line
37464 if (allowEmpty && !value) {
37465 value = '';
37466 } else if (typeof value !== 'string') {
37467 throw new Error('invalid abi');
37468 }
37469 result.push(value);
37470 }
ebd8d4e8 37471
8b095871 37472 return result;
ebd8d4e8
IC
37473}
37474
8b095871
IC
37475/**
37476 * Is the string a hex string.
37477 *
37478 * @method check if string is hex string of specific length
37479 * @param {String} value
37480 * @param {Number} length
37481 * @returns {Boolean} output the string is a hex string
37482 */
37483function isHexString(value, length) {
37484 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
37485 return false;
ab78acc6
IC
37486 }
37487
8b095871
IC
37488 if (length && value.length !== 2 + 2 * length) {
37489 return false;
37490 }
ebd8d4e8 37491
8b095871
IC
37492 return true;
37493}
ab78acc6 37494
8b095871
IC
37495module.exports = {
37496 arrayContainsArray: arrayContainsArray,
37497 intToBuffer: intToBuffer,
37498 getBinarySize: getBinarySize,
37499 isHexPrefixed: isHexPrefixed,
37500 stripHexPrefix: stripHexPrefix,
37501 padToEven: padToEven,
37502 intToHex: intToHex,
37503 fromAscii: fromAscii,
37504 fromUtf8: fromUtf8,
37505 toAscii: toAscii,
37506 toUtf8: toUtf8,
37507 getKeys: getKeys,
37508 isHexString: isHexString
37509};
37510}).call(this,require("buffer").Buffer)
37511},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
37512var hash = exports;
37513
37514hash.utils = require('./hash/utils');
37515hash.common = require('./hash/common');
37516hash.sha = require('./hash/sha');
37517hash.ripemd = require('./hash/ripemd');
37518hash.hmac = require('./hash/hmac');
37519
37520// Proxy hash functions to the main object
37521hash.sha1 = hash.sha.sha1;
37522hash.sha256 = hash.sha.sha256;
37523hash.sha224 = hash.sha.sha224;
37524hash.sha384 = hash.sha.sha384;
37525hash.sha512 = hash.sha.sha512;
37526hash.ripemd160 = hash.ripemd.ripemd160;
37527
37528},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
37529var hash = require('../hash');
37530var utils = hash.utils;
37531var assert = utils.assert;
37532
37533function BlockHash() {
37534 this.pending = null;
37535 this.pendingTotal = 0;
37536 this.blockSize = this.constructor.blockSize;
37537 this.outSize = this.constructor.outSize;
37538 this.hmacStrength = this.constructor.hmacStrength;
37539 this.padLength = this.constructor.padLength / 8;
37540 this.endian = 'big';
37541
37542 this._delta8 = this.blockSize / 8;
37543 this._delta32 = this.blockSize / 32;
37544}
37545exports.BlockHash = BlockHash;
37546
37547BlockHash.prototype.update = function update(msg, enc) {
37548 // Convert message to array, pad it, and join into 32bit blocks
37549 msg = utils.toArray(msg, enc);
37550 if (!this.pending)
37551 this.pending = msg;
37552 else
37553 this.pending = this.pending.concat(msg);
37554 this.pendingTotal += msg.length;
ab78acc6 37555
8b095871
IC
37556 // Enough data, try updating
37557 if (this.pending.length >= this._delta8) {
37558 msg = this.pending;
ebd8d4e8 37559
8b095871
IC
37560 // Process pending data in blocks
37561 var r = msg.length % this._delta8;
37562 this.pending = msg.slice(msg.length - r, msg.length);
37563 if (this.pending.length === 0)
37564 this.pending = null;
ebd8d4e8 37565
8b095871
IC
37566 msg = utils.join32(msg, 0, msg.length - r, this.endian);
37567 for (var i = 0; i < msg.length; i += this._delta32)
37568 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
37569 }
37570
8b095871
IC
37571 return this;
37572};
ebd8d4e8 37573
8b095871
IC
37574BlockHash.prototype.digest = function digest(enc) {
37575 this.update(this._pad());
37576 assert(this.pending === null);
ebd8d4e8 37577
8b095871
IC
37578 return this._digest(enc);
37579};
ebd8d4e8 37580
8b095871
IC
37581BlockHash.prototype._pad = function pad() {
37582 var len = this.pendingTotal;
37583 var bytes = this._delta8;
37584 var k = bytes - ((len + this.padLength) % bytes);
37585 var res = new Array(k + this.padLength);
37586 res[0] = 0x80;
37587 for (var i = 1; i < k; i++)
37588 res[i] = 0;
37589
37590 // Append length
37591 len <<= 3;
37592 if (this.endian === 'big') {
37593 for (var t = 8; t < this.padLength; t++)
37594 res[i++] = 0;
37595
37596 res[i++] = 0;
37597 res[i++] = 0;
37598 res[i++] = 0;
37599 res[i++] = 0;
37600 res[i++] = (len >>> 24) & 0xff;
37601 res[i++] = (len >>> 16) & 0xff;
37602 res[i++] = (len >>> 8) & 0xff;
37603 res[i++] = len & 0xff;
ebd8d4e8 37604 } else {
8b095871
IC
37605 res[i++] = len & 0xff;
37606 res[i++] = (len >>> 8) & 0xff;
37607 res[i++] = (len >>> 16) & 0xff;
37608 res[i++] = (len >>> 24) & 0xff;
37609 res[i++] = 0;
37610 res[i++] = 0;
37611 res[i++] = 0;
37612 res[i++] = 0;
ebd8d4e8 37613
8b095871
IC
37614 for (var t = 8; t < this.padLength; t++)
37615 res[i++] = 0;
ebd8d4e8
IC
37616 }
37617
8b095871
IC
37618 return res;
37619};
ebd8d4e8 37620
8b095871
IC
37621},{"../hash":57}],59:[function(require,module,exports){
37622var hmac = exports;
ebd8d4e8 37623
8b095871
IC
37624var hash = require('../hash');
37625var utils = hash.utils;
37626var assert = utils.assert;
ebd8d4e8 37627
8b095871
IC
37628function Hmac(hash, key, enc) {
37629 if (!(this instanceof Hmac))
37630 return new Hmac(hash, key, enc);
37631 this.Hash = hash;
37632 this.blockSize = hash.blockSize / 8;
37633 this.outSize = hash.outSize / 8;
37634 this.inner = null;
37635 this.outer = null;
ebd8d4e8 37636
8b095871 37637 this._init(utils.toArray(key, enc));
ebd8d4e8 37638}
8b095871 37639module.exports = Hmac;
ebd8d4e8 37640
8b095871
IC
37641Hmac.prototype._init = function init(key) {
37642 // Shorten key, if needed
37643 if (key.length > this.blockSize)
37644 key = new this.Hash().update(key).digest();
37645 assert(key.length <= this.blockSize);
ebd8d4e8 37646
8b095871
IC
37647 // Add padding to key
37648 for (var i = key.length; i < this.blockSize; i++)
37649 key.push(0);
ab78acc6 37650
8b095871
IC
37651 for (var i = 0; i < key.length; i++)
37652 key[i] ^= 0x36;
37653 this.inner = new this.Hash().update(key);
ab78acc6 37654
8b095871
IC
37655 // 0x36 ^ 0x5c = 0x6a
37656 for (var i = 0; i < key.length; i++)
37657 key[i] ^= 0x6a;
37658 this.outer = new this.Hash().update(key);
37659};
ebd8d4e8 37660
8b095871
IC
37661Hmac.prototype.update = function update(msg, enc) {
37662 this.inner.update(msg, enc);
37663 return this;
37664};
ab78acc6 37665
8b095871
IC
37666Hmac.prototype.digest = function digest(enc) {
37667 this.outer.update(this.inner.digest());
37668 return this.outer.digest(enc);
37669};
ab78acc6 37670
8b095871
IC
37671},{"../hash":57}],60:[function(require,module,exports){
37672var hash = require('../hash');
37673var utils = hash.utils;
37674
37675var rotl32 = utils.rotl32;
37676var sum32 = utils.sum32;
37677var sum32_3 = utils.sum32_3;
37678var sum32_4 = utils.sum32_4;
37679var BlockHash = hash.common.BlockHash;
37680
37681function RIPEMD160() {
37682 if (!(this instanceof RIPEMD160))
37683 return new RIPEMD160();
37684
37685 BlockHash.call(this);
37686
37687 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
37688 this.endian = 'little';
37689}
37690utils.inherits(RIPEMD160, BlockHash);
37691exports.ripemd160 = RIPEMD160;
37692
37693RIPEMD160.blockSize = 512;
37694RIPEMD160.outSize = 160;
37695RIPEMD160.hmacStrength = 192;
37696RIPEMD160.padLength = 64;
37697
37698RIPEMD160.prototype._update = function update(msg, start) {
37699 var A = this.h[0];
37700 var B = this.h[1];
37701 var C = this.h[2];
37702 var D = this.h[3];
37703 var E = this.h[4];
37704 var Ah = A;
37705 var Bh = B;
37706 var Ch = C;
37707 var Dh = D;
37708 var Eh = E;
37709 for (var j = 0; j < 80; j++) {
37710 var T = sum32(
37711 rotl32(
37712 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
37713 s[j]),
37714 E);
37715 A = E;
37716 E = D;
37717 D = rotl32(C, 10);
37718 C = B;
37719 B = T;
37720 T = sum32(
37721 rotl32(
37722 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
37723 sh[j]),
37724 Eh);
37725 Ah = Eh;
37726 Eh = Dh;
37727 Dh = rotl32(Ch, 10);
37728 Ch = Bh;
37729 Bh = T;
37730 }
37731 T = sum32_3(this.h[1], C, Dh);
37732 this.h[1] = sum32_3(this.h[2], D, Eh);
37733 this.h[2] = sum32_3(this.h[3], E, Ah);
37734 this.h[3] = sum32_3(this.h[4], A, Bh);
37735 this.h[4] = sum32_3(this.h[0], B, Ch);
37736 this.h[0] = T;
37737};
ebd8d4e8 37738
8b095871
IC
37739RIPEMD160.prototype._digest = function digest(enc) {
37740 if (enc === 'hex')
37741 return utils.toHex32(this.h, 'little');
37742 else
37743 return utils.split32(this.h, 'little');
37744};
ebd8d4e8 37745
8b095871
IC
37746function f(j, x, y, z) {
37747 if (j <= 15)
37748 return x ^ y ^ z;
37749 else if (j <= 31)
37750 return (x & y) | ((~x) & z);
37751 else if (j <= 47)
37752 return (x | (~y)) ^ z;
37753 else if (j <= 63)
37754 return (x & z) | (y & (~z));
37755 else
37756 return x ^ (y | (~z));
37757}
37758
37759function K(j) {
37760 if (j <= 15)
37761 return 0x00000000;
37762 else if (j <= 31)
37763 return 0x5a827999;
37764 else if (j <= 47)
37765 return 0x6ed9eba1;
37766 else if (j <= 63)
37767 return 0x8f1bbcdc;
37768 else
37769 return 0xa953fd4e;
37770}
37771
37772function Kh(j) {
37773 if (j <= 15)
37774 return 0x50a28be6;
37775 else if (j <= 31)
37776 return 0x5c4dd124;
37777 else if (j <= 47)
37778 return 0x6d703ef3;
37779 else if (j <= 63)
37780 return 0x7a6d76e9;
37781 else
37782 return 0x00000000;
37783}
ebd8d4e8 37784
8b095871
IC
37785var r = [
37786 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
37787 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
37788 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
37789 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
37790 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
37791];
ebd8d4e8 37792
8b095871
IC
37793var rh = [
37794 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
37795 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
37796 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
37797 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
37798 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
37799];
ebd8d4e8 37800
8b095871
IC
37801var s = [
37802 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
37803 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
37804 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
37805 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
37806 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
37807];
ebd8d4e8 37808
8b095871
IC
37809var sh = [
37810 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
37811 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
37812 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
37813 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
37814 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
37815];
ebd8d4e8 37816
8b095871
IC
37817},{"../hash":57}],61:[function(require,module,exports){
37818var hash = require('../hash');
37819var utils = hash.utils;
37820var assert = utils.assert;
37821
37822var rotr32 = utils.rotr32;
37823var rotl32 = utils.rotl32;
37824var sum32 = utils.sum32;
37825var sum32_4 = utils.sum32_4;
37826var sum32_5 = utils.sum32_5;
37827var rotr64_hi = utils.rotr64_hi;
37828var rotr64_lo = utils.rotr64_lo;
37829var shr64_hi = utils.shr64_hi;
37830var shr64_lo = utils.shr64_lo;
37831var sum64 = utils.sum64;
37832var sum64_hi = utils.sum64_hi;
37833var sum64_lo = utils.sum64_lo;
37834var sum64_4_hi = utils.sum64_4_hi;
37835var sum64_4_lo = utils.sum64_4_lo;
37836var sum64_5_hi = utils.sum64_5_hi;
37837var sum64_5_lo = utils.sum64_5_lo;
37838var BlockHash = hash.common.BlockHash;
37839
37840var sha256_K = [
37841 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
37842 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37843 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
37844 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37845 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
37846 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37847 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
37848 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37849 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
37850 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37851 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
37852 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37853 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
37854 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37855 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
37856 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
37857];
ebd8d4e8 37858
8b095871
IC
37859var sha512_K = [
37860 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
37861 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37862 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
37863 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37864 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
37865 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37866 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
37867 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37868 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
37869 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37870 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
37871 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37872 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
37873 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37874 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
37875 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37876 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
37877 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37878 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
37879 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37880 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
37881 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37882 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
37883 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37884 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
37885 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37886 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
37887 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37888 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
37889 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37890 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
37891 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37892 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
37893 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37894 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
37895 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37896 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
37897 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37898 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
37899 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
37900];
ebd8d4e8 37901
8b095871
IC
37902var sha1_K = [
37903 0x5A827999, 0x6ED9EBA1,
37904 0x8F1BBCDC, 0xCA62C1D6
37905];
ebd8d4e8 37906
8b095871
IC
37907function SHA256() {
37908 if (!(this instanceof SHA256))
37909 return new SHA256();
37910
37911 BlockHash.call(this);
37912 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
37913 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
37914 this.k = sha256_K;
37915 this.W = new Array(64);
37916}
37917utils.inherits(SHA256, BlockHash);
37918exports.sha256 = SHA256;
37919
37920SHA256.blockSize = 512;
37921SHA256.outSize = 256;
37922SHA256.hmacStrength = 192;
37923SHA256.padLength = 64;
37924
37925SHA256.prototype._update = function _update(msg, start) {
37926 var W = this.W;
37927
37928 for (var i = 0; i < 16; i++)
37929 W[i] = msg[start + i];
37930 for (; i < W.length; i++)
37931 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
37932
37933 var a = this.h[0];
37934 var b = this.h[1];
37935 var c = this.h[2];
37936 var d = this.h[3];
37937 var e = this.h[4];
37938 var f = this.h[5];
37939 var g = this.h[6];
37940 var h = this.h[7];
37941
37942 assert(this.k.length === W.length);
37943 for (var i = 0; i < W.length; i++) {
37944 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
37945 var T2 = sum32(s0_256(a), maj32(a, b, c));
37946 h = g;
37947 g = f;
37948 f = e;
37949 e = sum32(d, T1);
37950 d = c;
37951 c = b;
37952 b = a;
37953 a = sum32(T1, T2);
37954 }
37955
37956 this.h[0] = sum32(this.h[0], a);
37957 this.h[1] = sum32(this.h[1], b);
37958 this.h[2] = sum32(this.h[2], c);
37959 this.h[3] = sum32(this.h[3], d);
37960 this.h[4] = sum32(this.h[4], e);
37961 this.h[5] = sum32(this.h[5], f);
37962 this.h[6] = sum32(this.h[6], g);
37963 this.h[7] = sum32(this.h[7], h);
37964};
ebd8d4e8 37965
8b095871
IC
37966SHA256.prototype._digest = function digest(enc) {
37967 if (enc === 'hex')
37968 return utils.toHex32(this.h, 'big');
37969 else
37970 return utils.split32(this.h, 'big');
37971};
ebd8d4e8 37972
8b095871
IC
37973function SHA224() {
37974 if (!(this instanceof SHA224))
37975 return new SHA224();
ebd8d4e8 37976
8b095871
IC
37977 SHA256.call(this);
37978 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
37979 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
37980}
37981utils.inherits(SHA224, SHA256);
37982exports.sha224 = SHA224;
ebd8d4e8 37983
8b095871
IC
37984SHA224.blockSize = 512;
37985SHA224.outSize = 224;
37986SHA224.hmacStrength = 192;
37987SHA224.padLength = 64;
ebd8d4e8 37988
8b095871
IC
37989SHA224.prototype._digest = function digest(enc) {
37990 // Just truncate output
37991 if (enc === 'hex')
37992 return utils.toHex32(this.h.slice(0, 7), 'big');
37993 else
37994 return utils.split32(this.h.slice(0, 7), 'big');
37995};
37996
37997function SHA512() {
37998 if (!(this instanceof SHA512))
37999 return new SHA512();
38000
38001 BlockHash.call(this);
38002 this.h = [ 0x6a09e667, 0xf3bcc908,
38003 0xbb67ae85, 0x84caa73b,
38004 0x3c6ef372, 0xfe94f82b,
38005 0xa54ff53a, 0x5f1d36f1,
38006 0x510e527f, 0xade682d1,
38007 0x9b05688c, 0x2b3e6c1f,
38008 0x1f83d9ab, 0xfb41bd6b,
38009 0x5be0cd19, 0x137e2179 ];
38010 this.k = sha512_K;
38011 this.W = new Array(160);
38012}
38013utils.inherits(SHA512, BlockHash);
38014exports.sha512 = SHA512;
38015
38016SHA512.blockSize = 1024;
38017SHA512.outSize = 512;
38018SHA512.hmacStrength = 192;
38019SHA512.padLength = 128;
38020
38021SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
38022 var W = this.W;
38023
38024 // 32 x 32bit words
38025 for (var i = 0; i < 32; i++)
38026 W[i] = msg[start + i];
38027 for (; i < W.length; i += 2) {
38028 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
38029 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
38030 var c1_hi = W[i - 14]; // i - 7
38031 var c1_lo = W[i - 13];
38032 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
38033 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
38034 var c3_hi = W[i - 32]; // i - 16
38035 var c3_lo = W[i - 31];
38036
38037 W[i] = sum64_4_hi(c0_hi, c0_lo,
38038 c1_hi, c1_lo,
38039 c2_hi, c2_lo,
38040 c3_hi, c3_lo);
38041 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
38042 c1_hi, c1_lo,
38043 c2_hi, c2_lo,
38044 c3_hi, c3_lo);
ebd8d4e8 38045 }
8b095871
IC
38046};
38047
38048SHA512.prototype._update = function _update(msg, start) {
38049 this._prepareBlock(msg, start);
38050
38051 var W = this.W;
38052
38053 var ah = this.h[0];
38054 var al = this.h[1];
38055 var bh = this.h[2];
38056 var bl = this.h[3];
38057 var ch = this.h[4];
38058 var cl = this.h[5];
38059 var dh = this.h[6];
38060 var dl = this.h[7];
38061 var eh = this.h[8];
38062 var el = this.h[9];
38063 var fh = this.h[10];
38064 var fl = this.h[11];
38065 var gh = this.h[12];
38066 var gl = this.h[13];
38067 var hh = this.h[14];
38068 var hl = this.h[15];
38069
38070 assert(this.k.length === W.length);
38071 for (var i = 0; i < W.length; i += 2) {
38072 var c0_hi = hh;
38073 var c0_lo = hl;
38074 var c1_hi = s1_512_hi(eh, el);
38075 var c1_lo = s1_512_lo(eh, el);
38076 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
38077 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
38078 var c3_hi = this.k[i];
38079 var c3_lo = this.k[i + 1];
38080 var c4_hi = W[i];
38081 var c4_lo = W[i + 1];
38082
38083 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
38084 c1_hi, c1_lo,
38085 c2_hi, c2_lo,
38086 c3_hi, c3_lo,
38087 c4_hi, c4_lo);
38088 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
38089 c1_hi, c1_lo,
38090 c2_hi, c2_lo,
38091 c3_hi, c3_lo,
38092 c4_hi, c4_lo);
38093
38094 var c0_hi = s0_512_hi(ah, al);
38095 var c0_lo = s0_512_lo(ah, al);
38096 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
38097 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
38098
38099 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
38100 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
38101
38102 hh = gh;
38103 hl = gl;
38104
38105 gh = fh;
38106 gl = fl;
38107
38108 fh = eh;
38109 fl = el;
38110
38111 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
38112 el = sum64_lo(dl, dl, T1_hi, T1_lo);
38113
38114 dh = ch;
38115 dl = cl;
38116
38117 ch = bh;
38118 cl = bl;
38119
38120 bh = ah;
38121 bl = al;
38122
38123 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
38124 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
38125 }
38126
38127 sum64(this.h, 0, ah, al);
38128 sum64(this.h, 2, bh, bl);
38129 sum64(this.h, 4, ch, cl);
38130 sum64(this.h, 6, dh, dl);
38131 sum64(this.h, 8, eh, el);
38132 sum64(this.h, 10, fh, fl);
38133 sum64(this.h, 12, gh, gl);
38134 sum64(this.h, 14, hh, hl);
38135};
38136
38137SHA512.prototype._digest = function digest(enc) {
38138 if (enc === 'hex')
38139 return utils.toHex32(this.h, 'big');
38140 else
38141 return utils.split32(this.h, 'big');
38142};
38143
38144function SHA384() {
38145 if (!(this instanceof SHA384))
38146 return new SHA384();
38147
38148 SHA512.call(this);
38149 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
38150 0x629a292a, 0x367cd507,
38151 0x9159015a, 0x3070dd17,
38152 0x152fecd8, 0xf70e5939,
38153 0x67332667, 0xffc00b31,
38154 0x8eb44a87, 0x68581511,
38155 0xdb0c2e0d, 0x64f98fa7,
38156 0x47b5481d, 0xbefa4fa4 ];
38157}
38158utils.inherits(SHA384, SHA512);
38159exports.sha384 = SHA384;
38160
38161SHA384.blockSize = 1024;
38162SHA384.outSize = 384;
38163SHA384.hmacStrength = 192;
38164SHA384.padLength = 128;
38165
38166SHA384.prototype._digest = function digest(enc) {
38167 if (enc === 'hex')
38168 return utils.toHex32(this.h.slice(0, 12), 'big');
38169 else
38170 return utils.split32(this.h.slice(0, 12), 'big');
38171};
ebd8d4e8 38172
8b095871
IC
38173function SHA1() {
38174 if (!(this instanceof SHA1))
38175 return new SHA1();
ebd8d4e8 38176
8b095871
IC
38177 BlockHash.call(this);
38178 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
38179 0x10325476, 0xc3d2e1f0 ];
38180 this.W = new Array(80);
38181}
ebd8d4e8 38182
8b095871
IC
38183utils.inherits(SHA1, BlockHash);
38184exports.sha1 = SHA1;
ebd8d4e8 38185
8b095871
IC
38186SHA1.blockSize = 512;
38187SHA1.outSize = 160;
38188SHA1.hmacStrength = 80;
38189SHA1.padLength = 64;
ebd8d4e8 38190
8b095871
IC
38191SHA1.prototype._update = function _update(msg, start) {
38192 var W = this.W;
ebd8d4e8 38193
8b095871
IC
38194 for (var i = 0; i < 16; i++)
38195 W[i] = msg[start + i];
ebd8d4e8 38196
8b095871
IC
38197 for(; i < W.length; i++)
38198 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 38199
8b095871
IC
38200 var a = this.h[0];
38201 var b = this.h[1];
38202 var c = this.h[2];
38203 var d = this.h[3];
38204 var e = this.h[4];
ebd8d4e8 38205
8b095871
IC
38206 for (var i = 0; i < W.length; i++) {
38207 var s = ~~(i / 20);
38208 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
38209 e = d;
38210 d = c;
38211 c = rotl32(b, 30);
38212 b = a;
38213 a = t;
ebd8d4e8
IC
38214 }
38215
8b095871
IC
38216 this.h[0] = sum32(this.h[0], a);
38217 this.h[1] = sum32(this.h[1], b);
38218 this.h[2] = sum32(this.h[2], c);
38219 this.h[3] = sum32(this.h[3], d);
38220 this.h[4] = sum32(this.h[4], e);
38221};
ebd8d4e8 38222
8b095871
IC
38223SHA1.prototype._digest = function digest(enc) {
38224 if (enc === 'hex')
38225 return utils.toHex32(this.h, 'big');
38226 else
38227 return utils.split32(this.h, 'big');
38228};
38229
38230function ch32(x, y, z) {
38231 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
38232}
38233
8b095871
IC
38234function maj32(x, y, z) {
38235 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
38236}
38237
8b095871
IC
38238function p32(x, y, z) {
38239 return x ^ y ^ z;
38240}
ebd8d4e8 38241
8b095871
IC
38242function s0_256(x) {
38243 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
38244}
ebd8d4e8 38245
8b095871
IC
38246function s1_256(x) {
38247 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
38248}
38249
8b095871
IC
38250function g0_256(x) {
38251 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
38252}
ab78acc6 38253
8b095871
IC
38254function g1_256(x) {
38255 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
38256}
ab78acc6 38257
8b095871
IC
38258function ft_1(s, x, y, z) {
38259 if (s === 0)
38260 return ch32(x, y, z);
38261 if (s === 1 || s === 3)
38262 return p32(x, y, z);
38263 if (s === 2)
38264 return maj32(x, y, z);
38265}
ebd8d4e8 38266
8b095871
IC
38267function ch64_hi(xh, xl, yh, yl, zh, zl) {
38268 var r = (xh & yh) ^ ((~xh) & zh);
38269 if (r < 0)
38270 r += 0x100000000;
38271 return r;
38272}
ebd8d4e8 38273
8b095871
IC
38274function ch64_lo(xh, xl, yh, yl, zh, zl) {
38275 var r = (xl & yl) ^ ((~xl) & zl);
38276 if (r < 0)
38277 r += 0x100000000;
38278 return r;
ebd8d4e8
IC
38279}
38280
8b095871
IC
38281function maj64_hi(xh, xl, yh, yl, zh, zl) {
38282 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
38283 if (r < 0)
38284 r += 0x100000000;
38285 return r;
38286}
ebd8d4e8 38287
8b095871
IC
38288function maj64_lo(xh, xl, yh, yl, zh, zl) {
38289 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
38290 if (r < 0)
38291 r += 0x100000000;
38292 return r;
38293}
ebd8d4e8 38294
8b095871
IC
38295function s0_512_hi(xh, xl) {
38296 var c0_hi = rotr64_hi(xh, xl, 28);
38297 var c1_hi = rotr64_hi(xl, xh, 2); // 34
38298 var c2_hi = rotr64_hi(xl, xh, 7); // 39
38299
38300 var r = c0_hi ^ c1_hi ^ c2_hi;
38301 if (r < 0)
38302 r += 0x100000000;
38303 return r;
ebd8d4e8
IC
38304}
38305
8b095871
IC
38306function s0_512_lo(xh, xl) {
38307 var c0_lo = rotr64_lo(xh, xl, 28);
38308 var c1_lo = rotr64_lo(xl, xh, 2); // 34
38309 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 38310
8b095871
IC
38311 var r = c0_lo ^ c1_lo ^ c2_lo;
38312 if (r < 0)
38313 r += 0x100000000;
38314 return r;
38315}
ebd8d4e8 38316
8b095871
IC
38317function s1_512_hi(xh, xl) {
38318 var c0_hi = rotr64_hi(xh, xl, 14);
38319 var c1_hi = rotr64_hi(xh, xl, 18);
38320 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 38321
8b095871
IC
38322 var r = c0_hi ^ c1_hi ^ c2_hi;
38323 if (r < 0)
38324 r += 0x100000000;
38325 return r;
ebd8d4e8
IC
38326}
38327
8b095871
IC
38328function s1_512_lo(xh, xl) {
38329 var c0_lo = rotr64_lo(xh, xl, 14);
38330 var c1_lo = rotr64_lo(xh, xl, 18);
38331 var c2_lo = rotr64_lo(xl, xh, 9); // 41
38332
38333 var r = c0_lo ^ c1_lo ^ c2_lo;
38334 if (r < 0)
38335 r += 0x100000000;
38336 return r;
ebd8d4e8
IC
38337}
38338
8b095871
IC
38339function g0_512_hi(xh, xl) {
38340 var c0_hi = rotr64_hi(xh, xl, 1);
38341 var c1_hi = rotr64_hi(xh, xl, 8);
38342 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 38343
8b095871
IC
38344 var r = c0_hi ^ c1_hi ^ c2_hi;
38345 if (r < 0)
38346 r += 0x100000000;
38347 return r;
38348}
38349
38350function g0_512_lo(xh, xl) {
38351 var c0_lo = rotr64_lo(xh, xl, 1);
38352 var c1_lo = rotr64_lo(xh, xl, 8);
38353 var c2_lo = shr64_lo(xh, xl, 7);
38354
38355 var r = c0_lo ^ c1_lo ^ c2_lo;
38356 if (r < 0)
38357 r += 0x100000000;
38358 return r;
38359}
38360
38361function g1_512_hi(xh, xl) {
38362 var c0_hi = rotr64_hi(xh, xl, 19);
38363 var c1_hi = rotr64_hi(xl, xh, 29); // 61
38364 var c2_hi = shr64_hi(xh, xl, 6);
38365
38366 var r = c0_hi ^ c1_hi ^ c2_hi;
38367 if (r < 0)
38368 r += 0x100000000;
38369 return r;
38370}
38371
38372function g1_512_lo(xh, xl) {
38373 var c0_lo = rotr64_lo(xh, xl, 19);
38374 var c1_lo = rotr64_lo(xl, xh, 29); // 61
38375 var c2_lo = shr64_lo(xh, xl, 6);
38376
38377 var r = c0_lo ^ c1_lo ^ c2_lo;
38378 if (r < 0)
38379 r += 0x100000000;
38380 return r;
38381}
38382
38383},{"../hash":57}],62:[function(require,module,exports){
38384var utils = exports;
38385var inherits = require('inherits');
38386
38387function toArray(msg, enc) {
38388 if (Array.isArray(msg))
38389 return msg.slice();
38390 if (!msg)
38391 return [];
38392 var res = [];
38393 if (typeof msg === 'string') {
38394 if (!enc) {
38395 for (var i = 0; i < msg.length; i++) {
38396 var c = msg.charCodeAt(i);
38397 var hi = c >> 8;
38398 var lo = c & 0xff;
38399 if (hi)
38400 res.push(hi, lo);
38401 else
38402 res.push(lo);
38403 }
38404 } else if (enc === 'hex') {
38405 msg = msg.replace(/[^a-z0-9]+/ig, '');
38406 if (msg.length % 2 !== 0)
38407 msg = '0' + msg;
38408 for (var i = 0; i < msg.length; i += 2)
38409 res.push(parseInt(msg[i] + msg[i + 1], 16));
38410 }
38411 } else {
38412 for (var i = 0; i < msg.length; i++)
38413 res[i] = msg[i] | 0;
ebd8d4e8 38414 }
8b095871 38415 return res;
ebd8d4e8 38416}
8b095871 38417utils.toArray = toArray;
ebd8d4e8 38418
8b095871
IC
38419function toHex(msg) {
38420 var res = '';
38421 for (var i = 0; i < msg.length; i++)
38422 res += zero2(msg[i].toString(16));
38423 return res;
38424}
38425utils.toHex = toHex;
ebd8d4e8 38426
8b095871
IC
38427function htonl(w) {
38428 var res = (w >>> 24) |
38429 ((w >>> 8) & 0xff00) |
38430 ((w << 8) & 0xff0000) |
38431 ((w & 0xff) << 24);
38432 return res >>> 0;
38433}
38434utils.htonl = htonl;
ebd8d4e8 38435
8b095871
IC
38436function toHex32(msg, endian) {
38437 var res = '';
38438 for (var i = 0; i < msg.length; i++) {
38439 var w = msg[i];
38440 if (endian === 'little')
38441 w = htonl(w);
38442 res += zero8(w.toString(16));
38443 }
38444 return res;
38445}
38446utils.toHex32 = toHex32;
ebd8d4e8 38447
8b095871
IC
38448function zero2(word) {
38449 if (word.length === 1)
38450 return '0' + word;
38451 else
38452 return word;
38453}
38454utils.zero2 = zero2;
38455
38456function zero8(word) {
38457 if (word.length === 7)
38458 return '0' + word;
38459 else if (word.length === 6)
38460 return '00' + word;
38461 else if (word.length === 5)
38462 return '000' + word;
38463 else if (word.length === 4)
38464 return '0000' + word;
38465 else if (word.length === 3)
38466 return '00000' + word;
38467 else if (word.length === 2)
38468 return '000000' + word;
38469 else if (word.length === 1)
38470 return '0000000' + word;
38471 else
38472 return word;
38473}
38474utils.zero8 = zero8;
38475
38476function join32(msg, start, end, endian) {
38477 var len = end - start;
38478 assert(len % 4 === 0);
38479 var res = new Array(len / 4);
38480 for (var i = 0, k = start; i < res.length; i++, k += 4) {
38481 var w;
38482 if (endian === 'big')
38483 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
38484 else
38485 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
38486 res[i] = w >>> 0;
38487 }
38488 return res;
38489}
38490utils.join32 = join32;
38491
38492function split32(msg, endian) {
38493 var res = new Array(msg.length * 4);
38494 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
38495 var m = msg[i];
38496 if (endian === 'big') {
38497 res[k] = m >>> 24;
38498 res[k + 1] = (m >>> 16) & 0xff;
38499 res[k + 2] = (m >>> 8) & 0xff;
38500 res[k + 3] = m & 0xff;
38501 } else {
38502 res[k + 3] = m >>> 24;
38503 res[k + 2] = (m >>> 16) & 0xff;
38504 res[k + 1] = (m >>> 8) & 0xff;
38505 res[k] = m & 0xff;
38506 }
ebd8d4e8 38507 }
8b095871 38508 return res;
ebd8d4e8 38509}
8b095871 38510utils.split32 = split32;
ebd8d4e8 38511
8b095871
IC
38512function rotr32(w, b) {
38513 return (w >>> b) | (w << (32 - b));
38514}
38515utils.rotr32 = rotr32;
ebd8d4e8 38516
8b095871
IC
38517function rotl32(w, b) {
38518 return (w << b) | (w >>> (32 - b));
38519}
38520utils.rotl32 = rotl32;
ebd8d4e8 38521
8b095871
IC
38522function sum32(a, b) {
38523 return (a + b) >>> 0;
38524}
38525utils.sum32 = sum32;
ebd8d4e8 38526
8b095871
IC
38527function sum32_3(a, b, c) {
38528 return (a + b + c) >>> 0;
38529}
38530utils.sum32_3 = sum32_3;
ebd8d4e8 38531
8b095871
IC
38532function sum32_4(a, b, c, d) {
38533 return (a + b + c + d) >>> 0;
38534}
38535utils.sum32_4 = sum32_4;
ebd8d4e8 38536
8b095871
IC
38537function sum32_5(a, b, c, d, e) {
38538 return (a + b + c + d + e) >>> 0;
38539}
38540utils.sum32_5 = sum32_5;
ebd8d4e8 38541
8b095871
IC
38542function assert(cond, msg) {
38543 if (!cond)
38544 throw new Error(msg || 'Assertion failed');
38545}
38546utils.assert = assert;
ab78acc6 38547
8b095871 38548utils.inherits = inherits;
ab78acc6 38549
8b095871
IC
38550function sum64(buf, pos, ah, al) {
38551 var bh = buf[pos];
38552 var bl = buf[pos + 1];
ab78acc6 38553
8b095871
IC
38554 var lo = (al + bl) >>> 0;
38555 var hi = (lo < al ? 1 : 0) + ah + bh;
38556 buf[pos] = hi >>> 0;
38557 buf[pos + 1] = lo;
38558}
38559exports.sum64 = sum64;
ebd8d4e8 38560
8b095871
IC
38561function sum64_hi(ah, al, bh, bl) {
38562 var lo = (al + bl) >>> 0;
38563 var hi = (lo < al ? 1 : 0) + ah + bh;
38564 return hi >>> 0;
38565};
38566exports.sum64_hi = sum64_hi;
ebd8d4e8 38567
8b095871
IC
38568function sum64_lo(ah, al, bh, bl) {
38569 var lo = al + bl;
38570 return lo >>> 0;
38571};
38572exports.sum64_lo = sum64_lo;
38573
38574function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
38575 var carry = 0;
38576 var lo = al;
38577 lo = (lo + bl) >>> 0;
38578 carry += lo < al ? 1 : 0;
38579 lo = (lo + cl) >>> 0;
38580 carry += lo < cl ? 1 : 0;
38581 lo = (lo + dl) >>> 0;
38582 carry += lo < dl ? 1 : 0;
38583
38584 var hi = ah + bh + ch + dh + carry;
38585 return hi >>> 0;
38586};
38587exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 38588
8b095871
IC
38589function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
38590 var lo = al + bl + cl + dl;
38591 return lo >>> 0;
38592};
38593exports.sum64_4_lo = sum64_4_lo;
38594
38595function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38596 var carry = 0;
38597 var lo = al;
38598 lo = (lo + bl) >>> 0;
38599 carry += lo < al ? 1 : 0;
38600 lo = (lo + cl) >>> 0;
38601 carry += lo < cl ? 1 : 0;
38602 lo = (lo + dl) >>> 0;
38603 carry += lo < dl ? 1 : 0;
38604 lo = (lo + el) >>> 0;
38605 carry += lo < el ? 1 : 0;
38606
38607 var hi = ah + bh + ch + dh + eh + carry;
38608 return hi >>> 0;
38609};
38610exports.sum64_5_hi = sum64_5_hi;
38611
38612function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38613 var lo = al + bl + cl + dl + el;
38614
38615 return lo >>> 0;
38616};
38617exports.sum64_5_lo = sum64_5_lo;
38618
38619function rotr64_hi(ah, al, num) {
38620 var r = (al << (32 - num)) | (ah >>> num);
38621 return r >>> 0;
38622};
38623exports.rotr64_hi = rotr64_hi;
38624
38625function rotr64_lo(ah, al, num) {
38626 var r = (ah << (32 - num)) | (al >>> num);
38627 return r >>> 0;
38628};
38629exports.rotr64_lo = rotr64_lo;
38630
38631function shr64_hi(ah, al, num) {
38632 return ah >>> num;
38633};
38634exports.shr64_hi = shr64_hi;
38635
38636function shr64_lo(ah, al, num) {
38637 var r = (ah << (32 - num)) | (al >>> num);
38638 return r >>> 0;
38639};
38640exports.shr64_lo = shr64_lo;
38641
38642},{"inherits":63}],63:[function(require,module,exports){
38643arguments[4][9][0].apply(exports,arguments)
38644},{"dup":9}],64:[function(require,module,exports){
38645/**
38646 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
38647 * @param {String} str the string input value
38648 * @return {Boolean} a boolean if it is or is not hex prefixed
38649 * @throws if the str input is not a string
38650 */
38651module.exports = function isHexPrefixed(str) {
38652 if (typeof str !== 'string') {
38653 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
38654 }
38655
38656 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
38657}
38658
8b095871
IC
38659},{}],65:[function(require,module,exports){
38660'use strict'
38661module.exports = require('./lib/api')(require('./lib/keccak'))
38662
38663},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
38664'use strict'
38665var createKeccak = require('./keccak')
38666var createShake = require('./shake')
38667
38668module.exports = function (KeccakState) {
38669 var Keccak = createKeccak(KeccakState)
38670 var Shake = createShake(KeccakState)
38671
38672 return function (algorithm, options) {
38673 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
38674 switch (hash) {
38675 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
38676 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
38677 case 'keccak384': return new Keccak(832, 768, null, 384, options)
38678 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
38679
38680 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
38681 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
38682 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
38683 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
38684
38685 case 'shake128': return new Shake(1344, 256, 0x1f, options)
38686 case 'shake256': return new Shake(1088, 512, 0x1f, options)
38687
38688 default: throw new Error('Invald algorithm: ' + algorithm)
38689 }
38690 }
38691}
38692
38693},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 38694(function (Buffer){
8b095871
IC
38695'use strict'
38696var Transform = require('stream').Transform
38697var inherits = require('inherits')
38698
38699module.exports = function (KeccakState) {
38700 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
38701 Transform.call(this, options)
38702
38703 this._rate = rate
38704 this._capacity = capacity
38705 this._delimitedSuffix = delimitedSuffix
38706 this._hashBitLength = hashBitLength
38707 this._options = options
38708
38709 this._state = new KeccakState()
38710 this._state.initialize(rate, capacity)
38711 this._finalized = false
38712 }
38713
38714 inherits(Keccak, Transform)
38715
38716 Keccak.prototype._transform = function (chunk, encoding, callback) {
38717 var error = null
38718 try {
38719 this.update(chunk, encoding)
38720 } catch (err) {
38721 error = err
38722 }
38723
38724 callback(error)
38725 }
38726
38727 Keccak.prototype._flush = function (callback) {
38728 var error = null
38729 try {
38730 this.push(this.digest())
38731 } catch (err) {
38732 error = err
38733 }
38734
38735 callback(error)
38736 }
38737
38738 Keccak.prototype.update = function (data, encoding) {
38739 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38740 if (this._finalized) throw new Error('Digest already called')
38741 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38742
38743 this._state.absorb(data)
38744
38745 return this
38746 }
38747
38748 Keccak.prototype.digest = function (encoding) {
38749 if (this._finalized) throw new Error('Digest already called')
38750 this._finalized = true
38751
38752 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
38753 var digest = this._state.squeeze(this._hashBitLength / 8)
38754 if (encoding !== undefined) digest = digest.toString(encoding)
38755
38756 this._resetState()
38757
38758 return digest
38759 }
38760
38761 // remove result from memory
38762 Keccak.prototype._resetState = function () {
38763 this._state.initialize(this._rate, this._capacity)
38764 return this
38765 }
38766
38767 // because sometimes we need hash right now and little later
38768 Keccak.prototype._clone = function () {
38769 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
38770 this._state.copy(clone._state)
38771 clone._finalized = this._finalized
38772
38773 return clone
38774 }
38775
38776 return Keccak
38777}
38778
38779}).call(this,require("buffer").Buffer)
38780},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
38781(function (Buffer){
38782'use strict'
38783var Transform = require('stream').Transform
38784var inherits = require('inherits')
38785
38786module.exports = function (KeccakState) {
38787 function Shake (rate, capacity, delimitedSuffix, options) {
38788 Transform.call(this, options)
38789
38790 this._rate = rate
38791 this._capacity = capacity
38792 this._delimitedSuffix = delimitedSuffix
38793 this._options = options
38794
38795 this._state = new KeccakState()
38796 this._state.initialize(rate, capacity)
38797 this._finalized = false
38798 }
38799
38800 inherits(Shake, Transform)
38801
38802 Shake.prototype._transform = function (chunk, encoding, callback) {
38803 var error = null
38804 try {
38805 this.update(chunk, encoding)
38806 } catch (err) {
38807 error = err
38808 }
ebd8d4e8 38809
8b095871
IC
38810 callback(error)
38811 }
ebd8d4e8 38812
8b095871 38813 Shake.prototype._flush = function () {}
ebd8d4e8 38814
8b095871
IC
38815 Shake.prototype._read = function (size) {
38816 this.push(this.squeeze(size))
38817 }
ebd8d4e8 38818
8b095871
IC
38819 Shake.prototype.update = function (data, encoding) {
38820 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38821 if (this._finalized) throw new Error('Squeeze already called')
38822 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38823
38824 this._state.absorb(data)
38825
38826 return this
38827 }
38828
38829 Shake.prototype.squeeze = function (dataByteLength, encoding) {
38830 if (!this._finalized) {
38831 this._finalized = true
38832 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 38833 }
ebd8d4e8 38834
8b095871
IC
38835 var data = this._state.squeeze(dataByteLength)
38836 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 38837
8b095871
IC
38838 return data
38839 }
ebd8d4e8 38840
8b095871
IC
38841 Shake.prototype._resetState = function () {
38842 this._state.initialize(this._rate, this._capacity)
38843 return this
38844 }
ebd8d4e8 38845
8b095871
IC
38846 Shake.prototype._clone = function () {
38847 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
38848 this._state.copy(clone._state)
38849 clone._finalized = this._finalized
ab78acc6 38850
8b095871
IC
38851 return clone
38852 }
ebd8d4e8 38853
8b095871
IC
38854 return Shake
38855}
ab78acc6 38856
8b095871
IC
38857}).call(this,require("buffer").Buffer)
38858},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
38859'use strict'
38860var 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]
38861
38862exports.p1600 = function (s) {
38863 for (var round = 0; round < 24; ++round) {
38864 // theta
38865 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
38866 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
38867 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
38868 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
38869 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
38870 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
38871 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
38872 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
38873 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
38874 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
38875
38876 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
38877 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
38878 var t1slo0 = s[0] ^ lo
38879 var t1shi0 = s[1] ^ hi
38880 var t1slo5 = s[10] ^ lo
38881 var t1shi5 = s[11] ^ hi
38882 var t1slo10 = s[20] ^ lo
38883 var t1shi10 = s[21] ^ hi
38884 var t1slo15 = s[30] ^ lo
38885 var t1shi15 = s[31] ^ hi
38886 var t1slo20 = s[40] ^ lo
38887 var t1shi20 = s[41] ^ hi
38888 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
38889 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
38890 var t1slo1 = s[2] ^ lo
38891 var t1shi1 = s[3] ^ hi
38892 var t1slo6 = s[12] ^ lo
38893 var t1shi6 = s[13] ^ hi
38894 var t1slo11 = s[22] ^ lo
38895 var t1shi11 = s[23] ^ hi
38896 var t1slo16 = s[32] ^ lo
38897 var t1shi16 = s[33] ^ hi
38898 var t1slo21 = s[42] ^ lo
38899 var t1shi21 = s[43] ^ hi
38900 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
38901 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
38902 var t1slo2 = s[4] ^ lo
38903 var t1shi2 = s[5] ^ hi
38904 var t1slo7 = s[14] ^ lo
38905 var t1shi7 = s[15] ^ hi
38906 var t1slo12 = s[24] ^ lo
38907 var t1shi12 = s[25] ^ hi
38908 var t1slo17 = s[34] ^ lo
38909 var t1shi17 = s[35] ^ hi
38910 var t1slo22 = s[44] ^ lo
38911 var t1shi22 = s[45] ^ hi
38912 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
38913 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
38914 var t1slo3 = s[6] ^ lo
38915 var t1shi3 = s[7] ^ hi
38916 var t1slo8 = s[16] ^ lo
38917 var t1shi8 = s[17] ^ hi
38918 var t1slo13 = s[26] ^ lo
38919 var t1shi13 = s[27] ^ hi
38920 var t1slo18 = s[36] ^ lo
38921 var t1shi18 = s[37] ^ hi
38922 var t1slo23 = s[46] ^ lo
38923 var t1shi23 = s[47] ^ hi
38924 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
38925 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
38926 var t1slo4 = s[8] ^ lo
38927 var t1shi4 = s[9] ^ hi
38928 var t1slo9 = s[18] ^ lo
38929 var t1shi9 = s[19] ^ hi
38930 var t1slo14 = s[28] ^ lo
38931 var t1shi14 = s[29] ^ hi
38932 var t1slo19 = s[38] ^ lo
38933 var t1shi19 = s[39] ^ hi
38934 var t1slo24 = s[48] ^ lo
38935 var t1shi24 = s[49] ^ hi
38936
38937 // rho & pi
38938 var t2slo0 = t1slo0
38939 var t2shi0 = t1shi0
38940 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
38941 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
38942 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
38943 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
38944 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
38945 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
38946 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
38947 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
38948 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
38949 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
38950 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
38951 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
38952 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
38953 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
38954 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
38955 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
38956 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
38957 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
38958 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
38959 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
38960 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
38961 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
38962 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
38963 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
38964 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
38965 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
38966 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
38967 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
38968 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
38969 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
38970 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
38971 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
38972 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
38973 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
38974 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
38975 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
38976 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
38977 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
38978 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
38979 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
38980 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
38981 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
38982 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
38983 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
38984 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
38985 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
38986 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
38987 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
38988
38989 // chi
38990 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
38991 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
38992 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
38993 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
38994 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
38995 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
38996 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
38997 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
38998 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
38999 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
39000 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
39001 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
39002 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
39003 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
39004 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
39005 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
39006 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
39007 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
39008 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
39009 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
39010 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
39011 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
39012 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
39013 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
39014 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
39015 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
39016 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
39017 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
39018 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
39019 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
39020 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
39021 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
39022 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
39023 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
39024 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
39025 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
39026 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
39027 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
39028 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
39029 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
39030 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
39031 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
39032 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
39033 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
39034 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
39035 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
39036 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
39037 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
39038 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
39039 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
39040
39041 // iota
39042 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
39043 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
39044 }
39045}
39046
39047},{}],70:[function(require,module,exports){
39048(function (Buffer){
39049'use strict'
39050var keccakState = require('./keccak-state-unroll')
ebd8d4e8 39051
8b095871
IC
39052function Keccak () {
39053 // much faster than `new Array(50)`
39054 this.state = [
39055 0, 0, 0, 0, 0,
39056 0, 0, 0, 0, 0,
39057 0, 0, 0, 0, 0,
39058 0, 0, 0, 0, 0,
39059 0, 0, 0, 0, 0
39060 ]
ebd8d4e8 39061
8b095871
IC
39062 this.blockSize = null
39063 this.count = 0
39064 this.squeezing = false
39065}
ebd8d4e8 39066
8b095871
IC
39067Keccak.prototype.initialize = function (rate, capacity) {
39068 for (var i = 0; i < 50; ++i) this.state[i] = 0
39069 this.blockSize = rate / 8
39070 this.count = 0
39071 this.squeezing = false
39072}
39073
39074Keccak.prototype.absorb = function (data) {
39075 for (var i = 0; i < data.length; ++i) {
39076 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
39077 this.count += 1
39078 if (this.count === this.blockSize) {
39079 keccakState.p1600(this.state)
39080 this.count = 0
ebd8d4e8
IC
39081 }
39082 }
8b095871 39083}
ebd8d4e8 39084
8b095871
IC
39085Keccak.prototype.absorbLastFewBits = function (bits) {
39086 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
39087 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
39088 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
39089 keccakState.p1600(this.state)
39090 this.count = 0
39091 this.squeezing = true
ebd8d4e8
IC
39092}
39093
8b095871
IC
39094Keccak.prototype.squeeze = function (length) {
39095 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 39096
8b095871
IC
39097 var output = Buffer.allocUnsafe(length)
39098 for (var i = 0; i < length; ++i) {
39099 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
39100 this.count += 1
39101 if (this.count === this.blockSize) {
39102 keccakState.p1600(this.state)
39103 this.count = 0
ebd8d4e8 39104 }
8b095871 39105 }
ebd8d4e8 39106
8b095871
IC
39107 return output
39108}
ebd8d4e8 39109
8b095871
IC
39110Keccak.prototype.copy = function (dest) {
39111 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
39112 dest.blockSize = this.blockSize
39113 dest.count = this.count
39114 dest.squeezing = this.squeezing
39115}
ebd8d4e8 39116
8b095871 39117module.exports = Keccak
ebd8d4e8 39118
8b095871
IC
39119}).call(this,require("buffer").Buffer)
39120},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
39121(function (Buffer){
39122/*
39123CryptoJS v3.1.2
39124code.google.com/p/crypto-js
39125(c) 2009-2013 by Jeff Mott. All rights reserved.
39126code.google.com/p/crypto-js/wiki/License
39127*/
39128/** @preserve
39129(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 39130
8b095871 39131Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 39132
8b095871
IC
39133 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
39134 - 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.
39135
39136THIS 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.
39137*/
39138
39139// constants table
39140var zl = [
39141 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
39142 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
39143 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
39144 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
39145 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
39146]
39147
39148var zr = [
39149 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
39150 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
39151 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
39152 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
39153 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
39154]
39155
39156var sl = [
39157 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
39158 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
39159 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
39160 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
39161 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
39162]
39163
39164var sr = [
39165 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
39166 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
39167 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
39168 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
39169 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
39170]
39171
39172var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
39173var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
39174
39175function bytesToWords (bytes) {
39176 var words = []
39177 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
39178 words[b >>> 5] |= bytes[i] << (24 - b % 32)
39179 }
39180 return words
ebd8d4e8
IC
39181}
39182
8b095871
IC
39183function wordsToBytes (words) {
39184 var bytes = []
39185 for (var b = 0; b < words.length * 32; b += 8) {
39186 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
39187 }
39188 return bytes
ebd8d4e8
IC
39189}
39190
8b095871
IC
39191function processBlock (H, M, offset) {
39192 // swap endian
39193 for (var i = 0; i < 16; i++) {
39194 var offset_i = offset + i
39195 var M_offset_i = M[offset_i]
ebd8d4e8 39196
8b095871
IC
39197 // Swap
39198 M[offset_i] = (
39199 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
39200 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
39201 )
39202 }
ebd8d4e8 39203
8b095871
IC
39204 // Working variables
39205 var al, bl, cl, dl, el
39206 var ar, br, cr, dr, er
39207
39208 ar = al = H[0]
39209 br = bl = H[1]
39210 cr = cl = H[2]
39211 dr = dl = H[3]
39212 er = el = H[4]
39213
39214 // computation
39215 var t
39216 for (i = 0; i < 80; i += 1) {
39217 t = (al + M[offset + zl[i]]) | 0
39218 if (i < 16) {
39219 t += f1(bl, cl, dl) + hl[0]
39220 } else if (i < 32) {
39221 t += f2(bl, cl, dl) + hl[1]
39222 } else if (i < 48) {
39223 t += f3(bl, cl, dl) + hl[2]
39224 } else if (i < 64) {
39225 t += f4(bl, cl, dl) + hl[3]
39226 } else {// if (i<80) {
39227 t += f5(bl, cl, dl) + hl[4]
39228 }
39229 t = t | 0
39230 t = rotl(t, sl[i])
39231 t = (t + el) | 0
39232 al = el
39233 el = dl
39234 dl = rotl(cl, 10)
39235 cl = bl
39236 bl = t
39237
39238 t = (ar + M[offset + zr[i]]) | 0
39239 if (i < 16) {
39240 t += f5(br, cr, dr) + hr[0]
39241 } else if (i < 32) {
39242 t += f4(br, cr, dr) + hr[1]
39243 } else if (i < 48) {
39244 t += f3(br, cr, dr) + hr[2]
39245 } else if (i < 64) {
39246 t += f2(br, cr, dr) + hr[3]
39247 } else {// if (i<80) {
39248 t += f1(br, cr, dr) + hr[4]
39249 }
39250
39251 t = t | 0
39252 t = rotl(t, sr[i])
39253 t = (t + er) | 0
39254 ar = er
39255 er = dr
39256 dr = rotl(cr, 10)
39257 cr = br
39258 br = t
39259 }
39260
39261 // intermediate hash value
39262 t = (H[1] + cl + dr) | 0
39263 H[1] = (H[2] + dl + er) | 0
39264 H[2] = (H[3] + el + ar) | 0
39265 H[3] = (H[4] + al + br) | 0
39266 H[4] = (H[0] + bl + cr) | 0
39267 H[0] = t
ebd8d4e8
IC
39268}
39269
8b095871
IC
39270function f1 (x, y, z) {
39271 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
39272}
39273
8b095871
IC
39274function f2 (x, y, z) {
39275 return (((x) & (y)) | ((~x) & (z)))
39276}
ebd8d4e8 39277
8b095871
IC
39278function f3 (x, y, z) {
39279 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
39280}
39281
8b095871
IC
39282function f4 (x, y, z) {
39283 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
39284}
39285
8b095871
IC
39286function f5 (x, y, z) {
39287 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
39288}
39289
8b095871
IC
39290function rotl (x, n) {
39291 return (x << n) | (x >>> (32 - n))
39292}
ebd8d4e8 39293
8b095871
IC
39294function ripemd160 (message) {
39295 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 39296
8b095871
IC
39297 if (typeof message === 'string') {
39298 message = new Buffer(message, 'utf8')
39299 }
ebd8d4e8 39300
8b095871 39301 var m = bytesToWords(message)
ebd8d4e8 39302
8b095871
IC
39303 var nBitsLeft = message.length * 8
39304 var nBitsTotal = message.length * 8
ebd8d4e8 39305
8b095871
IC
39306 // Add padding
39307 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
39308 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
39309 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
39310 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
39311 )
ebd8d4e8 39312
8b095871
IC
39313 for (var i = 0; i < m.length; i += 16) {
39314 processBlock(H, m, i)
ebd8d4e8
IC
39315 }
39316
8b095871
IC
39317 // swap endian
39318 for (i = 0; i < 5; i++) {
39319 // shortcut
39320 var H_i = H[i]
ebd8d4e8 39321
8b095871
IC
39322 // Swap
39323 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
39324 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
39325 }
39326
8b095871
IC
39327 var digestbytes = wordsToBytes(H)
39328 return new Buffer(digestbytes)
ebd8d4e8
IC
39329}
39330
8b095871 39331module.exports = ripemd160
ebd8d4e8 39332
8b095871
IC
39333}).call(this,require("buffer").Buffer)
39334},{"buffer":5}],72:[function(require,module,exports){
39335(function (Buffer){
39336const assert = require('assert')
39337/**
39338 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
39339 * This function takes in a data, convert it to buffer if not, and a length for recursion
39340 *
39341 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39342 * @returns {Buffer} - returns buffer of encoded data
39343 **/
39344exports.encode = function (input) {
39345 if (input instanceof Array) {
39346 var output = []
39347 for (var i = 0; i < input.length; i++) {
39348 output.push(exports.encode(input[i]))
39349 }
39350 var buf = Buffer.concat(output)
39351 return Buffer.concat([encodeLength(buf.length, 192), buf])
39352 } else {
39353 input = toBuffer(input)
39354 if (input.length === 1 && input[0] < 128) {
39355 return input
39356 } else {
39357 return Buffer.concat([encodeLength(input.length, 128), input])
39358 }
39359 }
ebd8d4e8
IC
39360}
39361
8b095871
IC
39362function safeParseInt (v, base) {
39363 if (v.slice(0, 2) === '00') {
39364 throw (new Error('invalid RLP: extra zeros'))
39365 }
ebd8d4e8 39366
8b095871 39367 return parseInt(v, base)
ebd8d4e8
IC
39368}
39369
8b095871
IC
39370function encodeLength (len, offset) {
39371 if (len < 56) {
39372 return new Buffer([len + offset])
39373 } else {
39374 var hexLength = intToHex(len)
39375 var lLength = hexLength.length / 2
39376 var firstByte = intToHex(offset + 55 + lLength)
39377 return new Buffer(firstByte + hexLength, 'hex')
39378 }
39379}
ebd8d4e8 39380
8b095871
IC
39381/**
39382 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
39383 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39384 * @returns {Array} - returns decode Array of Buffers containg the original message
39385 **/
39386exports.decode = function (input, stream) {
39387 if (!input || input.length === 0) {
39388 return new Buffer([])
39389 }
ebd8d4e8 39390
8b095871
IC
39391 input = toBuffer(input)
39392 var decoded = _decode(input)
ab78acc6 39393
8b095871
IC
39394 if (stream) {
39395 return decoded
39396 }
ebd8d4e8 39397
8b095871
IC
39398 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
39399 return decoded.data
ebd8d4e8
IC
39400}
39401
8b095871
IC
39402exports.getLength = function (input) {
39403 if (!input || input.length === 0) {
39404 return new Buffer([])
ab78acc6
IC
39405 }
39406
8b095871
IC
39407 input = toBuffer(input)
39408 var firstByte = input[0]
39409 if (firstByte <= 0x7f) {
39410 return input.length
39411 } else if (firstByte <= 0xb7) {
39412 return firstByte - 0x7f
39413 } else if (firstByte <= 0xbf) {
39414 return firstByte - 0xb6
39415 } else if (firstByte <= 0xf7) {
39416 // a list between 0-55 bytes long
39417 return firstByte - 0xbf
39418 } else {
39419 // a list over 55 bytes long
39420 var llength = firstByte - 0xf6
39421 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39422 return llength + length
39423 }
ebd8d4e8
IC
39424}
39425
8b095871
IC
39426function _decode (input) {
39427 var length, llength, data, innerRemainder, d
39428 var decoded = []
39429 var firstByte = input[0]
ebd8d4e8 39430
8b095871
IC
39431 if (firstByte <= 0x7f) {
39432 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
39433 return {
39434 data: input.slice(0, 1),
39435 remainder: input.slice(1)
39436 }
39437 } else if (firstByte <= 0xb7) {
39438 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
39439 // The range of the first byte is [0x80, 0xb7]
39440 length = firstByte - 0x7f
ebd8d4e8 39441
8b095871
IC
39442 // set 0x80 null to 0
39443 if (firstByte === 0x80) {
39444 data = new Buffer([])
39445 } else {
39446 data = input.slice(1, length)
39447 }
ebd8d4e8 39448
8b095871
IC
39449 if (length === 2 && data[0] < 0x80) {
39450 throw new Error('invalid rlp encoding: byte must be less 0x80')
39451 }
ebd8d4e8 39452
8b095871
IC
39453 return {
39454 data: data,
39455 remainder: input.slice(length)
39456 }
39457 } else if (firstByte <= 0xbf) {
39458 llength = firstByte - 0xb6
39459 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39460 data = input.slice(llength, length + llength)
39461 if (data.length < length) {
39462 throw (new Error('invalid RLP'))
39463 }
ebd8d4e8 39464
8b095871
IC
39465 return {
39466 data: data,
39467 remainder: input.slice(length + llength)
39468 }
39469 } else if (firstByte <= 0xf7) {
39470 // a list between 0-55 bytes long
39471 length = firstByte - 0xbf
39472 innerRemainder = input.slice(1, length)
39473 while (innerRemainder.length) {
39474 d = _decode(innerRemainder)
39475 decoded.push(d.data)
39476 innerRemainder = d.remainder
39477 }
ebd8d4e8 39478
8b095871
IC
39479 return {
39480 data: decoded,
39481 remainder: input.slice(length)
39482 }
39483 } else {
39484 // a list over 55 bytes long
39485 llength = firstByte - 0xf6
39486 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39487 var totalLength = llength + length
39488 if (totalLength > input.length) {
39489 throw new Error('invalid rlp: total length is larger than the data')
39490 }
ab78acc6 39491
8b095871
IC
39492 innerRemainder = input.slice(llength, totalLength)
39493 if (innerRemainder.length === 0) {
39494 throw new Error('invalid rlp, List has a invalid length')
39495 }
ab78acc6 39496
8b095871
IC
39497 while (innerRemainder.length) {
39498 d = _decode(innerRemainder)
39499 decoded.push(d.data)
39500 innerRemainder = d.remainder
39501 }
39502 return {
39503 data: decoded,
39504 remainder: input.slice(totalLength)
39505 }
ab78acc6 39506 }
8b095871 39507}
ab78acc6 39508
8b095871
IC
39509function isHexPrefixed (str) {
39510 return str.slice(0, 2) === '0x'
ab78acc6
IC
39511}
39512
8b095871
IC
39513// Removes 0x from a given String
39514function stripHexPrefix (str) {
39515 if (typeof str !== 'string') {
39516 return str
39517 }
39518 return isHexPrefixed(str) ? str.slice(2) : str
39519}
ab78acc6 39520
8b095871
IC
39521function intToHex (i) {
39522 var hex = i.toString(16)
39523 if (hex.length % 2) {
39524 hex = '0' + hex
ab78acc6
IC
39525 }
39526
8b095871 39527 return hex
ebd8d4e8
IC
39528}
39529
8b095871
IC
39530function padToEven (a) {
39531 if (a.length % 2) a = '0' + a
39532 return a
ebd8d4e8
IC
39533}
39534
8b095871
IC
39535function intToBuffer (i) {
39536 var hex = intToHex(i)
39537 return new Buffer(hex, 'hex')
ebd8d4e8
IC
39538}
39539
8b095871
IC
39540function toBuffer (v) {
39541 if (!Buffer.isBuffer(v)) {
39542 if (typeof v === 'string') {
39543 if (isHexPrefixed(v)) {
39544 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
39545 } else {
39546 v = new Buffer(v)
39547 }
39548 } else if (typeof v === 'number') {
39549 if (!v) {
39550 v = new Buffer([])
39551 } else {
39552 v = intToBuffer(v)
39553 }
39554 } else if (v === null || v === undefined) {
39555 v = new Buffer([])
39556 } else if (v.toArray) {
39557 // converts a BN to a Buffer
39558 v = new Buffer(v.toArray())
39559 } else {
39560 throw new Error('invalid type')
39561 }
39562 }
39563 return v
ebd8d4e8
IC
39564}
39565
8b095871
IC
39566}).call(this,require("buffer").Buffer)
39567},{"assert":1,"buffer":5}],73:[function(require,module,exports){
39568'use strict'
39569module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 39570
8b095871
IC
39571},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
39572(function (Buffer){
39573'use strict'
39574var toString = Object.prototype.toString
ebd8d4e8 39575
8b095871
IC
39576// TypeError
39577exports.isArray = function (value, message) {
39578 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
39579}
39580
8b095871
IC
39581exports.isBoolean = function (value, message) {
39582 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
39583}
ebd8d4e8 39584
8b095871
IC
39585exports.isBuffer = function (value, message) {
39586 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
39587}
39588
8b095871
IC
39589exports.isFunction = function (value, message) {
39590 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
39591}
39592
8b095871
IC
39593exports.isNumber = function (value, message) {
39594 if (toString.call(value) !== '[object Number]') throw TypeError(message)
39595}
ab78acc6 39596
8b095871
IC
39597exports.isObject = function (value, message) {
39598 if (toString.call(value) !== '[object Object]') throw TypeError(message)
39599}
ebd8d4e8 39600
8b095871
IC
39601// RangeError
39602exports.isBufferLength = function (buffer, length, message) {
39603 if (buffer.length !== length) throw RangeError(message)
39604}
ebd8d4e8 39605
8b095871
IC
39606exports.isBufferLength2 = function (buffer, length1, length2, message) {
39607 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
39608}
39609
8b095871
IC
39610exports.isLengthGTZero = function (value, message) {
39611 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
39612}
39613
8b095871
IC
39614exports.isNumberInInterval = function (number, x, y, message) {
39615 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
39616}
39617
8b095871
IC
39618}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
39619},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 39620(function (Buffer){
8b095871
IC
39621'use strict'
39622var bip66 = require('bip66')
39623
39624var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
39625 // begin
39626 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
39627 // private key
39628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39629 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39630 // middle
39631 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39632 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39633 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39634 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39635 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39636 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39637 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39638 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39639 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
39640 // public key
39641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39642 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39643 0x00
39644])
39645
39646var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
39647 // begin
39648 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
39649 // private key
39650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39651 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39652 // middle
39653 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39654 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39655 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39656 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39657 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39658 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39659 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
39660 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
39661 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39662 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39663 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
39664 // public key
39665 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39666 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39667 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39668 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39669 0x00
39670])
39671
39672var ZERO_BUFFER_32 = new Buffer([
39673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39674 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
39675])
39676
39677exports.privateKeyExport = function (privateKey, publicKey, compressed) {
39678 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
39679 privateKey.copy(result, compressed ? 8 : 9)
39680 publicKey.copy(result, compressed ? 181 : 214)
39681 return result
39682}
39683
39684exports.privateKeyImport = function (privateKey) {
39685 var length = privateKey.length
39686
39687 // sequence header
39688 var index = 0
39689 if (length < index + 1 || privateKey[index] !== 0x30) return
39690 index += 1
39691
39692 // sequence length constructor
39693 if (length < index + 1 || !(privateKey[index] & 0x80)) return
39694
39695 var lenb = privateKey[index] & 0x7f
39696 index += 1
39697 if (lenb < 1 || lenb > 2) return
39698 if (length < index + lenb) return
39699
39700 // sequence length
39701 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
39702 index += lenb
39703 if (length < index + len) return
39704
39705 // sequence element 0: version number (=1)
39706 if (length < index + 3 ||
39707 privateKey[index] !== 0x02 ||
39708 privateKey[index + 1] !== 0x01 ||
39709 privateKey[index + 2] !== 0x01) {
39710 return
39711 }
39712 index += 3
ab78acc6 39713
8b095871
IC
39714 // sequence element 1: octet string, up to 32 bytes
39715 if (length < index + 2 ||
39716 privateKey[index] !== 0x04 ||
39717 privateKey[index + 1] > 0x20 ||
39718 length < index + 2 + privateKey[index + 1]) {
39719 return
39720 }
ab78acc6 39721
8b095871 39722 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 39723}
ebd8d4e8 39724
8b095871
IC
39725exports.signatureExport = function (sigObj) {
39726 var r = Buffer.concat([new Buffer([0]), sigObj.r])
39727 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 39728
8b095871
IC
39729 var s = Buffer.concat([new Buffer([0]), sigObj.s])
39730 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 39731
8b095871
IC
39732 return bip66.encode(r.slice(posR), s.slice(posS))
39733}
ab78acc6 39734
8b095871
IC
39735exports.signatureImport = function (sig) {
39736 var r = new Buffer(ZERO_BUFFER_32)
39737 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39738
8b095871
IC
39739 try {
39740 var sigObj = bip66.decode(sig)
39741 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
39742 if (sigObj.r.length > 32) throw new Error('R length is too long')
39743 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
39744 if (sigObj.s.length > 32) throw new Error('S length is too long')
39745 } catch (err) {
39746 return
ab78acc6
IC
39747 }
39748
8b095871
IC
39749 sigObj.r.copy(r, 32 - sigObj.r.length)
39750 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 39751
8b095871
IC
39752 return { r: r, s: s }
39753}
ab78acc6 39754
8b095871
IC
39755exports.signatureImportLax = function (sig) {
39756 var r = new Buffer(ZERO_BUFFER_32)
39757 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39758
8b095871
IC
39759 var length = sig.length
39760 var index = 0
ab78acc6 39761
8b095871
IC
39762 // sequence tag byte
39763 if (sig[index++] !== 0x30) return
39764
39765 // sequence length byte
39766 var lenbyte = sig[index++]
39767 if (lenbyte & 0x80) {
39768 index += lenbyte - 0x80
39769 if (index > length) return
ab78acc6
IC
39770 }
39771
8b095871
IC
39772 // sequence tag byte for r
39773 if (sig[index++] !== 0x02) return
39774
39775 // length for r
39776 var rlen = sig[index++]
39777 if (rlen & 0x80) {
39778 lenbyte = rlen - 0x80
39779 if (index + lenbyte > length) return
39780 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39781 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 39782 }
8b095871
IC
39783 if (rlen > length - index) return
39784 var rindex = index
39785 index += rlen
ab78acc6 39786
8b095871
IC
39787 // sequence tag byte for s
39788 if (sig[index++] !== 0x02) return
ab78acc6 39789
8b095871
IC
39790 // length for s
39791 var slen = sig[index++]
39792 if (slen & 0x80) {
39793 lenbyte = slen - 0x80
39794 if (index + lenbyte > length) return
39795 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39796 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 39797 }
8b095871
IC
39798 if (slen > length - index) return
39799 var sindex = index
39800 index += slen
ab78acc6 39801
8b095871
IC
39802 // ignore leading zeros in r
39803 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
39804 // copy r value
39805 if (rlen > 32) return
39806 var rvalue = sig.slice(rindex, rindex + rlen)
39807 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 39808
8b095871
IC
39809 // ignore leading zeros in s
39810 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
39811 // copy s value
39812 if (slen > 32) return
39813 var svalue = sig.slice(sindex, sindex + slen)
39814 svalue.copy(s, 32 - svalue.length)
39815
39816 return { r: r, s: s }
ab78acc6
IC
39817}
39818
8b095871
IC
39819}).call(this,require("buffer").Buffer)
39820},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
39821(function (Buffer){
39822'use strict'
39823var createHash = require('create-hash')
39824var BN = require('bn.js')
39825var EC = require('elliptic').ec
39826
39827var messages = require('../messages.json')
39828
39829var ec = new EC('secp256k1')
39830var ecparams = ec.curve
39831
39832function loadCompressedPublicKey (first, xBuffer) {
39833 var x = new BN(xBuffer)
39834
39835 // overflow
39836 if (x.cmp(ecparams.p) >= 0) return null
39837 x = x.toRed(ecparams.red)
39838
39839 // compute corresponding Y
39840 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
39841 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
39842
39843 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39844}
39845
8b095871
IC
39846function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
39847 var x = new BN(xBuffer)
39848 var y = new BN(yBuffer)
ebd8d4e8 39849
8b095871
IC
39850 // overflow
39851 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 39852
8b095871
IC
39853 x = x.toRed(ecparams.red)
39854 y = y.toRed(ecparams.red)
ebd8d4e8 39855
8b095871
IC
39856 // is odd flag
39857 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 39858
8b095871
IC
39859 // x*x*x + b = y*y
39860 var x3 = x.redSqr().redIMul(x)
39861 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 39862
8b095871 39863 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39864}
39865
8b095871
IC
39866function loadPublicKey (publicKey) {
39867 var first = publicKey[0]
39868 switch (first) {
39869 case 0x02:
39870 case 0x03:
39871 if (publicKey.length !== 33) return null
39872 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
39873 case 0x04:
39874 case 0x06:
39875 case 0x07:
39876 if (publicKey.length !== 65) return null
39877 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
39878 default:
39879 return null
ebd8d4e8 39880 }
8b095871 39881}
ebd8d4e8 39882
8b095871
IC
39883exports.privateKeyVerify = function (privateKey) {
39884 var bn = new BN(privateKey)
39885 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
39886}
ebd8d4e8 39887
8b095871
IC
39888exports.privateKeyExport = function (privateKey, compressed) {
39889 var d = new BN(privateKey)
39890 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 39891
8b095871 39892 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
39893}
39894
8b095871
IC
39895exports.privateKeyTweakAdd = function (privateKey, tweak) {
39896 var bn = new BN(tweak)
39897 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39898
8b095871
IC
39899 bn.iadd(new BN(privateKey))
39900 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
39901 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39902
8b095871
IC
39903 return bn.toArrayLike(Buffer, 'be', 32)
39904}
39905
39906exports.privateKeyTweakMul = function (privateKey, tweak) {
39907 var bn = new BN(tweak)
39908 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
39909
39910 bn.imul(new BN(privateKey))
39911 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
39912
39913 return bn.toArrayLike(Buffer, 'be', 32)
39914}
39915
39916exports.publicKeyCreate = function (privateKey, compressed) {
39917 var d = new BN(privateKey)
39918 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
39919
39920 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
39921}
39922
39923exports.publicKeyConvert = function (publicKey, compressed) {
39924 var pair = loadPublicKey(publicKey)
39925 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39926
8b095871 39927 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
39928}
39929
8b095871
IC
39930exports.publicKeyVerify = function (publicKey) {
39931 return loadPublicKey(publicKey) !== null
39932}
ab78acc6 39933
8b095871
IC
39934exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
39935 var pair = loadPublicKey(publicKey)
39936 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39937
8b095871
IC
39938 tweak = new BN(tweak)
39939 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 39940
8b095871
IC
39941 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
39942}
ab78acc6 39943
8b095871
IC
39944exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
39945 var pair = loadPublicKey(publicKey)
39946 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39947
8b095871
IC
39948 tweak = new BN(tweak)
39949 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 39950
8b095871
IC
39951 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
39952}
ab78acc6 39953
8b095871
IC
39954exports.publicKeyCombine = function (publicKeys, compressed) {
39955 var pairs = new Array(publicKeys.length)
39956 for (var i = 0; i < publicKeys.length; ++i) {
39957 pairs[i] = loadPublicKey(publicKeys[i])
39958 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
39959 }
39960
8b095871
IC
39961 var point = pairs[0].pub
39962 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
39963 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 39964
8b095871
IC
39965 return new Buffer(point.encode(true, compressed))
39966}
ab78acc6 39967
8b095871
IC
39968exports.signatureNormalize = function (signature) {
39969 var r = new BN(signature.slice(0, 32))
39970 var s = new BN(signature.slice(32, 64))
39971 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39972
39973 var result = new Buffer(signature)
39974 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
39975
39976 return result
ab78acc6
IC
39977}
39978
8b095871
IC
39979exports.signatureExport = function (signature) {
39980 var r = signature.slice(0, 32)
39981 var s = signature.slice(32, 64)
39982 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39983
39984 return { r: r, s: s }
ab78acc6
IC
39985}
39986
8b095871
IC
39987exports.signatureImport = function (sigObj) {
39988 var r = new BN(sigObj.r)
39989 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
39990
39991 var s = new BN(sigObj.s)
39992 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
39993
39994 return Buffer.concat([
39995 r.toArrayLike(Buffer, 'be', 32),
39996 s.toArrayLike(Buffer, 'be', 32)
39997 ])
ab78acc6
IC
39998}
39999
8b095871
IC
40000exports.sign = function (message, privateKey, noncefn, data) {
40001 if (typeof noncefn === 'function') {
40002 var getNonce = noncefn
40003 noncefn = function (counter) {
40004 var nonce = getNonce(message, privateKey, null, data, counter)
40005 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 40006
8b095871
IC
40007 return new BN(nonce)
40008 }
ab78acc6 40009 }
ebd8d4e8 40010
8b095871
IC
40011 var d = new BN(privateKey)
40012 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 40013
8b095871
IC
40014 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
40015 return {
40016 signature: Buffer.concat([
40017 result.r.toArrayLike(Buffer, 'be', 32),
40018 result.s.toArrayLike(Buffer, 'be', 32)
40019 ]),
40020 recovery: result.recoveryParam
ebd8d4e8 40021 }
8b095871 40022}
ab78acc6 40023
8b095871
IC
40024exports.verify = function (message, signature, publicKey) {
40025 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 40026
8b095871
IC
40027 var sigr = new BN(sigObj.r)
40028 var sigs = new BN(sigObj.s)
40029 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
40030 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 40031
8b095871
IC
40032 var pair = loadPublicKey(publicKey)
40033 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 40034
8b095871
IC
40035 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
40036}
ebd8d4e8 40037
8b095871
IC
40038exports.recover = function (message, signature, recovery, compressed) {
40039 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 40040
8b095871
IC
40041 var sigr = new BN(sigObj.r)
40042 var sigs = new BN(sigObj.s)
40043 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 40044
8b095871
IC
40045 try {
40046 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 40047
8b095871
IC
40048 var point = ec.recoverPubKey(message, sigObj, recovery)
40049 return new Buffer(point.encode(true, compressed))
40050 } catch (err) {
40051 throw new Error(messages.ECDSA_RECOVER_FAIL)
40052 }
ebd8d4e8
IC
40053}
40054
8b095871
IC
40055exports.ecdh = function (publicKey, privateKey) {
40056 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
40057 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
40058}
40059
8b095871
IC
40060exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
40061 var pair = loadPublicKey(publicKey)
40062 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40063
8b095871
IC
40064 var scalar = new BN(privateKey)
40065 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
40066
40067 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
40068}
40069
8b095871
IC
40070}).call(this,require("buffer").Buffer)
40071},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
40072'use strict'
40073var assert = require('./assert')
40074var der = require('./der')
40075var messages = require('./messages.json')
ab78acc6 40076
8b095871
IC
40077function initCompressedValue (value, defaultValue) {
40078 if (value === undefined) return defaultValue
ab78acc6 40079
8b095871
IC
40080 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
40081 return value
ab78acc6
IC
40082}
40083
8b095871
IC
40084module.exports = function (secp256k1) {
40085 return {
40086 privateKeyVerify: function (privateKey) {
40087 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40088 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
40089 },
ab78acc6 40090
8b095871
IC
40091 privateKeyExport: function (privateKey, compressed) {
40092 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40093 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40094
8b095871
IC
40095 compressed = initCompressedValue(compressed, true)
40096 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 40097
8b095871
IC
40098 return der.privateKeyExport(privateKey, publicKey, compressed)
40099 },
ab78acc6 40100
8b095871
IC
40101 privateKeyImport: function (privateKey) {
40102 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 40103
8b095871
IC
40104 privateKey = der.privateKeyImport(privateKey)
40105 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 40106
8b095871
IC
40107 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
40108 },
ab78acc6 40109
8b095871
IC
40110 privateKeyTweakAdd: function (privateKey, tweak) {
40111 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40112 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40113
8b095871
IC
40114 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40115 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40116
8b095871
IC
40117 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
40118 },
ab78acc6 40119
8b095871
IC
40120 privateKeyTweakMul: function (privateKey, tweak) {
40121 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40122 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40123
8b095871
IC
40124 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40125 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40126
8b095871
IC
40127 return secp256k1.privateKeyTweakMul(privateKey, tweak)
40128 },
ab78acc6 40129
8b095871
IC
40130 publicKeyCreate: function (privateKey, compressed) {
40131 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40132 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40133
8b095871 40134 compressed = initCompressedValue(compressed, true)
ab78acc6 40135
8b095871
IC
40136 return secp256k1.publicKeyCreate(privateKey, compressed)
40137 },
ab78acc6 40138
8b095871
IC
40139 publicKeyConvert: function (publicKey, compressed) {
40140 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40141 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40142
8b095871
IC
40143 compressed = initCompressedValue(compressed, true)
40144
40145 return secp256k1.publicKeyConvert(publicKey, compressed)
40146 },
40147
40148 publicKeyVerify: function (publicKey) {
40149 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40150 return secp256k1.publicKeyVerify(publicKey)
40151 },
40152
40153 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
40154 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40155 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40156
40157 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40158 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40159
40160 compressed = initCompressedValue(compressed, true)
40161
40162 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
40163 },
40164
40165 publicKeyTweakMul: function (publicKey, tweak, compressed) {
40166 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40167 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40168
40169 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40170 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40171
40172 compressed = initCompressedValue(compressed, true)
40173
40174 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
40175 },
40176
40177 publicKeyCombine: function (publicKeys, compressed) {
40178 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
40179 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
40180 for (var i = 0; i < publicKeys.length; ++i) {
40181 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
40182 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
40183 }
40184
8b095871 40185 compressed = initCompressedValue(compressed, true)
ab78acc6 40186
8b095871
IC
40187 return secp256k1.publicKeyCombine(publicKeys, compressed)
40188 },
ab78acc6 40189
8b095871
IC
40190 signatureNormalize: function (signature) {
40191 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40192 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40193
8b095871
IC
40194 return secp256k1.signatureNormalize(signature)
40195 },
ab78acc6 40196
8b095871
IC
40197 signatureExport: function (signature) {
40198 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40199 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40200
40201 var sigObj = secp256k1.signatureExport(signature)
40202 return der.signatureExport(sigObj)
40203 },
40204
40205 signatureImport: function (sig) {
40206 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40207 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40208
40209 var sigObj = der.signatureImport(sig)
40210 if (sigObj) return secp256k1.signatureImport(sigObj)
40211
40212 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40213 },
40214
40215 signatureImportLax: function (sig) {
40216 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40217 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40218
40219 var sigObj = der.signatureImportLax(sig)
40220 if (sigObj) return secp256k1.signatureImport(sigObj)
40221
40222 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40223 },
40224
40225 sign: function (message, privateKey, options) {
40226 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40227 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
40228
40229 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40230 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
40231
40232 var data = null
40233 var noncefn = null
40234 if (options !== undefined) {
40235 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
40236
40237 if (options.data !== undefined) {
40238 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
40239 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
40240 data = options.data
40241 }
40242
40243 if (options.noncefn !== undefined) {
40244 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
40245 noncefn = options.noncefn
40246 }
ab78acc6
IC
40247 }
40248
8b095871
IC
40249 return secp256k1.sign(message, privateKey, noncefn, data)
40250 },
ab78acc6 40251
8b095871
IC
40252 verify: function (message, signature, publicKey) {
40253 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40254 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40255
8b095871
IC
40256 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40257 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40258
8b095871
IC
40259 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40260 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40261
40262 return secp256k1.verify(message, signature, publicKey)
40263 },
ab78acc6 40264
8b095871
IC
40265 recover: function (message, signature, recovery, compressed) {
40266 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40267 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40268
8b095871
IC
40269 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40270 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40271
8b095871
IC
40272 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
40273 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 40274
8b095871 40275 compressed = initCompressedValue(compressed, true)
ab78acc6 40276
8b095871
IC
40277 return secp256k1.recover(message, signature, recovery, compressed)
40278 },
ab78acc6 40279
8b095871
IC
40280 ecdh: function (publicKey, privateKey) {
40281 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40282 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40283
8b095871
IC
40284 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40285 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40286
8b095871
IC
40287 return secp256k1.ecdh(publicKey, privateKey)
40288 },
ab78acc6 40289
8b095871
IC
40290 ecdhUnsafe: function (publicKey, privateKey, compressed) {
40291 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40292 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40293
8b095871
IC
40294 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40295 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40296
8b095871 40297 compressed = initCompressedValue(compressed, true)
ab78acc6 40298
8b095871
IC
40299 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
40300 }
40301 }
40302}
ab78acc6 40303
8b095871
IC
40304},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
40305module.exports={
40306 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
40307 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
40308 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
40309 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
40310 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40311 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
40312 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
40313 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
40314 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
40315 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
40316 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
40317 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
40318 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
40319 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
40320 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40321 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
40322 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
40323 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
40324 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
40325 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
40326 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
40327 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
40328 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
40329 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
40330 "MSG32_TYPE_INVALID": "message should be a Buffer",
40331 "MSG32_LENGTH_INVALID": "message length is invalid",
40332 "OPTIONS_TYPE_INVALID": "options should be an Object",
40333 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
40334 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
40335 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
40336 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
40337 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
40338 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
40339 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
40340}
40341
40342},{}],79:[function(require,module,exports){
40343(function (Buffer){
40344// prototype class for hash functions
40345function Hash (blockSize, finalSize) {
40346 this._block = new Buffer(blockSize)
40347 this._finalSize = finalSize
40348 this._blockSize = blockSize
40349 this._len = 0
40350 this._s = 0
40351}
40352
40353Hash.prototype.update = function (data, enc) {
40354 if (typeof data === 'string') {
40355 enc = enc || 'utf8'
40356 data = new Buffer(data, enc)
ab78acc6
IC
40357 }
40358
8b095871
IC
40359 var l = this._len += data.length
40360 var s = this._s || 0
40361 var f = 0
40362 var buffer = this._block
ab78acc6 40363
8b095871
IC
40364 while (s < l) {
40365 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
40366 var ch = (t - f)
ab78acc6 40367
8b095871
IC
40368 for (var i = 0; i < ch; i++) {
40369 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
40370 }
40371
8b095871
IC
40372 s += ch
40373 f += ch
ab78acc6 40374
8b095871
IC
40375 if ((s % this._blockSize) === 0) {
40376 this._update(buffer)
40377 }
ab78acc6 40378 }
8b095871 40379 this._s = s
ab78acc6 40380
8b095871
IC
40381 return this
40382}
ab78acc6 40383
8b095871
IC
40384Hash.prototype.digest = function (enc) {
40385 // Suppose the length of the message M, in bits, is l
40386 var l = this._len * 8
ab78acc6 40387
8b095871
IC
40388 // Append the bit 1 to the end of the message
40389 this._block[this._len % this._blockSize] = 0x80
ab78acc6 40390
8b095871
IC
40391 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
40392 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 40393
8b095871
IC
40394 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
40395 this._update(this._block)
40396 this._block.fill(0)
40397 }
ab78acc6 40398
8b095871
IC
40399 // to this append the block which is equal to the number l written in binary
40400 // TODO: handle case where l is > Math.pow(2, 29)
40401 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 40402
8b095871 40403 var hash = this._update(this._block) || this._hash()
ebd8d4e8 40404
8b095871 40405 return enc ? hash.toString(enc) : hash
ab78acc6 40406}
ebd8d4e8 40407
8b095871
IC
40408Hash.prototype._update = function () {
40409 throw new Error('_update must be implemented by subclass')
ab78acc6 40410}
8b095871
IC
40411
40412module.exports = Hash
40413
40414}).call(this,require("buffer").Buffer)
40415},{"buffer":5}],80:[function(require,module,exports){
40416var exports = module.exports = function SHA (algorithm) {
40417 algorithm = algorithm.toLowerCase()
40418
40419 var Algorithm = exports[algorithm]
40420 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40421
40422 return new Algorithm()
ab78acc6 40423}
ebd8d4e8 40424
8b095871
IC
40425exports.sha = require('./sha')
40426exports.sha1 = require('./sha1')
40427exports.sha224 = require('./sha224')
40428exports.sha256 = require('./sha256')
40429exports.sha384 = require('./sha384')
40430exports.sha512 = require('./sha512')
40431
40432},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
40433(function (Buffer){
40434/*
40435 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40436 * in FIPS PUB 180-1
40437 * This source code is derived from sha1.js of the same repository.
40438 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40439 * operation was added.
40440 */
40441
40442var inherits = require('inherits')
40443var Hash = require('./hash')
40444
40445var K = [
40446 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40447]
40448
40449var W = new Array(80)
40450
40451function Sha () {
40452 this.init()
40453 this._w = W
40454
40455 Hash.call(this, 64, 56)
ab78acc6 40456}
ebd8d4e8 40457
8b095871 40458inherits(Sha, Hash)
ebd8d4e8 40459
8b095871
IC
40460Sha.prototype.init = function () {
40461 this._a = 0x67452301
40462 this._b = 0xefcdab89
40463 this._c = 0x98badcfe
40464 this._d = 0x10325476
40465 this._e = 0xc3d2e1f0
ebd8d4e8 40466
8b095871
IC
40467 return this
40468}
ebd8d4e8 40469
8b095871
IC
40470function rotl5 (num) {
40471 return (num << 5) | (num >>> 27)
40472}
ebd8d4e8 40473
8b095871
IC
40474function rotl30 (num) {
40475 return (num << 30) | (num >>> 2)
40476}
ebd8d4e8 40477
8b095871
IC
40478function ft (s, b, c, d) {
40479 if (s === 0) return (b & c) | ((~b) & d)
40480 if (s === 2) return (b & c) | (b & d) | (c & d)
40481 return b ^ c ^ d
40482}
ebd8d4e8 40483
8b095871
IC
40484Sha.prototype._update = function (M) {
40485 var W = this._w
ebd8d4e8 40486
8b095871
IC
40487 var a = this._a | 0
40488 var b = this._b | 0
40489 var c = this._c | 0
40490 var d = this._d | 0
40491 var e = this._e | 0
ebd8d4e8 40492
8b095871
IC
40493 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40494 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 40495
8b095871
IC
40496 for (var j = 0; j < 80; ++j) {
40497 var s = ~~(j / 20)
40498 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 40499
8b095871
IC
40500 e = d
40501 d = c
40502 c = rotl30(b)
40503 b = a
40504 a = t
40505 }
40506
40507 this._a = (a + this._a) | 0
40508 this._b = (b + this._b) | 0
40509 this._c = (c + this._c) | 0
40510 this._d = (d + this._d) | 0
40511 this._e = (e + this._e) | 0
40512}
40513
40514Sha.prototype._hash = function () {
40515 var H = new Buffer(20)
ab78acc6 40516
8b095871
IC
40517 H.writeInt32BE(this._a | 0, 0)
40518 H.writeInt32BE(this._b | 0, 4)
40519 H.writeInt32BE(this._c | 0, 8)
40520 H.writeInt32BE(this._d | 0, 12)
40521 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 40522
8b095871 40523 return H
ebd8d4e8
IC
40524}
40525
8b095871 40526module.exports = Sha
ebd8d4e8 40527
8b095871
IC
40528}).call(this,require("buffer").Buffer)
40529},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
40530(function (Buffer){
40531/*
40532 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40533 * in FIPS PUB 180-1
40534 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40535 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40536 * Distributed under the BSD License
40537 * See http://pajhome.org.uk/crypt/md5 for details.
40538 */
ebd8d4e8 40539
8b095871
IC
40540var inherits = require('inherits')
40541var Hash = require('./hash')
ebd8d4e8 40542
8b095871
IC
40543var K = [
40544 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40545]
ebd8d4e8 40546
8b095871 40547var W = new Array(80)
ab78acc6 40548
8b095871
IC
40549function Sha1 () {
40550 this.init()
40551 this._w = W
ebd8d4e8 40552
8b095871
IC
40553 Hash.call(this, 64, 56)
40554}
ebd8d4e8 40555
8b095871 40556inherits(Sha1, Hash)
ebd8d4e8 40557
8b095871
IC
40558Sha1.prototype.init = function () {
40559 this._a = 0x67452301
40560 this._b = 0xefcdab89
40561 this._c = 0x98badcfe
40562 this._d = 0x10325476
40563 this._e = 0xc3d2e1f0
ebd8d4e8 40564
8b095871
IC
40565 return this
40566}
ebd8d4e8 40567
8b095871
IC
40568function rotl1 (num) {
40569 return (num << 1) | (num >>> 31)
40570}
ebd8d4e8 40571
8b095871
IC
40572function rotl5 (num) {
40573 return (num << 5) | (num >>> 27)
40574}
ebd8d4e8 40575
8b095871
IC
40576function rotl30 (num) {
40577 return (num << 30) | (num >>> 2)
40578}
ebd8d4e8 40579
8b095871
IC
40580function ft (s, b, c, d) {
40581 if (s === 0) return (b & c) | ((~b) & d)
40582 if (s === 2) return (b & c) | (b & d) | (c & d)
40583 return b ^ c ^ d
40584}
ebd8d4e8 40585
8b095871
IC
40586Sha1.prototype._update = function (M) {
40587 var W = this._w
ebd8d4e8 40588
8b095871
IC
40589 var a = this._a | 0
40590 var b = this._b | 0
40591 var c = this._c | 0
40592 var d = this._d | 0
40593 var e = this._e | 0
ebd8d4e8 40594
8b095871
IC
40595 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40596 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40597
40598 for (var j = 0; j < 80; ++j) {
40599 var s = ~~(j / 20)
40600 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40601
40602 e = d
40603 d = c
40604 c = rotl30(b)
40605 b = a
40606 a = t
ab78acc6
IC
40607 }
40608
8b095871
IC
40609 this._a = (a + this._a) | 0
40610 this._b = (b + this._b) | 0
40611 this._c = (c + this._c) | 0
40612 this._d = (d + this._d) | 0
40613 this._e = (e + this._e) | 0
40614}
ab78acc6 40615
8b095871
IC
40616Sha1.prototype._hash = function () {
40617 var H = new Buffer(20)
ab78acc6 40618
8b095871
IC
40619 H.writeInt32BE(this._a | 0, 0)
40620 H.writeInt32BE(this._b | 0, 4)
40621 H.writeInt32BE(this._c | 0, 8)
40622 H.writeInt32BE(this._d | 0, 12)
40623 H.writeInt32BE(this._e | 0, 16)
ab78acc6 40624
8b095871
IC
40625 return H
40626}
ab78acc6 40627
8b095871 40628module.exports = Sha1
ab78acc6 40629
8b095871
IC
40630}).call(this,require("buffer").Buffer)
40631},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
40632(function (Buffer){
40633/**
40634 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40635 * in FIPS 180-2
40636 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40637 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40638 *
40639 */
ab78acc6 40640
8b095871
IC
40641var inherits = require('inherits')
40642var Sha256 = require('./sha256')
40643var Hash = require('./hash')
ab78acc6 40644
8b095871 40645var W = new Array(64)
ab78acc6 40646
8b095871
IC
40647function Sha224 () {
40648 this.init()
ab78acc6 40649
8b095871 40650 this._w = W // new Array(64)
ebd8d4e8 40651
8b095871
IC
40652 Hash.call(this, 64, 56)
40653}
ebd8d4e8 40654
8b095871 40655inherits(Sha224, Sha256)
ebd8d4e8 40656
8b095871
IC
40657Sha224.prototype.init = function () {
40658 this._a = 0xc1059ed8
40659 this._b = 0x367cd507
40660 this._c = 0x3070dd17
40661 this._d = 0xf70e5939
40662 this._e = 0xffc00b31
40663 this._f = 0x68581511
40664 this._g = 0x64f98fa7
40665 this._h = 0xbefa4fa4
ebd8d4e8 40666
8b095871
IC
40667 return this
40668}
ab78acc6 40669
8b095871
IC
40670Sha224.prototype._hash = function () {
40671 var H = new Buffer(28)
ebd8d4e8 40672
8b095871
IC
40673 H.writeInt32BE(this._a, 0)
40674 H.writeInt32BE(this._b, 4)
40675 H.writeInt32BE(this._c, 8)
40676 H.writeInt32BE(this._d, 12)
40677 H.writeInt32BE(this._e, 16)
40678 H.writeInt32BE(this._f, 20)
40679 H.writeInt32BE(this._g, 24)
ab78acc6 40680
8b095871
IC
40681 return H
40682}
ebd8d4e8 40683
8b095871 40684module.exports = Sha224
ebd8d4e8 40685
8b095871
IC
40686}).call(this,require("buffer").Buffer)
40687},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
40688(function (Buffer){
40689/**
40690 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40691 * in FIPS 180-2
40692 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40693 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40694 *
40695 */
ebd8d4e8 40696
8b095871
IC
40697var inherits = require('inherits')
40698var Hash = require('./hash')
ab78acc6 40699
8b095871
IC
40700var K = [
40701 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
40702 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
40703 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
40704 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
40705 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
40706 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
40707 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
40708 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
40709 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
40710 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
40711 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
40712 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
40713 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
40714 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
40715 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
40716 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
40717]
ebd8d4e8 40718
8b095871 40719var W = new Array(64)
ebd8d4e8 40720
8b095871
IC
40721function Sha256 () {
40722 this.init()
ebd8d4e8 40723
8b095871 40724 this._w = W // new Array(64)
ebd8d4e8 40725
8b095871 40726 Hash.call(this, 64, 56)
ab78acc6 40727}
ebd8d4e8 40728
8b095871 40729inherits(Sha256, Hash)
ebd8d4e8 40730
8b095871
IC
40731Sha256.prototype.init = function () {
40732 this._a = 0x6a09e667
40733 this._b = 0xbb67ae85
40734 this._c = 0x3c6ef372
40735 this._d = 0xa54ff53a
40736 this._e = 0x510e527f
40737 this._f = 0x9b05688c
40738 this._g = 0x1f83d9ab
40739 this._h = 0x5be0cd19
ebd8d4e8 40740
8b095871
IC
40741 return this
40742}
ebd8d4e8 40743
8b095871
IC
40744function ch (x, y, z) {
40745 return z ^ (x & (y ^ z))
40746}
ebd8d4e8 40747
8b095871
IC
40748function maj (x, y, z) {
40749 return (x & y) | (z & (x | y))
40750}
ebd8d4e8 40751
8b095871
IC
40752function sigma0 (x) {
40753 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
40754}
ebd8d4e8 40755
8b095871
IC
40756function sigma1 (x) {
40757 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
40758}
ebd8d4e8 40759
8b095871
IC
40760function gamma0 (x) {
40761 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
40762}
ebd8d4e8 40763
8b095871
IC
40764function gamma1 (x) {
40765 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
40766}
ab78acc6 40767
8b095871
IC
40768Sha256.prototype._update = function (M) {
40769 var W = this._w
ebd8d4e8 40770
8b095871
IC
40771 var a = this._a | 0
40772 var b = this._b | 0
40773 var c = this._c | 0
40774 var d = this._d | 0
40775 var e = this._e | 0
40776 var f = this._f | 0
40777 var g = this._g | 0
40778 var h = this._h | 0
ab78acc6 40779
8b095871
IC
40780 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40781 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 40782
8b095871
IC
40783 for (var j = 0; j < 64; ++j) {
40784 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
40785 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 40786
8b095871
IC
40787 h = g
40788 g = f
40789 f = e
40790 e = (d + T1) | 0
40791 d = c
40792 c = b
40793 b = a
40794 a = (T1 + T2) | 0
ebd8d4e8
IC
40795 }
40796
8b095871
IC
40797 this._a = (a + this._a) | 0
40798 this._b = (b + this._b) | 0
40799 this._c = (c + this._c) | 0
40800 this._d = (d + this._d) | 0
40801 this._e = (e + this._e) | 0
40802 this._f = (f + this._f) | 0
40803 this._g = (g + this._g) | 0
40804 this._h = (h + this._h) | 0
ab78acc6 40805}
ebd8d4e8 40806
8b095871
IC
40807Sha256.prototype._hash = function () {
40808 var H = new Buffer(32)
ebd8d4e8 40809
8b095871
IC
40810 H.writeInt32BE(this._a, 0)
40811 H.writeInt32BE(this._b, 4)
40812 H.writeInt32BE(this._c, 8)
40813 H.writeInt32BE(this._d, 12)
40814 H.writeInt32BE(this._e, 16)
40815 H.writeInt32BE(this._f, 20)
40816 H.writeInt32BE(this._g, 24)
40817 H.writeInt32BE(this._h, 28)
40818
40819 return H
ab78acc6 40820}
ebd8d4e8 40821
8b095871 40822module.exports = Sha256
ebd8d4e8 40823
8b095871
IC
40824}).call(this,require("buffer").Buffer)
40825},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
40826(function (Buffer){
40827var inherits = require('inherits')
40828var SHA512 = require('./sha512')
40829var Hash = require('./hash')
ebd8d4e8 40830
8b095871 40831var W = new Array(160)
ebd8d4e8 40832
8b095871
IC
40833function Sha384 () {
40834 this.init()
40835 this._w = W
ab78acc6 40836
8b095871
IC
40837 Hash.call(this, 128, 112)
40838}
ab78acc6 40839
8b095871 40840inherits(Sha384, SHA512)
ebd8d4e8 40841
8b095871
IC
40842Sha384.prototype.init = function () {
40843 this._ah = 0xcbbb9d5d
40844 this._bh = 0x629a292a
40845 this._ch = 0x9159015a
40846 this._dh = 0x152fecd8
40847 this._eh = 0x67332667
40848 this._fh = 0x8eb44a87
40849 this._gh = 0xdb0c2e0d
40850 this._hh = 0x47b5481d
40851
40852 this._al = 0xc1059ed8
40853 this._bl = 0x367cd507
40854 this._cl = 0x3070dd17
40855 this._dl = 0xf70e5939
40856 this._el = 0xffc00b31
40857 this._fl = 0x68581511
40858 this._gl = 0x64f98fa7
40859 this._hl = 0xbefa4fa4
ebd8d4e8 40860
8b095871
IC
40861 return this
40862}
ebd8d4e8 40863
8b095871
IC
40864Sha384.prototype._hash = function () {
40865 var H = new Buffer(48)
ebd8d4e8 40866
8b095871
IC
40867 function writeInt64BE (h, l, offset) {
40868 H.writeInt32BE(h, offset)
40869 H.writeInt32BE(l, offset + 4)
40870 }
ebd8d4e8 40871
8b095871
IC
40872 writeInt64BE(this._ah, this._al, 0)
40873 writeInt64BE(this._bh, this._bl, 8)
40874 writeInt64BE(this._ch, this._cl, 16)
40875 writeInt64BE(this._dh, this._dl, 24)
40876 writeInt64BE(this._eh, this._el, 32)
40877 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 40878
8b095871 40879 return H
ab78acc6 40880}
ebd8d4e8 40881
8b095871
IC
40882module.exports = Sha384
40883
40884}).call(this,require("buffer").Buffer)
40885},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
40886(function (Buffer){
40887var inherits = require('inherits')
40888var Hash = require('./hash')
40889
40890var K = [
40891 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
40892 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
40893 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
40894 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
40895 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
40896 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
40897 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
40898 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
40899 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
40900 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
40901 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
40902 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
40903 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
40904 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
40905 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
40906 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
40907 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
40908 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
40909 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
40910 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
40911 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
40912 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
40913 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
40914 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
40915 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
40916 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
40917 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
40918 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
40919 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
40920 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
40921 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
40922 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
40923 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
40924 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
40925 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
40926 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
40927 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
40928 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
40929 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
40930 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
40931]
40932
40933var W = new Array(160)
ebd8d4e8 40934
8b095871
IC
40935function Sha512 () {
40936 this.init()
40937 this._w = W
ebd8d4e8 40938
8b095871 40939 Hash.call(this, 128, 112)
ab78acc6 40940}
ebd8d4e8 40941
8b095871 40942inherits(Sha512, Hash)
ebd8d4e8 40943
8b095871
IC
40944Sha512.prototype.init = function () {
40945 this._ah = 0x6a09e667
40946 this._bh = 0xbb67ae85
40947 this._ch = 0x3c6ef372
40948 this._dh = 0xa54ff53a
40949 this._eh = 0x510e527f
40950 this._fh = 0x9b05688c
40951 this._gh = 0x1f83d9ab
40952 this._hh = 0x5be0cd19
40953
40954 this._al = 0xf3bcc908
40955 this._bl = 0x84caa73b
40956 this._cl = 0xfe94f82b
40957 this._dl = 0x5f1d36f1
40958 this._el = 0xade682d1
40959 this._fl = 0x2b3e6c1f
40960 this._gl = 0xfb41bd6b
40961 this._hl = 0x137e2179
ebd8d4e8 40962
8b095871 40963 return this
ab78acc6 40964}
ebd8d4e8 40965
8b095871
IC
40966function Ch (x, y, z) {
40967 return z ^ (x & (y ^ z))
40968}
ebd8d4e8 40969
8b095871
IC
40970function maj (x, y, z) {
40971 return (x & y) | (z & (x | y))
ab78acc6 40972}
ebd8d4e8 40973
8b095871
IC
40974function sigma0 (x, xl) {
40975 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
40976}
ebd8d4e8 40977
8b095871
IC
40978function sigma1 (x, xl) {
40979 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
40980}
ab78acc6 40981
8b095871
IC
40982function Gamma0 (x, xl) {
40983 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 40984}
ebd8d4e8 40985
8b095871
IC
40986function Gamma0l (x, xl) {
40987 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
40988}
ebd8d4e8 40989
8b095871
IC
40990function Gamma1 (x, xl) {
40991 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
40992}
40993
8b095871
IC
40994function Gamma1l (x, xl) {
40995 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
40996}
40997
8b095871
IC
40998function getCarry (a, b) {
40999 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
41000}
41001
8b095871
IC
41002Sha512.prototype._update = function (M) {
41003 var W = this._w
ebd8d4e8 41004
8b095871
IC
41005 var ah = this._ah | 0
41006 var bh = this._bh | 0
41007 var ch = this._ch | 0
41008 var dh = this._dh | 0
41009 var eh = this._eh | 0
41010 var fh = this._fh | 0
41011 var gh = this._gh | 0
41012 var hh = this._hh | 0
ebd8d4e8 41013
8b095871
IC
41014 var al = this._al | 0
41015 var bl = this._bl | 0
41016 var cl = this._cl | 0
41017 var dl = this._dl | 0
41018 var el = this._el | 0
41019 var fl = this._fl | 0
41020 var gl = this._gl | 0
41021 var hl = this._hl | 0
ebd8d4e8 41022
8b095871
IC
41023 for (var i = 0; i < 32; i += 2) {
41024 W[i] = M.readInt32BE(i * 4)
41025 W[i + 1] = M.readInt32BE(i * 4 + 4)
41026 }
41027 for (; i < 160; i += 2) {
41028 var xh = W[i - 15 * 2]
41029 var xl = W[i - 15 * 2 + 1]
41030 var gamma0 = Gamma0(xh, xl)
41031 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 41032
8b095871
IC
41033 xh = W[i - 2 * 2]
41034 xl = W[i - 2 * 2 + 1]
41035 var gamma1 = Gamma1(xh, xl)
41036 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 41037
8b095871
IC
41038 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41039 var Wi7h = W[i - 7 * 2]
41040 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 41041
8b095871
IC
41042 var Wi16h = W[i - 16 * 2]
41043 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 41044
8b095871
IC
41045 var Wil = (gamma0l + Wi7l) | 0
41046 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41047 Wil = (Wil + gamma1l) | 0
41048 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41049 Wil = (Wil + Wi16l) | 0
41050 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 41051
8b095871
IC
41052 W[i] = Wih
41053 W[i + 1] = Wil
41054 }
ebd8d4e8 41055
8b095871
IC
41056 for (var j = 0; j < 160; j += 2) {
41057 Wih = W[j]
41058 Wil = W[j + 1]
ebd8d4e8 41059
8b095871
IC
41060 var majh = maj(ah, bh, ch)
41061 var majl = maj(al, bl, cl)
ebd8d4e8 41062
8b095871
IC
41063 var sigma0h = sigma0(ah, al)
41064 var sigma0l = sigma0(al, ah)
41065 var sigma1h = sigma1(eh, el)
41066 var sigma1l = sigma1(el, eh)
ab78acc6 41067
8b095871
IC
41068 // t1 = h + sigma1 + ch + K[j] + W[j]
41069 var Kih = K[j]
41070 var Kil = K[j + 1]
ab78acc6 41071
8b095871
IC
41072 var chh = Ch(eh, fh, gh)
41073 var chl = Ch(el, fl, gl)
ebd8d4e8 41074
8b095871
IC
41075 var t1l = (hl + sigma1l) | 0
41076 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41077 t1l = (t1l + chl) | 0
41078 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41079 t1l = (t1l + Kil) | 0
41080 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41081 t1l = (t1l + Wil) | 0
41082 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 41083
8b095871
IC
41084 // t2 = sigma0 + maj
41085 var t2l = (sigma0l + majl) | 0
41086 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 41087
8b095871
IC
41088 hh = gh
41089 hl = gl
41090 gh = fh
41091 gl = fl
41092 fh = eh
41093 fl = el
41094 el = (dl + t1l) | 0
41095 eh = (dh + t1h + getCarry(el, dl)) | 0
41096 dh = ch
41097 dl = cl
41098 ch = bh
41099 cl = bl
41100 bh = ah
41101 bl = al
41102 al = (t1l + t2l) | 0
41103 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41104 }
ab78acc6 41105
8b095871
IC
41106 this._al = (this._al + al) | 0
41107 this._bl = (this._bl + bl) | 0
41108 this._cl = (this._cl + cl) | 0
41109 this._dl = (this._dl + dl) | 0
41110 this._el = (this._el + el) | 0
41111 this._fl = (this._fl + fl) | 0
41112 this._gl = (this._gl + gl) | 0
41113 this._hl = (this._hl + hl) | 0
ab78acc6 41114
8b095871
IC
41115 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41116 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41117 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41118 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41119 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41120 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41121 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41122 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
41123}
41124
8b095871
IC
41125Sha512.prototype._hash = function () {
41126 var H = new Buffer(64)
ab78acc6 41127
8b095871
IC
41128 function writeInt64BE (h, l, offset) {
41129 H.writeInt32BE(h, offset)
41130 H.writeInt32BE(l, offset + 4)
41131 }
ab78acc6 41132
8b095871
IC
41133 writeInt64BE(this._ah, this._al, 0)
41134 writeInt64BE(this._bh, this._bl, 8)
41135 writeInt64BE(this._ch, this._cl, 16)
41136 writeInt64BE(this._dh, this._dl, 24)
41137 writeInt64BE(this._eh, this._el, 32)
41138 writeInt64BE(this._fh, this._fl, 40)
41139 writeInt64BE(this._gh, this._gl, 48)
41140 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 41141
8b095871 41142 return H
ebd8d4e8
IC
41143}
41144
8b095871 41145module.exports = Sha512
ebd8d4e8 41146
ab78acc6 41147}).call(this,require("buffer").Buffer)
8b095871
IC
41148},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
41149var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 41150
8b095871
IC
41151/**
41152 * Removes '0x' from a given `String` is present
41153 * @param {String} str the string value
41154 * @return {String|Optional} a string by pass if necessary
41155 */
41156module.exports = function stripHexPrefix(str) {
41157 if (typeof str !== 'string') {
41158 return str;
41159 }
07ac4350 41160
8b095871
IC
41161 return isHexPrefixed(str) ? str.slice(2) : str;
41162}
07ac4350 41163
8b095871
IC
41164},{"is-hex-prefixed":64}]},{},[31])(31)
41165});</script>
8a1f452d 41166 <script>function convertRippleAdrr(address) {
41167 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
41168 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
41169 )
41170 }
41171
41172function convertRipplePriv(priv) {
920eb591 41173 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 41174}
41175
41176</script>
ab78acc6 41177 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
41178
41179//// base.js
41180
41181/** @fileOverview Javascript cryptography implementation.
41182 *
41183 * Crush to remove comments, shorten variable names and
41184 * generally reduce transmission size.
41185 *
41186 * @author Emily Stark
41187 * @author Mike Hamburg
41188 * @author Dan Boneh
41189 */
41190
41191"use strict";
41192/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
41193/*global document, window, escape, unescape, module, require, Uint32Array */
41194
41195/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
41196var sjcl = {
41197 /** @namespace Symmetric ciphers. */
41198 cipher: {},
41199
41200 /** @namespace Hash functions. Right now only SHA256 is implemented. */
41201 hash: {},
41202
41203 /** @namespace Key exchange functions. Right now only SRP is implemented. */
41204 keyexchange: {},
41205
41206 /** @namespace Block cipher modes of operation. */
41207 mode: {},
41208
41209 /** @namespace Miscellaneous. HMAC and PBKDF2. */
41210 misc: {},
41211
41212 /**
41213 * @namespace Bit array encoders and decoders.
41214 *
41215 * @description
41216 * The members of this namespace are functions which translate between
41217 * SJCL's bitArrays and other objects (usually strings). Because it
41218 * isn't always clear which direction is encoding and which is decoding,
41219 * the method names are "fromBits" and "toBits".
41220 */
41221 codec: {},
41222
41223 /** @namespace Exceptions. */
41224 exception: {
41225 /** @constructor Ciphertext is corrupt. */
41226 corrupt: function(message) {
41227 this.toString = function() { return "CORRUPT: "+this.message; };
41228 this.message = message;
41229 },
41230
41231 /** @constructor Invalid parameter. */
41232 invalid: function(message) {
41233 this.toString = function() { return "INVALID: "+this.message; };
41234 this.message = message;
41235 },
41236
41237 /** @constructor Bug or missing feature in SJCL. @constructor */
41238 bug: function(message) {
41239 this.toString = function() { return "BUG: "+this.message; };
41240 this.message = message;
41241 },
41242
41243 /** @constructor Something isn't ready. */
41244 notReady: function(message) {
41245 this.toString = function() { return "NOT READY: "+this.message; };
41246 this.message = message;
ebd8d4e8 41247 }
80c4dd2a
IC
41248 }
41249};
41250
41251if(typeof module !== 'undefined' && module.exports){
41252 module.exports = sjcl;
41253}
41254if (typeof define === "function") {
41255 define([], function () {
41256 return sjcl;
41257 });
41258}
41259
41260
41261//// bitArray.js
41262
41263/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
41264 *
41265 * @author Emily Stark
41266 * @author Mike Hamburg
41267 * @author Dan Boneh
41268 */
41269
41270/** @namespace Arrays of bits, encoded as arrays of Numbers.
41271 *
41272 * @description
41273 * <p>
41274 * These objects are the currency accepted by SJCL's crypto functions.
41275 * </p>
41276 *
41277 * <p>
41278 * Most of our crypto primitives operate on arrays of 4-byte words internally,
41279 * but many of them can take arguments that are not a multiple of 4 bytes.
41280 * This library encodes arrays of bits (whose size need not be a multiple of 8
41281 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
41282 * array of words, 32 bits at a time. Since the words are double-precision
41283 * floating point numbers, they fit some extra data. We use this (in a private,
41284 * possibly-changing manner) to encode the number of bits actually present
41285 * in the last word of the array.
41286 * </p>
41287 *
41288 * <p>
41289 * Because bitwise ops clear this out-of-band data, these arrays can be passed
41290 * to ciphers like AES which want arrays of words.
41291 * </p>
41292 */
41293sjcl.bitArray = {
41294 /**
41295 * Array slices in units of bits.
41296 * @param {bitArray} a The array to slice.
41297 * @param {Number} bstart The offset to the start of the slice, in bits.
41298 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
41299 * slice until the end of the array.
41300 * @return {bitArray} The requested slice.
41301 */
41302 bitSlice: function (a, bstart, bend) {
41303 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
41304 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
41305 },
41306
41307 /**
41308 * Extract a number packed into a bit array.
41309 * @param {bitArray} a The array to slice.
41310 * @param {Number} bstart The offset to the start of the slice, in bits.
41311 * @param {Number} length The length of the number to extract.
41312 * @return {Number} The requested slice.
41313 */
41314 extract: function(a, bstart, blength) {
41315 // FIXME: this Math.floor is not necessary at all, but for some reason
41316 // seems to suppress a bug in the Chromium JIT.
41317 var x, sh = Math.floor((-bstart-blength) & 31);
41318 if ((bstart + blength - 1 ^ bstart) & -32) {
41319 // it crosses a boundary
41320 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
41321 } else {
41322 // within a single word
41323 x = a[bstart/32|0] >>> sh;
ebd8d4e8 41324 }
80c4dd2a
IC
41325 return x & ((1<<blength) - 1);
41326 },
41327
41328 /**
41329 * Concatenate two bit arrays.
41330 * @param {bitArray} a1 The first array.
41331 * @param {bitArray} a2 The second array.
41332 * @return {bitArray} The concatenation of a1 and a2.
41333 */
41334 concat: function (a1, a2) {
41335 if (a1.length === 0 || a2.length === 0) {
41336 return a1.concat(a2);
41337 }
41338
41339 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
41340 if (shift === 32) {
41341 return a1.concat(a2);
41342 } else {
41343 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 41344 }
80c4dd2a
IC
41345 },
41346
41347 /**
41348 * Find the length of an array of bits.
41349 * @param {bitArray} a The array.
41350 * @return {Number} The length of a, in bits.
41351 */
41352 bitLength: function (a) {
41353 var l = a.length, x;
41354 if (l === 0) { return 0; }
41355 x = a[l - 1];
41356 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
41357 },
41358
41359 /**
41360 * Truncate an array.
41361 * @param {bitArray} a The array.
41362 * @param {Number} len The length to truncate to, in bits.
41363 * @return {bitArray} A new array, truncated to len bits.
41364 */
41365 clamp: function (a, len) {
41366 if (a.length * 32 < len) { return a; }
41367 a = a.slice(0, Math.ceil(len / 32));
41368 var l = a.length;
41369 len = len & 31;
41370 if (l > 0 && len) {
41371 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
41372 }
41373 return a;
41374 },
41375
41376 /**
41377 * Make a partial word for a bit array.
41378 * @param {Number} len The number of bits in the word.
41379 * @param {Number} x The bits.
41380 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
41381 * @return {Number} The partial word.
41382 */
41383 partial: function (len, x, _end) {
41384 if (len === 32) { return x; }
41385 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
41386 },
41387
41388 /**
41389 * Get the number of bits used by a partial word.
41390 * @param {Number} x The partial word.
41391 * @return {Number} The number of bits used by the partial word.
41392 */
41393 getPartial: function (x) {
41394 return Math.round(x/0x10000000000) || 32;
41395 },
41396
41397 /**
41398 * Compare two arrays for equality in a predictable amount of time.
41399 * @param {bitArray} a The first array.
41400 * @param {bitArray} b The second array.
41401 * @return {boolean} true if a == b; false otherwise.
41402 */
41403 equal: function (a, b) {
41404 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
41405 return false;
ebd8d4e8 41406 }
80c4dd2a
IC
41407 var x = 0, i;
41408 for (i=0; i<a.length; i++) {
41409 x |= a[i]^b[i];
ebd8d4e8 41410 }
80c4dd2a
IC
41411 return (x === 0);
41412 },
41413
41414 /** Shift an array right.
41415 * @param {bitArray} a The array to shift.
41416 * @param {Number} shift The number of bits to shift.
41417 * @param {Number} [carry=0] A byte to carry in
41418 * @param {bitArray} [out=[]] An array to prepend to the output.
41419 * @private
41420 */
41421 _shiftRight: function (a, shift, carry, out) {
41422 var i, last2=0, shift2;
41423 if (out === undefined) { out = []; }
41424
41425 for (; shift >= 32; shift -= 32) {
41426 out.push(carry);
41427 carry = 0;
41428 }
41429 if (shift === 0) {
41430 return out.concat(a);
41431 }
41432
41433 for (i=0; i<a.length; i++) {
41434 out.push(carry | a[i]>>>shift);
41435 carry = a[i] << (32-shift);
41436 }
41437 last2 = a.length ? a[a.length-1] : 0;
41438 shift2 = sjcl.bitArray.getPartial(last2);
41439 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
41440 return out;
41441 },
41442
41443 /** xor a block of 4 words together.
41444 * @private
41445 */
41446 _xor4: function(x,y) {
41447 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
41448 },
41449
41450 /** byteswap a word array inplace.
41451 * (does not handle partial words)
41452 * @param {sjcl.bitArray} a word array
41453 * @return {sjcl.bitArray} byteswapped array
41454 */
41455 byteswapM: function(a) {
41456 var i, v, m = 0xff00;
41457 for (i = 0; i < a.length; ++i) {
41458 v = a[i];
41459 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 41460 }
80c4dd2a
IC
41461 return a;
41462 }
41463};
41464
41465
41466//// codecString.js
41467
41468/** @fileOverview Bit array codec implementations.
41469 *
41470 * @author Emily Stark
41471 * @author Mike Hamburg
41472 * @author Dan Boneh
41473 */
41474
41475/** @namespace UTF-8 strings */
41476sjcl.codec.utf8String = {
41477 /** Convert from a bitArray to a UTF-8 string. */
41478 fromBits: function (arr) {
41479 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
41480 for (i=0; i<bl/8; i++) {
41481 if ((i&3) === 0) {
41482 tmp = arr[i/4];
41483 }
41484 out += String.fromCharCode(tmp >>> 24);
41485 tmp <<= 8;
ebd8d4e8 41486 }
80c4dd2a
IC
41487 return decodeURIComponent(escape(out));
41488 },
41489
41490 /** Convert from a UTF-8 string to a bitArray. */
41491 toBits: function (str) {
41492 str = unescape(encodeURIComponent(str));
41493 var out = [], i, tmp=0;
41494 for (i=0; i<str.length; i++) {
41495 tmp = tmp << 8 | str.charCodeAt(i);
41496 if ((i&3) === 3) {
41497 out.push(tmp);
41498 tmp = 0;
41499 }
ebd8d4e8 41500 }
80c4dd2a
IC
41501 if (i&3) {
41502 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 41503 }
80c4dd2a
IC
41504 return out;
41505 }
41506};
41507
41508
41509//// codecHex.js
41510
41511/** @fileOverview Bit array codec implementations.
41512 *
41513 * @author Emily Stark
41514 * @author Mike Hamburg
41515 * @author Dan Boneh
41516 */
41517
41518/** @namespace Hexadecimal */
41519sjcl.codec.hex = {
41520 /** Convert from a bitArray to a hex string. */
41521 fromBits: function (arr) {
41522 var out = "", i;
41523 for (i=0; i<arr.length; i++) {
41524 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 41525 }
80c4dd2a
IC
41526 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
41527 },
41528 /** Convert from a hex string to a bitArray. */
41529 toBits: function (str) {
41530 var i, out=[], len;
41531 str = str.replace(/\s|0x/g, "");
41532 len = str.length;
41533 str = str + "00000000";
41534 for (i=0; i<str.length; i+=8) {
41535 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 41536 }
80c4dd2a
IC
41537 return sjcl.bitArray.clamp(out, len*4);
41538 }
41539};
41540
41541
41542//// sha512.js
41543
41544/** @fileOverview Javascript SHA-512 implementation.
41545 *
41546 * This implementation was written for CryptoJS by Jeff Mott and adapted for
41547 * SJCL by Stefan Thomas.
41548 *
41549 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
41550 * Released with New BSD License
41551 *
41552 * @author Emily Stark
41553 * @author Mike Hamburg
41554 * @author Dan Boneh
41555 * @author Jeff Mott
41556 * @author Stefan Thomas
41557 */
41558
41559/**
41560 * Context for a SHA-512 operation in progress.
41561 * @constructor
41562 * @class Secure Hash Algorithm, 512 bits.
41563 */
41564sjcl.hash.sha512 = function (hash) {
41565 if (!this._key[0]) { this._precompute(); }
41566 if (hash) {
41567 this._h = hash._h.slice(0);
41568 this._buffer = hash._buffer.slice(0);
41569 this._length = hash._length;
41570 } else {
41571 this.reset();
41572 }
41573};
41574
41575/**
41576 * Hash a string or an array of words.
41577 * @static
41578 * @param {bitArray|String} data the data to hash.
41579 * @return {bitArray} The hash value, an array of 16 big-endian words.
41580 */
41581sjcl.hash.sha512.hash = function (data) {
41582 return (new sjcl.hash.sha512()).update(data).finalize();
41583};
41584
41585sjcl.hash.sha512.prototype = {
41586 /**
41587 * The hash's block size, in bits.
41588 * @constant
41589 */
41590 blockSize: 1024,
41591
41592 /**
41593 * Reset the hash state.
41594 * @return this
41595 */
41596 reset:function () {
41597 this._h = this._init.slice(0);
41598 this._buffer = [];
41599 this._length = 0;
41600 return this;
41601 },
41602
41603 /**
41604 * Input several words to the hash.
41605 * @param {bitArray|String} data the data to hash.
41606 * @return this
41607 */
41608 update: function (data) {
41609 if (typeof data === "string") {
41610 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 41611 }
80c4dd2a
IC
41612 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
41613 ol = this._length,
41614 nl = this._length = ol + sjcl.bitArray.bitLength(data);
41615 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
41616 this._block(b.splice(0,32));
ebd8d4e8 41617 }
80c4dd2a
IC
41618 return this;
41619 },
41620
41621 /**
41622 * Complete hashing and output the hash value.
41623 * @return {bitArray} The hash value, an array of 16 big-endian words.
41624 */
41625 finalize:function () {
41626 var i, b = this._buffer, h = this._h;
41627
41628 // Round out and push the buffer
41629 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
41630
41631 // Round out the buffer to a multiple of 32 words, less the 4 length words.
41632 for (i = b.length + 4; i & 31; i++) {
41633 b.push(0);
ebd8d4e8 41634 }
80c4dd2a
IC
41635
41636 // append the length
41637 b.push(0);
41638 b.push(0);
41639 b.push(Math.floor(this._length / 0x100000000));
41640 b.push(this._length | 0);
41641
41642 while (b.length) {
41643 this._block(b.splice(0,32));
ebd8d4e8 41644 }
80c4dd2a
IC
41645
41646 this.reset();
41647 return h;
41648 },
41649
41650 /**
41651 * The SHA-512 initialization vector, to be precomputed.
41652 * @private
41653 */
41654 _init:[],
41655
41656 /**
41657 * Least significant 24 bits of SHA512 initialization values.
41658 *
41659 * Javascript only has 53 bits of precision, so we compute the 40 most
41660 * significant bits and add the remaining 24 bits as constants.
41661 *
41662 * @private
41663 */
41664 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
41665
41666 /*
41667 _init:
41668 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
41669 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
41670 */
41671
41672 /**
41673 * The SHA-512 hash key, to be precomputed.
41674 * @private
41675 */
41676 _key:[],
41677
41678 /**
41679 * Least significant 24 bits of SHA512 key values.
41680 * @private
41681 */
41682 _keyr:
41683 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
41684 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
41685 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
41686 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
41687 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
41688 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
41689 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
41690 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
41691 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
41692 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
41693
41694 /*
41695 _key:
41696 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41697 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41698 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41699 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41700 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41701 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41702 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41703 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41704 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41705 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41706 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41707 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41708 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41709 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41710 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41711 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41712 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41713 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41714 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41715 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
41716 */
41717
41718 /**
41719 * Function to precompute _init and _key.
41720 * @private
41721 */
41722 _precompute: function () {
41723 // XXX: This code is for precomputing the SHA256 constants, change for
41724 // SHA512 and re-enable.
41725 var i = 0, prime = 2, factor;
41726
41727 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
41728 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
41729
41730 outer: for (; i<80; prime++) {
41731 for (factor=2; factor*factor <= prime; factor++) {
41732 if (prime % factor === 0) {
41733 // not a prime
41734 continue outer;
ebd8d4e8 41735 }
80c4dd2a
IC
41736 }
41737
41738 if (i<8) {
41739 this._init[i*2] = frac(Math.pow(prime, 1/2));
41740 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
41741 }
41742 this._key[i*2] = frac(Math.pow(prime, 1/3));
41743 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
41744 i++;
ebd8d4e8 41745 }
80c4dd2a
IC
41746 },
41747
41748 /**
41749 * Perform one cycle of SHA-512.
41750 * @param {bitArray} words one block of words.
41751 * @private
41752 */
41753 _block:function (words) {
41754 var i, wrh, wrl,
41755 w = words.slice(0),
41756 h = this._h,
41757 k = this._key,
41758 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
41759 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
41760 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
41761 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
41762
41763 // Working variables
41764 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
41765 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
41766 eh = h4h, el = h4l, fh = h5h, fl = h5l,
41767 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
41768
41769 for (i=0; i<80; i++) {
41770 // load up the input word for this round
41771 if (i<16) {
41772 wrh = w[i * 2];
41773 wrl = w[i * 2 + 1];
41774 } else {
41775 // Gamma0
41776 var gamma0xh = w[(i-15) * 2];
41777 var gamma0xl = w[(i-15) * 2 + 1];
41778 var gamma0h =
41779 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
41780 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
41781 (gamma0xh >>> 7);
41782 var gamma0l =
41783 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
41784 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
41785 ((gamma0xh << 25) | (gamma0xl >>> 7));
41786
41787 // Gamma1
41788 var gamma1xh = w[(i-2) * 2];
41789 var gamma1xl = w[(i-2) * 2 + 1];
41790 var gamma1h =
41791 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
41792 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
41793 (gamma1xh >>> 6);
41794 var gamma1l =
41795 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
41796 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
41797 ((gamma1xh << 26) | (gamma1xl >>> 6));
41798
41799 // Shortcuts
41800 var wr7h = w[(i-7) * 2];
41801 var wr7l = w[(i-7) * 2 + 1];
41802
41803 var wr16h = w[(i-16) * 2];
41804 var wr16l = w[(i-16) * 2 + 1];
41805
41806 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
41807 wrl = gamma0l + wr7l;
41808 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
41809 wrl += gamma1l;
41810 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
41811 wrl += wr16l;
41812 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
41813 }
41814
41815 w[i*2] = wrh |= 0;
41816 w[i*2 + 1] = wrl |= 0;
41817
41818 // Ch
41819 var chh = (eh & fh) ^ (~eh & gh);
41820 var chl = (el & fl) ^ (~el & gl);
41821
41822 // Maj
41823 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
41824 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
41825
41826 // Sigma0
41827 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
41828 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
41829
41830 // Sigma1
41831 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
41832 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
41833
41834 // K(round)
41835 var krh = k[i*2];
41836 var krl = k[i*2+1];
41837
41838 // t1 = h + sigma1 + ch + K(round) + W(round)
41839 var t1l = hl + sigma1l;
41840 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
41841 t1l += chl;
41842 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
41843 t1l += krl;
41844 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
41845 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
41846 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
41847
41848 // t2 = sigma0 + maj
41849 var t2l = sigma0l + majl;
41850 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
41851
41852 // Update working variables
41853 hh = gh;
41854 hl = gl;
41855 gh = fh;
41856 gl = fl;
41857 fh = eh;
41858 fl = el;
41859 el = (dl + t1l) | 0;
41860 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41861 dh = ch;
41862 dl = cl;
41863 ch = bh;
41864 cl = bl;
41865 bh = ah;
41866 bl = al;
41867 al = (t1l + t2l) | 0;
41868 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
41869 }
41870
41871 // Intermediate hash
41872 h0l = h[1] = (h0l + al) | 0;
41873 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
41874 h1l = h[3] = (h1l + bl) | 0;
41875 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
41876 h2l = h[5] = (h2l + cl) | 0;
41877 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
41878 h3l = h[7] = (h3l + dl) | 0;
41879 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41880 h4l = h[9] = (h4l + el) | 0;
41881 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
41882 h5l = h[11] = (h5l + fl) | 0;
41883 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
41884 h6l = h[13] = (h6l + gl) | 0;
41885 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
41886 h7l = h[15] = (h7l + hl) | 0;
41887 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
41888 }
41889};
41890
41891
41892//// hmac.js
41893
41894/** @fileOverview HMAC implementation.
41895 *
41896 * @author Emily Stark
41897 * @author Mike Hamburg
41898 * @author Dan Boneh
41899 */
41900
41901/** HMAC with the specified hash function.
41902 * @constructor
41903 * @param {bitArray} key the key for HMAC.
41904 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
41905 */
41906sjcl.misc.hmac = function (key, Hash) {
41907 this._hash = Hash = Hash || sjcl.hash.sha256;
41908 var exKey = [[],[]], i,
41909 bs = Hash.prototype.blockSize / 32;
41910 this._baseHash = [new Hash(), new Hash()];
41911
41912 if (key.length > bs) {
41913 key = Hash.hash(key);
41914 }
41915
41916 for (i=0; i<bs; i++) {
41917 exKey[0][i] = key[i]^0x36363636;
41918 exKey[1][i] = key[i]^0x5C5C5C5C;
41919 }
41920
41921 this._baseHash[0].update(exKey[0]);
41922 this._baseHash[1].update(exKey[1]);
41923 this._resultHash = new Hash(this._baseHash[0]);
41924};
41925
41926/** HMAC with the specified hash function. Also called encrypt since it's a prf.
41927 * @param {bitArray|String} data The data to mac.
41928 */
41929sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
41930 if (!this._updated) {
41931 this.update(data);
41932 return this.digest(data);
41933 } else {
41934 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
41935 }
41936};
41937
41938sjcl.misc.hmac.prototype.reset = function () {
41939 this._resultHash = new this._hash(this._baseHash[0]);
41940 this._updated = false;
41941};
41942
41943sjcl.misc.hmac.prototype.update = function (data) {
41944 this._updated = true;
41945 this._resultHash.update(data);
41946};
41947
41948sjcl.misc.hmac.prototype.digest = function () {
41949 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
41950
41951 this.reset();
41952
41953 return result;
41954};
41955
41956
41957//// pbkdf2.js
41958
41959
41960/** @fileOverview Password-based key-derivation function, version 2.0.
41961 *
41962 * @author Emily Stark
41963 * @author Mike Hamburg
41964 * @author Dan Boneh
41965 */
41966
41967/** Password-Based Key-Derivation Function, version 2.0.
41968 *
41969 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
41970 *
41971 * This is the method specified by RSA's PKCS #5 standard.
41972 *
41973 * @param {bitArray|String} password The password.
41974 * @param {bitArray|String} salt The salt. Should have lots of entropy.
41975 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
41976 * @param {Number} [length] The length of the derived key. Defaults to the
41977 output size of the hash function.
41978 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
41979 * @return {bitArray} the derived key.
41980 */
41981sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
41982 count = count || 1000;
41983
41984 if (length < 0 || count < 0) {
41985 throw sjcl.exception.invalid("invalid params to pbkdf2");
41986 }
41987
41988 if (typeof password === "string") {
41989 password = sjcl.codec.utf8String.toBits(password);
41990 }
41991
41992 if (typeof salt === "string") {
41993 salt = sjcl.codec.utf8String.toBits(salt);
41994 }
41995
41996 Prff = Prff || sjcl.misc.hmac;
41997
41998 var prf = new Prff(password),
41999 u, ui, i, j, k, out = [], b = sjcl.bitArray;
42000
42001 for (k = 1; 32 * out.length < (length || 1); k++) {
42002 u = ui = prf.encrypt(b.concat(salt,[k]));
42003
42004 for (i=1; i<count; i++) {
42005 ui = prf.encrypt(ui);
42006 for (j=0; j<ui.length; j++) {
42007 u[j] ^= ui[j];
42008 }
ebd8d4e8 42009 }
80c4dd2a
IC
42010
42011 out = out.concat(u);
42012 }
42013
42014 if (length) { out = b.clamp(out, length); }
42015
42016 return out;
42017};
42018
42019
42020//// sha256.js
42021
42022/** @fileOverview Javascript SHA-256 implementation.
42023 *
42024 * An older version of this implementation is available in the public
42025 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
42026 * Stanford University 2008-2010 and BSD-licensed for liability
42027 * reasons.
42028 *
42029 * Special thanks to Aldo Cortesi for pointing out several bugs in
42030 * this code.
42031 *
42032 * @author Emily Stark
42033 * @author Mike Hamburg
42034 * @author Dan Boneh
42035 */
42036
42037/**
42038 * Context for a SHA-256 operation in progress.
42039 * @constructor
42040 * @class Secure Hash Algorithm, 256 bits.
42041 */
42042sjcl.hash.sha256 = function (hash) {
42043 if (!this._key[0]) { this._precompute(); }
42044 if (hash) {
42045 this._h = hash._h.slice(0);
42046 this._buffer = hash._buffer.slice(0);
42047 this._length = hash._length;
42048 } else {
42049 this.reset();
42050 }
42051};
42052
42053/**
42054 * Hash a string or an array of words.
42055 * @static
42056 * @param {bitArray|String} data the data to hash.
42057 * @return {bitArray} The hash value, an array of 16 big-endian words.
42058 */
42059sjcl.hash.sha256.hash = function (data) {
42060 return (new sjcl.hash.sha256()).update(data).finalize();
42061};
42062
42063sjcl.hash.sha256.prototype = {
42064 /**
42065 * The hash's block size, in bits.
42066 * @constant
42067 */
42068 blockSize: 512,
42069
42070 /**
42071 * Reset the hash state.
42072 * @return this
42073 */
42074 reset:function () {
42075 this._h = this._init.slice(0);
42076 this._buffer = [];
42077 this._length = 0;
42078 return this;
42079 },
42080
42081 /**
42082 * Input several words to the hash.
42083 * @param {bitArray|String} data the data to hash.
42084 * @return this
42085 */
42086 update: function (data) {
42087 if (typeof data === "string") {
42088 data = sjcl.codec.utf8String.toBits(data);
42089 }
42090 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
42091 ol = this._length,
42092 nl = this._length = ol + sjcl.bitArray.bitLength(data);
42093 for (i = 512+ol & -512; i <= nl; i+= 512) {
42094 this._block(b.splice(0,16));
ebd8d4e8 42095 }
3af2954a 42096 return this;
80c4dd2a
IC
42097 },
42098
42099 /**
42100 * Complete hashing and output the hash value.
42101 * @return {bitArray} The hash value, an array of 8 big-endian words.
42102 */
42103 finalize:function () {
42104 var i, b = this._buffer, h = this._h;
42105
42106 // Round out and push the buffer
42107 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
42108
42109 // Round out the buffer to a multiple of 16 words, less the 2 length words.
42110 for (i = b.length + 2; i & 15; i++) {
42111 b.push(0);
42112 }
42113
42114 // append the length
42115 b.push(Math.floor(this._length / 0x100000000));
42116 b.push(this._length | 0);
42117
42118 while (b.length) {
42119 this._block(b.splice(0,16));
42120 }
42121
42122 this.reset();
42123 return h;
42124 },
42125
42126 /**
42127 * The SHA-256 initialization vector, to be precomputed.
42128 * @private
42129 */
42130 _init:[],
42131 /*
42132 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
42133 */
42134
42135 /**
42136 * The SHA-256 hash key, to be precomputed.
42137 * @private
42138 */
42139 _key:[],
42140 /*
42141 _key:
42142 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
42143 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
42144 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
42145 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
42146 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
42147 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
42148 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
42149 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
42150 */
42151
42152
42153 /**
42154 * Function to precompute _init and _key.
42155 * @private
42156 */
42157 _precompute: function () {
42158 var i = 0, prime = 2, factor;
42159
42160 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
42161
42162 outer: for (; i<64; prime++) {
42163 for (factor=2; factor*factor <= prime; factor++) {
42164 if (prime % factor === 0) {
42165 // not a prime
42166 continue outer;
ebd8d4e8 42167 }
80c4dd2a
IC
42168 }
42169
42170 if (i<8) {
42171 this._init[i] = frac(Math.pow(prime, 1/2));
42172 }
42173 this._key[i] = frac(Math.pow(prime, 1/3));
42174 i++;
ebd8d4e8 42175 }
80c4dd2a
IC
42176 },
42177
42178 /**
42179 * Perform one cycle of SHA-256.
42180 * @param {bitArray} words one block of words.
42181 * @private
42182 */
42183 _block:function (words) {
42184 var i, tmp, a, b,
42185 w = words.slice(0),
42186 h = this._h,
42187 k = this._key,
42188 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
42189 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
42190
42191 /* Rationale for placement of |0 :
42192 * If a value can overflow is original 32 bits by a factor of more than a few
42193 * million (2^23 ish), there is a possibility that it might overflow the
42194 * 53-bit mantissa and lose precision.
42195 *
42196 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
42197 * propagates around the loop, and on the hash state h[]. I don't believe
42198 * that the clamps on h4 and on h0 are strictly necessary, but it's close
42199 * (for h4 anyway), and better safe than sorry.
42200 *
42201 * The clamps on h[] are necessary for the output to be correct even in the
42202 * common case and for short inputs.
42203 */
42204 for (i=0; i<64; i++) {
42205 // load up the input word for this round
42206 if (i<16) {
42207 tmp = w[i];
42208 } else {
42209 a = w[(i+1 ) & 15];
42210 b = w[(i+14) & 15];
42211 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
42212 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
42213 w[i&15] + w[(i+9) & 15]) | 0;
42214 }
42215
42216 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
42217
42218 // shift register
42219 h7 = h6; h6 = h5; h5 = h4;
42220 h4 = h3 + tmp | 0;
42221 h3 = h2; h2 = h1; h1 = h0;
42222
42223 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
42224 }
42225
42226 h[0] = h[0]+h0 | 0;
42227 h[1] = h[1]+h1 | 0;
42228 h[2] = h[2]+h2 | 0;
42229 h[3] = h[3]+h3 | 0;
42230 h[4] = h[4]+h4 | 0;
42231 h[5] = h[5]+h5 | 0;
42232 h[6] = h[6]+h6 | 0;
42233 h[7] = h[7]+h7 | 0;
42234 }
42235};
dc55c6b0 42236</script>
ab78acc6 42237 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 42238WORDLISTS["english"] = [
ebd8d4e8
IC
42239"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
42240"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
42241"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
42242"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
42243"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
42244"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
42245"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
42246"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
42247"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
42248"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
42249"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
42250"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
42251"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
42252"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
42253"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
42254"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
42255"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
42256"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
42257"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
42258"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
42259"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
42260"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
42261"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
42262"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
42263"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
42264"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
42265"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
42266"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
42267"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
42268"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
42269"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
42270"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
42271"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
42272"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
42273"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
42274"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
42275"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
42276"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
42277"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
42278"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
42279"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
42280"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
42281"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
42282"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
42283"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
42284"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
42285"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
42286"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
42287"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
42288"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
42289"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
42290"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
42291"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
42292"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
42293"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
42294"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
42295"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
42296"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
42297"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
42298"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
42299"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
42300"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
42301"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
42302"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
42303"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
42304"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
42305"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
42306"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
42307"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
42308"film","filter","final","find","fine","finger","finish","fire","firm","first",
42309"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
42310"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
42311"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
42312"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
42313"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
42314"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
42315"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
42316"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
42317"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
42318"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
42319"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
42320"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
42321"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
42322"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
42323"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
42324"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
42325"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
42326"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
42327"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
42328"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
42329"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
42330"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
42331"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
42332"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
42333"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
42334"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
42335"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
42336"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
42337"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
42338"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
42339"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
42340"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
42341"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
42342"liar","liberty","library","license","life","lift","light","like","limb","limit",
42343"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
42344"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
42345"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
42346"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
42347"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
42348"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
42349"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
42350"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
42351"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
42352"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
42353"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
42354"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
42355"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
42356"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
42357"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
42358"network","neutral","never","news","next","nice","night","noble","noise","nominee",
42359"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
42360"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
42361"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
42362"oil","okay","old","olive","olympic","omit","once","one","onion","online",
42363"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
42364"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
42365"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
42366"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
42367"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
42368"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
42369"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
42370"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
42371"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
42372"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
42373"pole","police","pond","pony","pool","popular","portion","position","possible","post",
42374"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
42375"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
42376"prize","problem","process","produce","profit","program","project","promote","proof","property",
42377"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
42378"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
42379"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
42380"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
42381"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
42382"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
42383"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
42384"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
42385"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
42386"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
42387"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
42388"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
42389"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
42390"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
42391"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
42392"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
42393"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
42394"scrub","sea","search","season","seat","second","secret","section","security","seed",
42395"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
42396"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
42397"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
42398"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
42399"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
42400"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
42401"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
42402"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
42403"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
42404"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
42405"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
42406"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
42407"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
42408"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
42409"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
42410"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
42411"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
42412"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
42413"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
42414"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
42415"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
42416"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
42417"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
42418"thank","that","theme","then","theory","there","they","thing","this","thought",
42419"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
42420"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
42421"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
42422"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
42423"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
42424"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
42425"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
42426"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
42427"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
42428"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
42429"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
42430"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
42431"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
42432"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
42433"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
42434"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
42435"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
42436"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
42437"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
42438"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
42439"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
42440"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
42441"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
42442"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
42443"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
42444</script>
42445 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42446WORDLISTS["japanese"] = [
42447"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
42448"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
42449"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
42450"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
42451"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
42452"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
42453"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
42454"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
42455"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
42456"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
42457"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
42458"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
42459"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
42460"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
42461"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
42462"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
42463"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
42464"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
42465"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
42466"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
42467"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
42468"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
42469"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
42470"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
42471"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
42472"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
42473"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
42474"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
42475"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
42476"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
42477"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
42478"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
42479"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
42480"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
42481"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
42482"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
42483"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
42484"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
42485"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
42486"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
42487"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
42488"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
42489"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
42490"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
42491"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
42492"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
42493"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
42494"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
42495"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
42496"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
42497"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
42498"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
42499"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
42500"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
42501"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
42502"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
42503"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
42504"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
42505"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
42506"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
42507"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
42508"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
42509"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
42510"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
42511"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
42512"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
42513"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
42514"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
42515"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
42516"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
42517"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
42518"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
42519"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
42520"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
42521"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
42522"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
42523"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
42524"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
42525"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
42526"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
42527"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
42528"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
42529"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
42530"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
42531"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
42532"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
42533"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
42534"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
42535"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
42536"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
42537"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
42538"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
42539"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
42540"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
42541"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
42542"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
42543"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
42544"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
42545"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
42546"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
42547"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
42548"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
42549"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
42550"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
42551"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
42552"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
42553"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
42554"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
42555"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
42556"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
42557"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
42558"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
42559"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
42560"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
42561"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
42562"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
42563"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
42564"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
42565"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
42566"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
42567"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
42568"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
42569"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
42570"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
42571"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
42572"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
42573"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
42574"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
42575"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
42576"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
42577"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
42578"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
42579"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
42580"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
42581"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
42582"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
42583"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
42584"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
42585"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
42586"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
42587"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
42588"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
42589"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
42590"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
42591"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
42592"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
42593"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
42594"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
42595"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
42596"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
42597"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
42598"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
42599"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
42600"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
42601"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
42602"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
42603"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
42604"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
42605"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
42606"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
42607"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
42608"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
42609"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
42610"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
42611"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
42612"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
42613"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
42614"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
42615"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
42616"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
42617"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
42618"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
42619"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
42620"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
42621"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
42622"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
42623"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
42624"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
42625"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
42626"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
42627"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
42628"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
42629"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
42630"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
42631"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
42632"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
42633"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
42634"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
42635"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
42636"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
42637"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
42638"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
42639"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
42640"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
42641"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
42642"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
42643"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
42644"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
42645"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
42646"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
42647"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
42648"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
42649"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
42650"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
42651"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
42652</script>
42653 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42654WORDLISTS["spanish"] = [
42655"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
42656"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
42657"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
42658"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
42659"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
42660"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
42661"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
42662"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
42663"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
42664"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
42665"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
42666"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
42667"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
42668"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
42669"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
42670"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
42671"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
42672"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
42673"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
42674"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
42675"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
42676"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
42677"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
42678"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
42679"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
42680"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
42681"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
42682"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
42683"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
42684"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
42685"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
42686"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
42687"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
42688"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
42689"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
42690"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
42691"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
42692"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
42693"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
42694"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
42695"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
42696"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
42697"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
42698"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
42699"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
42700"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
42701"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
42702"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
42703"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
42704"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
42705"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
42706"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
42707"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
42708"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
42709"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
42710"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
42711"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
42712"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
42713"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
42714"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
42715"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
42716"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
42717"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
42718"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
42719"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
42720"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
42721"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
42722"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
42723"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
42724"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
42725"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
42726"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
42727"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
42728"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
42729"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
42730"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
42731"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
42732"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
42733"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
42734"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
42735"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
42736"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
42737"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
42738"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
42739"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
42740"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
42741"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
42742"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
42743"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
42744"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
42745"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
42746"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
42747"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
42748"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
42749"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
42750"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
42751"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
42752"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
42753"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
42754"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
42755"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
42756"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
42757"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
42758"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
42759"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
42760"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
42761"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
42762"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
42763"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
42764"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
42765"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
42766"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
42767"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
42768"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
42769"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
42770"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
42771"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
42772"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
42773"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
42774"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
42775"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
42776"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
42777"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
42778"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
42779"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
42780"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
42781"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
42782"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
42783"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
42784"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
42785"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
42786"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
42787"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
42788"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
42789"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
42790"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
42791"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
42792"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
42793"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
42794"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
42795"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
42796"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
42797"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
42798"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
42799"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
42800"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
42801"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
42802"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
42803"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
42804"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
42805"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
42806"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
42807"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
42808"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
42809"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
42810"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
42811"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
42812"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
42813"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
42814"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
42815"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
42816"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
42817"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
42818"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
42819"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
42820"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
42821"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
42822"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
42823"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
42824"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
42825"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
42826"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
42827"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
42828"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
42829"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
42830"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
42831"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
42832"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
42833"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
42834"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
42835"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
42836"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
42837"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
42838"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
42839"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
42840"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
42841"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
42842"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
42843"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
42844"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
42845"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
42846"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
42847"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
42848"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
42849"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
42850"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
42851"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
42852"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
42853"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
42854"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
42855"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
42856"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
42857"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
42858"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
42859"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
42860</script>
42861 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42862WORDLISTS["chinese_simplified"] = [
42863"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
42864"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
42865"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
42866"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
42867"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
42868"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
42869"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
42870"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
42871"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
42872"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
42873"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
42874"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
42875"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
42876"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
42877"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
42878"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
42879"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
42880"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
42881"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
42882"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
42883"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
42884"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
42885"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
42886"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
42887"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
42888"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
42889"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
42890"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
42891"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
42892"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
42893"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
42894"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
42895"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
42896"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
42897"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
42898"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
42899"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
42900"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
42901"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
42902"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
42903"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
42904"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
42905"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
42906"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
42907"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
42908"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
42909"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
42910"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
42911"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
42912"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
42913"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
42914"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
42915"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
42916"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
42917"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
42918"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
42919"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
42920"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
42921"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
42922"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
42923"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
42924"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
42925"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
42926"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
42927"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
42928"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
42929"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
42930"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
42931"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
42932"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
42933"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
42934"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
42935"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
42936"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
42937"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
42938"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
42939"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
42940"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
42941"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
42942"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
42943"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
42944"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
42945"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
42946"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
42947"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
42948"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
42949"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
42950"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
42951"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
42952"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
42953"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
42954"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
42955"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
42956"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
42957"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
42958"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
42959"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
42960"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
42961"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
42962"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
42963"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
42964"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
42965"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
42966"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
42967"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
42968"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
42969"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
42970"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
42971"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
42972"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
42973"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
42974"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
42975"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
42976"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
42977"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
42978"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
42979"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
42980"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
42981"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
42982"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
42983"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
42984"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
42985"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
42986"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
42987"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
42988"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
42989"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
42990"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
42991"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
42992"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
42993"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
42994"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
42995"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
42996"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
42997"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
42998"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
42999"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
43000"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
43001"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
43002"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
43003"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
43004"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
43005"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
43006"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
43007"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
43008"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
43009"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
43010"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
43011"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
43012"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
43013"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
43014"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
43015"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
43016"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
43017"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
43018"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
43019"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
43020"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
43021"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
43022"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
43023"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
43024"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
43025"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
43026"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
43027"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
43028"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
43029"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
43030"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
43031"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
43032"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
43033"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
43034"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
43035"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
43036"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
43037"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
43038"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
43039"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
43040"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
43041"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
43042"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
43043"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
43044"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
43045"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
43046"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
43047"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
43048"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
43049"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
43050"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
43051"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
43052"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
43053"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
43054"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
43055"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
43056"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
43057"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
43058"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
43059"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
43060"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
43061"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
43062"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
43063"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
43064"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
43065"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
43066"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
43067"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
43068</script>
43069 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43070WORDLISTS["chinese_traditional"] = [
43071"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
43072"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
43073"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
43074"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
43075"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
43076"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
43077"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
43078"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
43079"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
43080"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
43081"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
43082"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
43083"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
43084"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
43085"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
43086"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
43087"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
43088"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
43089"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
43090"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
43091"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
43092"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
43093"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
43094"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
43095"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
43096"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
43097"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
43098"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
43099"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
43100"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
43101"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
43102"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
43103"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
43104"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
43105"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
43106"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
43107"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
43108"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
43109"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
43110"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
43111"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
43112"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
43113"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
43114"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
43115"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
43116"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
43117"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
43118"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
43119"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
43120"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
43121"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
43122"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
43123"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
43124"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
43125"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
43126"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
43127"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
43128"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
43129"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
43130"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
43131"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
43132"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
43133"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
43134"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
43135"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
43136"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
43137"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
43138"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
43139"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
43140"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
43141"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
43142"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
43143"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
43144"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
43145"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
43146"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43147"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
43148"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
43149"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
43150"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
43151"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
43152"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
43153"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
43154"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
43155"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
43156"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
43157"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
43158"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
43159"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
43160"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
43161"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
43162"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
43163"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43164"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
43165"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
43166"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
43167"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
43168"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
43169"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
43170"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
43171"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
43172"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
43173"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
43174"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
43175"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
43176"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
43177"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
43178"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
43179"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43180"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43181"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
43182"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
43183"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
43184"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
43185"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
43186"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
43187"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
43188"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
43189"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
43190"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
43191"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
43192"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43193"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
43194"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
43195"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
43196"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
43197"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
43198"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
43199"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
43200"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
43201"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
43202"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
43203"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
43204"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
43205"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
43206"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
43207"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
43208"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
43209"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
43210"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
43211"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
43212"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
43213"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
43214"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
43215"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
43216"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
43217"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
43218"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
43219"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
43220"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
43221"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
43222"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
43223"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
43224"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
43225"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
43226"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
43227"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
43228"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
43229"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
43230"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
43231"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
43232"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
43233"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
43234"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
43235"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
43236"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
43237"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
43238"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
43239"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
43240"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
43241"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
43242"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
43243"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
43244"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
43245"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
43246"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
43247"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
43248"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
43249"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
43250"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
43251"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
43252"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
43253"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
43254"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
43255"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
43256"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
43257"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
43258"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
43259"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
43260"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
43261"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
43262"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
43263"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
43264"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
43265"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
43266"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
43267"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
43268"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
43269"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
43270"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
43271"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
43272"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
43273"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
43274"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
43275"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
43276</script>
43277 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43278WORDLISTS["french"] = [
43279"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
43280"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
43281"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
43282"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
43283"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
43284"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
43285"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
43286"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
43287"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
43288"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
43289"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
43290"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
43291"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
43292"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
43293"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
43294"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
43295"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
43296"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
43297"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
43298"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
43299"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
43300"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
43301"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
43302"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
43303"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
43304"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
43305"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
43306"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
43307"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
43308"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
43309"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
43310"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
43311"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
43312"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
43313"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
43314"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
43315"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
43316"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
43317"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
43318"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
43319"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
43320"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
43321"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
43322"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
43323"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
43324"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
43325"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
43326"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
43327"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
43328"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
43329"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
43330"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
43331"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
43332"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
43333"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
43334"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
43335"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
43336"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
43337"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
43338"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
43339"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
43340"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
43341"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
43342"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
43343"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
43344"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
43345"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
43346"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
43347"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
43348"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
43349"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
43350"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
43351"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
43352"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
43353"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
43354"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
43355"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
43356"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
43357"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
43358"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
43359"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
43360"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
43361"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
43362"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
43363"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
43364"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
43365"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
43366"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
43367"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
43368"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
43369"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
43370"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
43371"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
43372"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
43373"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
43374"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
43375"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
43376"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
43377"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
43378"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
43379"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
43380"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
43381"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
43382"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
43383"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
43384"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
43385"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
43386"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
43387"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
43388"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
43389"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
43390"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
43391"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
43392"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
43393"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
43394"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
43395"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
43396"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
43397"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
43398"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
43399"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
43400"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
43401"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
43402"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
43403"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
43404"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
43405"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
43406"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
43407"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
43408"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
43409"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
43410"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
43411"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
43412"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
43413"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
43414"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
43415"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
43416"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
43417"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
43418"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
43419"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
43420"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
43421"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
43422"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
43423"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
43424"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
43425"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
43426"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
43427"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
43428"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
43429"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
43430"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
43431"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
43432"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
43433"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
43434"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
43435"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
43436"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
43437"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
43438"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
43439"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
43440"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
43441"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
43442"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
43443"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
43444"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
43445"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
43446"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
43447"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
43448"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
43449"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
43450"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
43451"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
43452"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
43453"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
43454"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
43455"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
43456"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
43457"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
43458"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
43459"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
43460"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
43461"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
43462"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
43463"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
43464"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
43465"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
43466"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
43467"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
43468"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
43469"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
43470"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
43471"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
43472"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
43473"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
43474"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
43475"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
43476"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
43477"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
43478"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
43479"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
43480"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
43481"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
43482"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
43483"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
43484</script>
43485 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43486WORDLISTS["italian"] = [
43487"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
43488"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
43489"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
43490"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
43491"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
43492"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
43493"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
43494"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
43495"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
43496"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
43497"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
43498"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
43499"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
43500"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
43501"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
43502"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
43503"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
43504"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
43505"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
43506"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
43507"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
43508"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
43509"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
43510"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
43511"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
43512"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
43513"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
43514"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
43515"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
43516"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
43517"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
43518"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
43519"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
43520"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
43521"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
43522"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
43523"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
43524"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
43525"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
43526"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
43527"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
43528"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
43529"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
43530"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
43531"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
43532"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
43533"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
43534"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
43535"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
43536"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
43537"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
43538"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
43539"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
43540"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
43541"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
43542"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
43543"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
43544"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
43545"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
43546"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
43547"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
43548"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
43549"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
43550"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
43551"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
43552"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
43553"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
43554"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
43555"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
43556"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
43557"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
43558"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
43559"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
43560"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
43561"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
43562"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
43563"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
43564"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
43565"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
43566"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
43567"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
43568"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
43569"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
43570"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
43571"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
43572"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
43573"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
43574"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
43575"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
43576"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
43577"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
43578"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
43579"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
43580"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
43581"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
43582"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
43583"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
43584"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
43585"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
43586"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
43587"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
43588"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
43589"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
43590"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
43591"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
43592"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
43593"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
43594"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
43595"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
43596"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
43597"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
43598"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
43599"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
43600"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
43601"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
43602"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
43603"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
43604"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
43605"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
43606"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
43607"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
43608"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
43609"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
43610"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
43611"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
43612"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
43613"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
43614"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
43615"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
43616"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
43617"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
43618"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
43619"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
43620"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
43621"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
43622"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
43623"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
43624"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
43625"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
43626"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
43627"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
43628"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
43629"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
43630"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
43631"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
43632"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
43633"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
43634"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
43635"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
43636"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
43637"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
43638"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
43639"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
43640"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
43641"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
43642"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
43643"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
43644"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
43645"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
43646"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
43647"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
43648"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
43649"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
43650"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
43651"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
43652"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
43653"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
43654"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
43655"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
43656"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
43657"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
43658"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
43659"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
43660"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
43661"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
43662"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
43663"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
43664"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
43665"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
43666"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
43667"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
43668"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
43669"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
43670"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
43671"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
43672"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
43673"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
43674"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
43675"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
43676"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
43677"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
43678"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
43679"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
43680"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
43681"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
43682"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
43683"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
43684"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
43685"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
43686"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
43687"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
43688"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
43689"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
43690"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
43691"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 43692</script>
ab78acc6 43693 <script>/*
3af2954a
IC
43694 * Copyright (c) 2013 Pavol Rusnak
43695 *
43696 * Permission is hereby granted, free of charge, to any person obtaining a copy of
43697 * this software and associated documentation files (the "Software"), to deal in
43698 * the Software without restriction, including without limitation the rights to
43699 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
43700 * of the Software, and to permit persons to whom the Software is furnished to do
43701 * so, subject to the following conditions:
43702 *
43703 * The above copyright notice and this permission notice shall be included in all
43704 * copies or substantial portions of the Software.
43705 *
43706 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43707 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43708 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43709 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
43710 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
43711 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43712 */
43713
43714/*
43715 * Javascript port from python by Ian Coleman
43716 *
80c4dd2a
IC
43717 * Requires code from sjcl
43718 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
43719 */
43720
43721var Mnemonic = function(language) {
43722
43723 var PBKDF2_ROUNDS = 2048;
43724 var RADIX = 2048;
43725
43726 var self = this;
43727 var wordlist = [];
43728
80c4dd2a
IC
43729 var hmacSHA512 = function(key) {
43730 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
43731 this.encrypt = function() {
43732 return hasher.encrypt.apply(hasher, arguments);
43733 };
43734 };
43735
3af2954a
IC
43736 function init() {
43737 wordlist = WORDLISTS[language];
43738 if (wordlist.length != RADIX) {
43739 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
43740 throw err;
43741 }
43742 }
43743
43744 self.generate = function(strength) {
43745 strength = strength || 128;
43746 var r = strength % 32;
43747 if (r > 0) {
43748 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
43749 }
43750 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
43751 if (!hasStrongCrypto) {
43752 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
43753 }
43754 var buffer = new Uint8Array(strength / 8);
43755 var data = crypto.getRandomValues(buffer);
43756 return self.toMnemonic(data);
43757 }
43758
80c4dd2a
IC
43759 self.toMnemonic = function(byteArray) {
43760 if (byteArray.length % 4 > 0) {
43761 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
43762 }
43763
43764 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
43765 var data = byteArrayToWordArray(byteArray);
43766 var hash = sjcl.hash.sha256.hash(data);
43767 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
43768
43769 // b is a binary string, eg '00111010101100...'
43770 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
43771 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
43772 //
43773 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
43774 // c = bin(int(h, 16))[2:].zfill(256)
43775 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
43776 var a = byteArrayToBinaryString(byteArray);
43777 var c = zfill(hexStringToBinaryString(h), 256);
43778 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
43779 // b = line1 + line2
43780 var b = a + d;
43781
43782 var result = [];
43783 var blen = b.length / 11;
43784 for (var i=0; i<blen; i++) {
43785 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
43786 result.push(wordlist[idx]);
43787 }
0515eeec 43788 return self.joinWords(result);
3af2954a
IC
43789 }
43790
43791 self.check = function(mnemonic) {
0515eeec 43792 var mnemonic = self.splitWords(mnemonic);
18abe53b 43793 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
43794 return false
43795 }
43796 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
43797 var idx = [];
43798 for (var i=0; i<mnemonic.length; i++) {
43799 var word = mnemonic[i];
43800 var wordIndex = wordlist.indexOf(word);
43801 if (wordIndex == -1) {
43802 return false;
43803 }
43804 var binaryIndex = zfill(wordIndex.toString(2), 11);
43805 idx.push(binaryIndex);
43806 }
43807 var b = idx.join('');
43808 var l = b.length;
43809 //d = b[:l / 33 * 32]
43810 //h = b[-l / 33:]
43811 var d = b.substring(0, l / 33 * 32);
43812 var h = b.substring(l - l / 33, l);
43813 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 43814 var nd = binaryStringToWordArray(d);
3af2954a 43815 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
43816 var ndHash = sjcl.hash.sha256.hash(nd);
43817 var ndHex = sjcl.codec.hex.fromBits(ndHash);
43818 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
43819 var nh = ndBstr.substring(0,l/33);
43820 return h == nh;
43821 }
43822
43823 self.toSeed = function(mnemonic, passphrase) {
43824 passphrase = passphrase || '';
599fb39e
IC
43825 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
43826 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
43827 passphrase = self.normalizeString(passphrase)
43828 passphrase = "mnemonic" + passphrase;
599fb39e 43829 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
43830 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
43831 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
43832 var hashHex = sjcl.codec.hex.fromBits(result);
43833 return hashHex;
3af2954a
IC
43834 }
43835
0515eeec
IC
43836 self.splitWords = function(mnemonic) {
43837 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
43838 }
43839
43840 self.joinWords = function(words) {
43841 // Set space correctly depending on the language
43842 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
43843 var space = " ";
43844 if (language == "japanese") {
43845 space = "\u3000"; // ideographic space
43846 }
43847 return words.join(space);
43848 }
43849
3af2954a
IC
43850 self.normalizeString = function(str) {
43851 if (typeof str.normalize == "function") {
43852 return str.normalize("NFKD");
43853 }
43854 else {
43855 // TODO decide how to handle this in the future.
43856 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
43857 return str;
43858 }
43859 }
43860
80c4dd2a
IC
43861 function byteArrayToWordArray(data) {
43862 var a = [];
43863 for (var i=0; i<data.length/4; i++) {
43864 v = 0;
43865 v += data[i*4 + 0] << 8 * 3;
43866 v += data[i*4 + 1] << 8 * 2;
43867 v += data[i*4 + 2] << 8 * 1;
43868 v += data[i*4 + 3] << 8 * 0;
43869 a.push(v);
43870 }
43871 return a;
43872 }
43873
3af2954a
IC
43874 function byteArrayToBinaryString(data) {
43875 var bin = "";
43876 for (var i=0; i<data.length; i++) {
43877 bin += zfill(data[i].toString(2), 8);
43878 }
43879 return bin;
43880 }
43881
80c4dd2a
IC
43882 function hexStringToBinaryString(hexString) {
43883 binaryString = "";
43884 for (var i=0; i<hexString.length; i++) {
43885 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
43886 }
43887 return binaryString;
43888 }
43889
43890 function binaryStringToWordArray(binary) {
43891 var aLen = binary.length / 32;
43892 var a = [];
43893 for (var i=0; i<aLen; i++) {
43894 var valueStr = binary.substring(0,32);
3af2954a 43895 var value = parseInt(valueStr, 2);
80c4dd2a
IC
43896 a.push(value);
43897 binary = binary.slice(32);
3af2954a 43898 }
80c4dd2a 43899 return a;
3af2954a
IC
43900 }
43901
43902 // Pad a numeric string on the left with zero digits until the given width
43903 // is reached.
43904 // Note this differs to the python implementation because it does not
43905 // handle numbers starting with a sign.
43906 function zfill(source, length) {
43907 source = source.toString();
43908 while (source.length < length) {
43909 source = '0' + source;
43910 }
43911 return source;
43912 }
43913
43914 init();
ebd8d4e8 43915
3af2954a 43916}
dc55c6b0 43917</script>
95f04905
IC
43918 <script>/*
43919 JavaScript BigInteger library version 0.9.1
43920 http://silentmatt.com/biginteger/
18abe53b 43921
95f04905
IC
43922 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
43923 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
43924 Licensed under the MIT license.
c6624d51 43925
95f04905
IC
43926 Support for arbitrary internal representation base was added by
43927 Vitaly Magerya.
43928*/
18abe53b 43929
95f04905
IC
43930/*
43931 File: biginteger.js
18abe53b 43932
95f04905 43933 Exports:
18abe53b 43934
95f04905
IC
43935 <BigInteger>
43936*/
43937(function(exports) {
43938"use strict";
43939/*
43940 Class: BigInteger
43941 An arbitrarily-large integer.
18abe53b 43942
95f04905
IC
43943 <BigInteger> objects should be considered immutable. None of the "built-in"
43944 methods modify *this* or their arguments. All properties should be
43945 considered private.
18abe53b 43946
95f04905
IC
43947 All the methods of <BigInteger> instances can be called "statically". The
43948 static versions are convenient if you don't already have a <BigInteger>
43949 object.
18abe53b 43950
95f04905 43951 As an example, these calls are equivalent.
18abe53b 43952
95f04905
IC
43953 > BigInteger(4).multiply(5); // returns BigInteger(20);
43954 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 43955
95f04905
IC
43956 > var a = 42;
43957 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
43958*/
c6624d51 43959
95f04905 43960var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
43961
43962/*
43963 Constructor: BigInteger()
43964 Convert a value to a <BigInteger>.
43965
43966 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
43967 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
43968 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
43969 without a radix argument.
43970
43971 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
43972 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
43973 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
43974 > var n3 = BigInteger(n2); // Return n2, unchanged
43975
43976 The constructor form only takes an array and a sign. *n* must be an
43977 array of numbers in little-endian order, where each digit is between 0
43978 and BigInteger.base. The second parameter sets the sign: -1 for
43979 negative, +1 for positive, or 0 for zero. The array is *not copied and
43980 may be modified*. If the array contains only zeros, the sign parameter
43981 is ignored and is forced to zero.
43982
43983 > new BigInteger([5], -1): create a new BigInteger with value -5
43984
43985 Parameters:
43986
43987 n - Value to convert to a <BigInteger>.
43988
43989 Returns:
43990
43991 A <BigInteger> value.
43992
43993 See Also:
43994
43995 <parse>, <BigInteger>
43996*/
43997function BigInteger(n, s, token) {
43998 if (token !== CONSTRUCT) {
43999 if (n instanceof BigInteger) {
44000 return n;
44001 }
44002 else if (typeof n === "undefined") {
44003 return ZERO;
44004 }
44005 return BigInteger.parse(n);
44006 }
44007
44008 n = n || []; // Provide the nullary constructor for subclasses.
44009 while (n.length && !n[n.length - 1]) {
44010 --n.length;
44011 }
44012 this._d = n;
44013 this._s = n.length ? (s || 1) : 0;
44014}
44015
44016BigInteger._construct = function(n, s) {
44017 return new BigInteger(n, s, CONSTRUCT);
44018};
44019
44020// Base-10 speedup hacks in parse, toString, exp10 and log functions
44021// require base to be a power of 10. 10^7 is the largest such power
44022// that won't cause a precision loss when digits are multiplied.
44023var BigInteger_base = 10000000;
44024var BigInteger_base_log10 = 7;
44025
44026BigInteger.base = BigInteger_base;
44027BigInteger.base_log10 = BigInteger_base_log10;
44028
44029var ZERO = new BigInteger([], 0, CONSTRUCT);
44030// Constant: ZERO
44031// <BigInteger> 0.
44032BigInteger.ZERO = ZERO;
44033
44034var ONE = new BigInteger([1], 1, CONSTRUCT);
44035// Constant: ONE
44036// <BigInteger> 1.
44037BigInteger.ONE = ONE;
44038
44039var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
44040// Constant: M_ONE
44041// <BigInteger> -1.
44042BigInteger.M_ONE = M_ONE;
44043
44044// Constant: _0
44045// Shortcut for <ZERO>.
44046BigInteger._0 = ZERO;
44047
44048// Constant: _1
44049// Shortcut for <ONE>.
44050BigInteger._1 = ONE;
44051
44052/*
44053 Constant: small
44054 Array of <BigIntegers> from 0 to 36.
44055
44056 These are used internally for parsing, but useful when you need a "small"
44057 <BigInteger>.
44058
44059 See Also:
44060
44061 <ZERO>, <ONE>, <_0>, <_1>
44062*/
44063BigInteger.small = [
44064 ZERO,
44065 ONE,
44066 /* Assuming BigInteger_base > 36 */
44067 new BigInteger( [2], 1, CONSTRUCT),
44068 new BigInteger( [3], 1, CONSTRUCT),
44069 new BigInteger( [4], 1, CONSTRUCT),
44070 new BigInteger( [5], 1, CONSTRUCT),
44071 new BigInteger( [6], 1, CONSTRUCT),
44072 new BigInteger( [7], 1, CONSTRUCT),
44073 new BigInteger( [8], 1, CONSTRUCT),
44074 new BigInteger( [9], 1, CONSTRUCT),
44075 new BigInteger([10], 1, CONSTRUCT),
44076 new BigInteger([11], 1, CONSTRUCT),
44077 new BigInteger([12], 1, CONSTRUCT),
44078 new BigInteger([13], 1, CONSTRUCT),
44079 new BigInteger([14], 1, CONSTRUCT),
44080 new BigInteger([15], 1, CONSTRUCT),
44081 new BigInteger([16], 1, CONSTRUCT),
44082 new BigInteger([17], 1, CONSTRUCT),
44083 new BigInteger([18], 1, CONSTRUCT),
44084 new BigInteger([19], 1, CONSTRUCT),
44085 new BigInteger([20], 1, CONSTRUCT),
44086 new BigInteger([21], 1, CONSTRUCT),
44087 new BigInteger([22], 1, CONSTRUCT),
44088 new BigInteger([23], 1, CONSTRUCT),
44089 new BigInteger([24], 1, CONSTRUCT),
44090 new BigInteger([25], 1, CONSTRUCT),
44091 new BigInteger([26], 1, CONSTRUCT),
44092 new BigInteger([27], 1, CONSTRUCT),
44093 new BigInteger([28], 1, CONSTRUCT),
44094 new BigInteger([29], 1, CONSTRUCT),
44095 new BigInteger([30], 1, CONSTRUCT),
44096 new BigInteger([31], 1, CONSTRUCT),
44097 new BigInteger([32], 1, CONSTRUCT),
44098 new BigInteger([33], 1, CONSTRUCT),
44099 new BigInteger([34], 1, CONSTRUCT),
44100 new BigInteger([35], 1, CONSTRUCT),
44101 new BigInteger([36], 1, CONSTRUCT)
44102];
44103
44104// Used for parsing/radix conversion
44105BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
44106
44107/*
44108 Method: toString
44109 Convert a <BigInteger> to a string.
44110
44111 When *base* is greater than 10, letters are upper case.
44112
44113 Parameters:
44114
44115 base - Optional base to represent the number in (default is base 10).
44116 Must be between 2 and 36 inclusive, or an Error will be thrown.
44117
44118 Returns:
44119
44120 The string representation of the <BigInteger>.
44121*/
44122BigInteger.prototype.toString = function(base) {
44123 base = +base || 10;
44124 if (base < 2 || base > 36) {
44125 throw new Error("illegal radix " + base + ".");
44126 }
44127 if (this._s === 0) {
44128 return "0";
44129 }
44130 if (base === 10) {
44131 var str = this._s < 0 ? "-" : "";
44132 str += this._d[this._d.length - 1].toString();
44133 for (var i = this._d.length - 2; i >= 0; i--) {
44134 var group = this._d[i].toString();
44135 while (group.length < BigInteger_base_log10) group = '0' + group;
44136 str += group;
44137 }
44138 return str;
44139 }
44140 else {
44141 var numerals = BigInteger.digits;
44142 base = BigInteger.small[base];
44143 var sign = this._s;
44144
44145 var n = this.abs();
44146 var digits = [];
44147 var digit;
44148
44149 while (n._s !== 0) {
44150 var divmod = n.divRem(base);
44151 n = divmod[0];
44152 digit = divmod[1];
44153 // TODO: This could be changed to unshift instead of reversing at the end.
44154 // Benchmark both to compare speeds.
44155 digits.push(numerals[digit.valueOf()]);
44156 }
44157 return (sign < 0 ? "-" : "") + digits.reverse().join("");
44158 }
44159};
44160
44161// Verify strings for parsing
44162BigInteger.radixRegex = [
44163 /^$/,
44164 /^$/,
44165 /^[01]*$/,
44166 /^[012]*$/,
44167 /^[0-3]*$/,
44168 /^[0-4]*$/,
44169 /^[0-5]*$/,
44170 /^[0-6]*$/,
44171 /^[0-7]*$/,
44172 /^[0-8]*$/,
44173 /^[0-9]*$/,
44174 /^[0-9aA]*$/,
44175 /^[0-9abAB]*$/,
44176 /^[0-9abcABC]*$/,
44177 /^[0-9a-dA-D]*$/,
44178 /^[0-9a-eA-E]*$/,
44179 /^[0-9a-fA-F]*$/,
44180 /^[0-9a-gA-G]*$/,
44181 /^[0-9a-hA-H]*$/,
44182 /^[0-9a-iA-I]*$/,
44183 /^[0-9a-jA-J]*$/,
44184 /^[0-9a-kA-K]*$/,
44185 /^[0-9a-lA-L]*$/,
44186 /^[0-9a-mA-M]*$/,
44187 /^[0-9a-nA-N]*$/,
44188 /^[0-9a-oA-O]*$/,
44189 /^[0-9a-pA-P]*$/,
44190 /^[0-9a-qA-Q]*$/,
44191 /^[0-9a-rA-R]*$/,
44192 /^[0-9a-sA-S]*$/,
44193 /^[0-9a-tA-T]*$/,
44194 /^[0-9a-uA-U]*$/,
44195 /^[0-9a-vA-V]*$/,
44196 /^[0-9a-wA-W]*$/,
44197 /^[0-9a-xA-X]*$/,
44198 /^[0-9a-yA-Y]*$/,
44199 /^[0-9a-zA-Z]*$/
44200];
44201
44202/*
44203 Function: parse
44204 Parse a string into a <BigInteger>.
44205
44206 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
44207 *base* is not provided, it will be guessed based on the leading characters
44208 of *s* as follows:
44209
44210 - "0x" or "0X": *base* = 16
44211 - "0c" or "0C": *base* = 8
44212 - "0b" or "0B": *base* = 2
44213 - else: *base* = 10
44214
44215 If no base is provided, or *base* is 10, the number can be in exponential
44216 form. For example, these are all valid:
44217
44218 > BigInteger.parse("1e9"); // Same as "1000000000"
44219 > BigInteger.parse("1.234*10^3"); // Same as 1234
44220 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
44221
44222 If any characters fall outside the range defined by the radix, an exception
44223 will be thrown.
44224
44225 Parameters:
44226
44227 s - The string to parse.
44228 base - Optional radix (default is to guess based on *s*).
44229
44230 Returns:
44231
44232 a <BigInteger> instance.
44233*/
44234BigInteger.parse = function(s, base) {
44235 // Expands a number in exponential form to decimal form.
44236 // expandExponential("-13.441*10^5") === "1344100";
44237 // expandExponential("1.12300e-1") === "0.112300";
44238 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
44239 function expandExponential(str) {
44240 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
44241
44242 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
44243 c = +c;
44244 var l = c < 0;
44245 var i = n.length + c;
44246 x = (l ? n : f).length;
44247 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
44248 var z = (new Array(c + 1)).join("0");
44249 var r = n + f;
44250 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
44251 });
44252 }
44253
44254 s = s.toString();
44255 if (typeof base === "undefined" || +base === 10) {
44256 s = expandExponential(s);
44257 }
44258
44259 var prefixRE;
44260 if (typeof base === "undefined") {
44261 prefixRE = '0[xcb]';
44262 }
44263 else if (base == 16) {
44264 prefixRE = '0x';
44265 }
44266 else if (base == 8) {
44267 prefixRE = '0c';
44268 }
44269 else if (base == 2) {
44270 prefixRE = '0b';
44271 }
44272 else {
44273 prefixRE = '';
44274 }
44275 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
44276 if (parts) {
44277 var sign = parts[1] || "+";
44278 var baseSection = parts[2] || "";
44279 var digits = parts[3] || "";
44280
44281 if (typeof base === "undefined") {
44282 // Guess base
44283 if (baseSection === "0x" || baseSection === "0X") { // Hex
44284 base = 16;
44285 }
44286 else if (baseSection === "0c" || baseSection === "0C") { // Octal
44287 base = 8;
44288 }
44289 else if (baseSection === "0b" || baseSection === "0B") { // Binary
44290 base = 2;
44291 }
44292 else {
44293 base = 10;
44294 }
44295 }
44296 else if (base < 2 || base > 36) {
44297 throw new Error("Illegal radix " + base + ".");
44298 }
44299
44300 base = +base;
44301
44302 // Check for digits outside the range
44303 if (!(BigInteger.radixRegex[base].test(digits))) {
44304 throw new Error("Bad digit for radix " + base);
44305 }
44306
44307 // Strip leading zeros, and convert to array
44308 digits = digits.replace(/^0+/, "").split("");
44309 if (digits.length === 0) {
44310 return ZERO;
44311 }
44312
44313 // Get the sign (we know it's not zero)
44314 sign = (sign === "-") ? -1 : 1;
44315
44316 // Optimize 10
44317 if (base == 10) {
44318 var d = [];
44319 while (digits.length >= BigInteger_base_log10) {
44320 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
44321 }
44322 d.push(parseInt(digits.join(''), 10));
44323 return new BigInteger(d, sign, CONSTRUCT);
44324 }
44325
44326 // Do the conversion
44327 var d = ZERO;
44328 base = BigInteger.small[base];
44329 var small = BigInteger.small;
44330 for (var i = 0; i < digits.length; i++) {
44331 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
44332 }
44333 return new BigInteger(d._d, sign, CONSTRUCT);
44334 }
44335 else {
44336 throw new Error("Invalid BigInteger format: " + s);
44337 }
44338};
44339
44340/*
44341 Function: add
44342 Add two <BigIntegers>.
44343
44344 Parameters:
44345
44346 n - The number to add to *this*. Will be converted to a <BigInteger>.
44347
44348 Returns:
44349
44350 The numbers added together.
44351
44352 See Also:
44353
44354 <subtract>, <multiply>, <quotient>, <next>
44355*/
44356BigInteger.prototype.add = function(n) {
44357 if (this._s === 0) {
44358 return BigInteger(n);
44359 }
44360
44361 n = BigInteger(n);
44362 if (n._s === 0) {
44363 return this;
44364 }
44365 if (this._s !== n._s) {
44366 n = n.negate();
44367 return this.subtract(n);
44368 }
44369
44370 var a = this._d;
44371 var b = n._d;
44372 var al = a.length;
44373 var bl = b.length;
44374 var sum = new Array(Math.max(al, bl) + 1);
44375 var size = Math.min(al, bl);
44376 var carry = 0;
44377 var digit;
44378
44379 for (var i = 0; i < size; i++) {
44380 digit = a[i] + b[i] + carry;
44381 sum[i] = digit % BigInteger_base;
44382 carry = (digit / BigInteger_base) | 0;
44383 }
44384 if (bl > al) {
44385 a = b;
44386 al = bl;
44387 }
44388 for (i = size; carry && i < al; i++) {
44389 digit = a[i] + carry;
44390 sum[i] = digit % BigInteger_base;
44391 carry = (digit / BigInteger_base) | 0;
44392 }
44393 if (carry) {
44394 sum[i] = carry;
44395 }
44396
44397 for ( ; i < al; i++) {
44398 sum[i] = a[i];
44399 }
44400
44401 return new BigInteger(sum, this._s, CONSTRUCT);
44402};
44403
44404/*
44405 Function: negate
44406 Get the additive inverse of a <BigInteger>.
44407
44408 Returns:
44409
44410 A <BigInteger> with the same magnatude, but with the opposite sign.
44411
44412 See Also:
44413
44414 <abs>
44415*/
44416BigInteger.prototype.negate = function() {
44417 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
44418};
44419
44420/*
44421 Function: abs
44422 Get the absolute value of a <BigInteger>.
44423
44424 Returns:
44425
44426 A <BigInteger> with the same magnatude, but always positive (or zero).
44427
44428 See Also:
44429
44430 <negate>
44431*/
44432BigInteger.prototype.abs = function() {
44433 return (this._s < 0) ? this.negate() : this;
44434};
44435
44436/*
44437 Function: subtract
44438 Subtract two <BigIntegers>.
44439
44440 Parameters:
44441
44442 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
44443
44444 Returns:
44445
44446 The *n* subtracted from *this*.
44447
44448 See Also:
44449
44450 <add>, <multiply>, <quotient>, <prev>
44451*/
44452BigInteger.prototype.subtract = function(n) {
44453 if (this._s === 0) {
44454 return BigInteger(n).negate();
44455 }
44456
44457 n = BigInteger(n);
44458 if (n._s === 0) {
44459 return this;
44460 }
44461 if (this._s !== n._s) {
44462 n = n.negate();
44463 return this.add(n);
44464 }
44465
44466 var m = this;
44467 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
44468 if (this._s < 0) {
44469 m = new BigInteger(n._d, 1, CONSTRUCT);
44470 n = new BigInteger(this._d, 1, CONSTRUCT);
44471 }
44472
44473 // Both are positive => a - b
44474 var sign = m.compareAbs(n);
44475 if (sign === 0) {
44476 return ZERO;
44477 }
44478 else if (sign < 0) {
44479 // swap m and n
44480 var t = n;
44481 n = m;
44482 m = t;
44483 }
44484
44485 // a > b
44486 var a = m._d;
44487 var b = n._d;
44488 var al = a.length;
44489 var bl = b.length;
44490 var diff = new Array(al); // al >= bl since a > b
44491 var borrow = 0;
44492 var i;
44493 var digit;
44494
44495 for (i = 0; i < bl; i++) {
44496 digit = a[i] - borrow - b[i];
44497 if (digit < 0) {
44498 digit += BigInteger_base;
44499 borrow = 1;
44500 }
44501 else {
44502 borrow = 0;
44503 }
44504 diff[i] = digit;
44505 }
44506 for (i = bl; i < al; i++) {
44507 digit = a[i] - borrow;
44508 if (digit < 0) {
44509 digit += BigInteger_base;
44510 }
44511 else {
44512 diff[i++] = digit;
44513 break;
44514 }
44515 diff[i] = digit;
44516 }
44517 for ( ; i < al; i++) {
44518 diff[i] = a[i];
44519 }
44520
44521 return new BigInteger(diff, sign, CONSTRUCT);
44522};
44523
44524(function() {
44525 function addOne(n, sign) {
44526 var a = n._d;
44527 var sum = a.slice();
44528 var carry = true;
44529 var i = 0;
44530
44531 while (true) {
44532 var digit = (a[i] || 0) + 1;
44533 sum[i] = digit % BigInteger_base;
44534 if (digit <= BigInteger_base - 1) {
44535 break;
44536 }
44537 ++i;
44538 }
44539
44540 return new BigInteger(sum, sign, CONSTRUCT);
44541 }
44542
44543 function subtractOne(n, sign) {
44544 var a = n._d;
44545 var sum = a.slice();
44546 var borrow = true;
44547 var i = 0;
44548
44549 while (true) {
44550 var digit = (a[i] || 0) - 1;
44551 if (digit < 0) {
44552 sum[i] = digit + BigInteger_base;
44553 }
44554 else {
44555 sum[i] = digit;
44556 break;
44557 }
44558 ++i;
44559 }
44560
44561 return new BigInteger(sum, sign, CONSTRUCT);
44562 }
44563
44564 /*
44565 Function: next
44566 Get the next <BigInteger> (add one).
44567
44568 Returns:
44569
44570 *this* + 1.
44571
44572 See Also:
44573
44574 <add>, <prev>
44575 */
44576 BigInteger.prototype.next = function() {
44577 switch (this._s) {
44578 case 0:
44579 return ONE;
44580 case -1:
44581 return subtractOne(this, -1);
44582 // case 1:
44583 default:
44584 return addOne(this, 1);
44585 }
44586 };
44587
44588 /*
44589 Function: prev
44590 Get the previous <BigInteger> (subtract one).
44591
44592 Returns:
44593
44594 *this* - 1.
44595
44596 See Also:
44597
44598 <next>, <subtract>
44599 */
44600 BigInteger.prototype.prev = function() {
44601 switch (this._s) {
44602 case 0:
44603 return M_ONE;
44604 case -1:
44605 return addOne(this, -1);
44606 // case 1:
44607 default:
44608 return subtractOne(this, 1);
44609 }
44610 };
44611})();
44612
44613/*
44614 Function: compareAbs
44615 Compare the absolute value of two <BigIntegers>.
44616
44617 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
44618
44619 Parameters:
44620
44621 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44622
44623 Returns:
44624
44625 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
44626
44627 See Also:
44628
44629 <compare>, <abs>
44630*/
44631BigInteger.prototype.compareAbs = function(n) {
44632 if (this === n) {
44633 return 0;
44634 }
44635
44636 if (!(n instanceof BigInteger)) {
44637 if (!isFinite(n)) {
44638 return(isNaN(n) ? n : -1);
44639 }
44640 n = BigInteger(n);
44641 }
44642
44643 if (this._s === 0) {
44644 return (n._s !== 0) ? -1 : 0;
44645 }
44646 if (n._s === 0) {
44647 return 1;
44648 }
44649
44650 var l = this._d.length;
44651 var nl = n._d.length;
44652 if (l < nl) {
44653 return -1;
44654 }
44655 else if (l > nl) {
44656 return 1;
44657 }
44658
44659 var a = this._d;
44660 var b = n._d;
44661 for (var i = l-1; i >= 0; i--) {
44662 if (a[i] !== b[i]) {
44663 return a[i] < b[i] ? -1 : 1;
44664 }
44665 }
44666
44667 return 0;
44668};
44669
44670/*
44671 Function: compare
44672 Compare two <BigIntegers>.
44673
44674 Parameters:
44675
44676 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44677
44678 Returns:
44679
44680 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
44681
44682 See Also:
44683
44684 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
44685*/
44686BigInteger.prototype.compare = function(n) {
44687 if (this === n) {
44688 return 0;
44689 }
44690
44691 n = BigInteger(n);
44692
44693 if (this._s === 0) {
44694 return -n._s;
44695 }
44696
44697 if (this._s === n._s) { // both positive or both negative
44698 var cmp = this.compareAbs(n);
44699 return cmp * this._s;
44700 }
44701 else {
44702 return this._s;
44703 }
44704};
44705
44706/*
44707 Function: isUnit
44708 Return true iff *this* is either 1 or -1.
44709
44710 Returns:
44711
44712 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
44713
44714 See Also:
44715
44716 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
44717 <BigInteger.ONE>, <BigInteger.M_ONE>
44718*/
44719BigInteger.prototype.isUnit = function() {
44720 return this === ONE ||
44721 this === M_ONE ||
44722 (this._d.length === 1 && this._d[0] === 1);
44723};
44724
44725/*
44726 Function: multiply
44727 Multiply two <BigIntegers>.
44728
44729 Parameters:
44730
44731 n - The number to multiply *this* by. Will be converted to a
44732 <BigInteger>.
44733
44734 Returns:
44735
44736 The numbers multiplied together.
44737
44738 See Also:
44739
44740 <add>, <subtract>, <quotient>, <square>
44741*/
44742BigInteger.prototype.multiply = function(n) {
44743 // TODO: Consider adding Karatsuba multiplication for large numbers
44744 if (this._s === 0) {
44745 return ZERO;
44746 }
44747
44748 n = BigInteger(n);
44749 if (n._s === 0) {
44750 return ZERO;
44751 }
44752 if (this.isUnit()) {
44753 if (this._s < 0) {
44754 return n.negate();
44755 }
44756 return n;
44757 }
44758 if (n.isUnit()) {
44759 if (n._s < 0) {
44760 return this.negate();
44761 }
44762 return this;
44763 }
44764 if (this === n) {
44765 return this.square();
44766 }
44767
44768 var r = (this._d.length >= n._d.length);
44769 var a = (r ? this : n)._d; // a will be longer than b
44770 var b = (r ? n : this)._d;
44771 var al = a.length;
44772 var bl = b.length;
44773
44774 var pl = al + bl;
44775 var partial = new Array(pl);
44776 var i;
44777 for (i = 0; i < pl; i++) {
44778 partial[i] = 0;
44779 }
44780
44781 for (i = 0; i < bl; i++) {
44782 var carry = 0;
44783 var bi = b[i];
44784 var jlimit = al + i;
44785 var digit;
44786 for (var j = i; j < jlimit; j++) {
44787 digit = partial[j] + bi * a[j - i] + carry;
44788 carry = (digit / BigInteger_base) | 0;
44789 partial[j] = (digit % BigInteger_base) | 0;
44790 }
44791 if (carry) {
44792 digit = partial[j] + carry;
44793 carry = (digit / BigInteger_base) | 0;
44794 partial[j] = digit % BigInteger_base;
44795 }
44796 }
44797 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
44798};
44799
44800// Multiply a BigInteger by a single-digit native number
44801// Assumes that this and n are >= 0
44802// This is not really intended to be used outside the library itself
44803BigInteger.prototype.multiplySingleDigit = function(n) {
44804 if (n === 0 || this._s === 0) {
44805 return ZERO;
44806 }
44807 if (n === 1) {
44808 return this;
44809 }
44810
44811 var digit;
44812 if (this._d.length === 1) {
44813 digit = this._d[0] * n;
44814 if (digit >= BigInteger_base) {
44815 return new BigInteger([(digit % BigInteger_base)|0,
44816 (digit / BigInteger_base)|0], 1, CONSTRUCT);
44817 }
44818 return new BigInteger([digit], 1, CONSTRUCT);
44819 }
44820
44821 if (n === 2) {
44822 return this.add(this);
44823 }
44824 if (this.isUnit()) {
44825 return new BigInteger([n], 1, CONSTRUCT);
44826 }
44827
44828 var a = this._d;
44829 var al = a.length;
44830
44831 var pl = al + 1;
44832 var partial = new Array(pl);
44833 for (var i = 0; i < pl; i++) {
44834 partial[i] = 0;
44835 }
44836
44837 var carry = 0;
44838 for (var j = 0; j < al; j++) {
44839 digit = n * a[j] + carry;
44840 carry = (digit / BigInteger_base) | 0;
44841 partial[j] = (digit % BigInteger_base) | 0;
44842 }
44843 if (carry) {
44844 partial[j] = carry;
44845 }
44846
44847 return new BigInteger(partial, 1, CONSTRUCT);
44848};
44849
44850/*
44851 Function: square
44852 Multiply a <BigInteger> by itself.
44853
44854 This is slightly faster than regular multiplication, since it removes the
44855 duplicated multiplcations.
44856
44857 Returns:
44858
44859 > this.multiply(this)
44860
44861 See Also:
44862 <multiply>
44863*/
44864BigInteger.prototype.square = function() {
44865 // Normally, squaring a 10-digit number would take 100 multiplications.
44866 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
44867 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
44868 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
44869
44870 if (this._s === 0) {
44871 return ZERO;
44872 }
44873 if (this.isUnit()) {
44874 return ONE;
44875 }
44876
44877 var digits = this._d;
44878 var length = digits.length;
44879 var imult1 = new Array(length + length + 1);
44880 var product, carry, k;
44881 var i;
44882
44883 // Calculate diagonal
44884 for (i = 0; i < length; i++) {
44885 k = i * 2;
44886 product = digits[i] * digits[i];
44887 carry = (product / BigInteger_base) | 0;
44888 imult1[k] = product % BigInteger_base;
44889 imult1[k + 1] = carry;
44890 }
44891
44892 // Calculate repeating part
44893 for (i = 0; i < length; i++) {
44894 carry = 0;
44895 k = i * 2 + 1;
44896 for (var j = i + 1; j < length; j++, k++) {
44897 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
44898 carry = (product / BigInteger_base) | 0;
44899 imult1[k] = product % BigInteger_base;
44900 }
44901 k = length + i;
44902 var digit = carry + imult1[k];
44903 carry = (digit / BigInteger_base) | 0;
44904 imult1[k] = digit % BigInteger_base;
44905 imult1[k + 1] += carry;
44906 }
44907
44908 return new BigInteger(imult1, 1, CONSTRUCT);
44909};
44910
44911/*
44912 Function: quotient
44913 Divide two <BigIntegers> and truncate towards zero.
44914
44915 <quotient> throws an exception if *n* is zero.
44916
44917 Parameters:
44918
44919 n - The number to divide *this* by. Will be converted to a <BigInteger>.
44920
44921 Returns:
44922
44923 The *this* / *n*, truncated to an integer.
44924
44925 See Also:
44926
44927 <add>, <subtract>, <multiply>, <divRem>, <remainder>
44928*/
44929BigInteger.prototype.quotient = function(n) {
44930 return this.divRem(n)[0];
44931};
44932
44933/*
44934 Function: divide
44935 Deprecated synonym for <quotient>.
44936*/
44937BigInteger.prototype.divide = BigInteger.prototype.quotient;
44938
44939/*
44940 Function: remainder
44941 Calculate the remainder of two <BigIntegers>.
44942
44943 <remainder> throws an exception if *n* is zero.
44944
44945 Parameters:
44946
44947 n - The remainder after *this* is divided *this* by *n*. Will be
44948 converted to a <BigInteger>.
44949
44950 Returns:
44951
44952 *this* % *n*.
44953
44954 See Also:
44955
44956 <divRem>, <quotient>
44957*/
44958BigInteger.prototype.remainder = function(n) {
44959 return this.divRem(n)[1];
44960};
44961
44962/*
44963 Function: divRem
44964 Calculate the integer quotient and remainder of two <BigIntegers>.
44965
44966 <divRem> throws an exception if *n* is zero.
44967
44968 Parameters:
44969
44970 n - The number to divide *this* by. Will be converted to a <BigInteger>.
44971
44972 Returns:
44973
44974 A two-element array containing the quotient and the remainder.
44975
44976 > a.divRem(b)
44977
44978 is exactly equivalent to
44979
44980 > [a.quotient(b), a.remainder(b)]
44981
44982 except it is faster, because they are calculated at the same time.
44983
44984 See Also:
44985
44986 <quotient>, <remainder>
44987*/
44988BigInteger.prototype.divRem = function(n) {
44989 n = BigInteger(n);
44990 if (n._s === 0) {
44991 throw new Error("Divide by zero");
44992 }
44993 if (this._s === 0) {
44994 return [ZERO, ZERO];
44995 }
44996 if (n._d.length === 1) {
44997 return this.divRemSmall(n._s * n._d[0]);
44998 }
44999
45000 // Test for easy cases -- |n1| <= |n2|
45001 switch (this.compareAbs(n)) {
45002 case 0: // n1 == n2
45003 return [this._s === n._s ? ONE : M_ONE, ZERO];
45004 case -1: // |n1| < |n2|
45005 return [ZERO, this];
45006 }
45007
45008 var sign = this._s * n._s;
45009 var a = n.abs();
45010 var b_digits = this._d;
45011 var b_index = b_digits.length;
45012 var digits = n._d.length;
45013 var quot = [];
45014 var guess;
45015
45016 var part = new BigInteger([], 0, CONSTRUCT);
45017
45018 while (b_index) {
45019 part._d.unshift(b_digits[--b_index]);
45020 part = new BigInteger(part._d, 1, CONSTRUCT);
45021
45022 if (part.compareAbs(n) < 0) {
45023 quot.push(0);
45024 continue;
45025 }
45026 if (part._s === 0) {
45027 guess = 0;
45028 }
45029 else {
45030 var xlen = part._d.length, ylen = a._d.length;
45031 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
45032 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
45033 if (part._d.length > a._d.length) {
45034 // The length of part._d can either match a._d length,
45035 // or exceed it by one.
45036 highx = (highx+1)*BigInteger_base;
45037 }
45038 guess = Math.ceil(highx/highy);
45039 }
45040 do {
45041 var check = a.multiplySingleDigit(guess);
45042 if (check.compareAbs(part) <= 0) {
45043 break;
45044 }
45045 guess--;
45046 } while (guess);
45047
45048 quot.push(guess);
45049 if (!guess) {
45050 continue;
45051 }
45052 var diff = part.subtract(check);
45053 part._d = diff._d.slice();
45054 }
45055
45056 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
45057 new BigInteger(part._d, this._s, CONSTRUCT)];
45058};
45059
45060// Throws an exception if n is outside of (-BigInteger.base, -1] or
45061// [1, BigInteger.base). It's not necessary to call this, since the
45062// other division functions will call it if they are able to.
45063BigInteger.prototype.divRemSmall = function(n) {
45064 var r;
45065 n = +n;
45066 if (n === 0) {
45067 throw new Error("Divide by zero");
45068 }
45069
45070 var n_s = n < 0 ? -1 : 1;
45071 var sign = this._s * n_s;
45072 n = Math.abs(n);
45073
45074 if (n < 1 || n >= BigInteger_base) {
45075 throw new Error("Argument out of range");
45076 }
45077
45078 if (this._s === 0) {
45079 return [ZERO, ZERO];
45080 }
45081
45082 if (n === 1 || n === -1) {
45083 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
45084 }
45085
45086 // 2 <= n < BigInteger_base
45087
45088 // divide a single digit by a single digit
45089 if (this._d.length === 1) {
45090 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
45091 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
45092 if (sign < 0) {
45093 q = q.negate();
45094 }
45095 if (this._s < 0) {
45096 r = r.negate();
45097 }
45098 return [q, r];
45099 }
45100
45101 var digits = this._d.slice();
45102 var quot = new Array(digits.length);
45103 var part = 0;
45104 var diff = 0;
45105 var i = 0;
45106 var guess;
45107
45108 while (digits.length) {
45109 part = part * BigInteger_base + digits[digits.length - 1];
45110 if (part < n) {
45111 quot[i++] = 0;
45112 digits.pop();
45113 diff = BigInteger_base * diff + part;
45114 continue;
45115 }
45116 if (part === 0) {
45117 guess = 0;
45118 }
45119 else {
45120 guess = (part / n) | 0;
45121 }
45122
45123 var check = n * guess;
45124 diff = part - check;
45125 quot[i++] = guess;
45126 if (!guess) {
45127 digits.pop();
45128 continue;
45129 }
45130
45131 digits.pop();
45132 part = diff;
45133 }
45134
45135 r = new BigInteger([diff], 1, CONSTRUCT);
45136 if (this._s < 0) {
45137 r = r.negate();
45138 }
45139 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
45140};
45141
45142/*
45143 Function: isEven
45144 Return true iff *this* is divisible by two.
45145
45146 Note that <BigInteger.ZERO> is even.
45147
45148 Returns:
45149
45150 true if *this* is even, false otherwise.
45151
45152 See Also:
45153
45154 <isOdd>
45155*/
45156BigInteger.prototype.isEven = function() {
45157 var digits = this._d;
45158 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
45159};
45160
45161/*
45162 Function: isOdd
45163 Return true iff *this* is not divisible by two.
45164
45165 Returns:
45166
45167 true if *this* is odd, false otherwise.
45168
45169 See Also:
45170
45171 <isEven>
45172*/
45173BigInteger.prototype.isOdd = function() {
45174 return !this.isEven();
45175};
45176
45177/*
45178 Function: sign
45179 Get the sign of a <BigInteger>.
45180
45181 Returns:
45182
45183 * -1 if *this* < 0
45184 * 0 if *this* == 0
45185 * +1 if *this* > 0
45186
45187 See Also:
45188
45189 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
45190*/
45191BigInteger.prototype.sign = function() {
45192 return this._s;
45193};
45194
45195/*
45196 Function: isPositive
45197 Return true iff *this* > 0.
45198
45199 Returns:
45200
45201 true if *this*.compare(<BigInteger.ZERO>) == 1.
45202
45203 See Also:
45204
45205 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
45206*/
45207BigInteger.prototype.isPositive = function() {
45208 return this._s > 0;
45209};
45210
45211/*
45212 Function: isNegative
45213 Return true iff *this* < 0.
45214
45215 Returns:
45216
45217 true if *this*.compare(<BigInteger.ZERO>) == -1.
45218
45219 See Also:
45220
45221 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
45222*/
45223BigInteger.prototype.isNegative = function() {
45224 return this._s < 0;
45225};
45226
45227/*
45228 Function: isZero
45229 Return true iff *this* == 0.
45230
45231 Returns:
45232
45233 true if *this*.compare(<BigInteger.ZERO>) == 0.
45234
45235 See Also:
45236
45237 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
45238*/
45239BigInteger.prototype.isZero = function() {
45240 return this._s === 0;
45241};
45242
45243/*
45244 Function: exp10
45245 Multiply a <BigInteger> by a power of 10.
45246
45247 This is equivalent to, but faster than
45248
45249 > if (n >= 0) {
45250 > return this.multiply(BigInteger("1e" + n));
45251 > }
45252 > else { // n <= 0
45253 > return this.quotient(BigInteger("1e" + -n));
45254 > }
45255
45256 Parameters:
45257
45258 n - The power of 10 to multiply *this* by. *n* is converted to a
45259 javascipt number and must be no greater than <BigInteger.MAX_EXP>
45260 (0x7FFFFFFF), or an exception will be thrown.
45261
45262 Returns:
45263
45264 *this* * (10 ** *n*), truncated to an integer if necessary.
45265
45266 See Also:
45267
45268 <pow>, <multiply>
45269*/
45270BigInteger.prototype.exp10 = function(n) {
45271 n = +n;
45272 if (n === 0) {
45273 return this;
45274 }
45275 if (Math.abs(n) > Number(MAX_EXP)) {
45276 throw new Error("exponent too large in BigInteger.exp10");
45277 }
45278 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
45279 if (this._s === 0) {
45280 return ZERO;
45281 }
45282 if (n > 0) {
45283 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45284
45285 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45286 k._d.unshift(0);
45287 }
45288 if (n == 0)
45289 return k;
45290 k._s = 1;
45291 k = k.multiplySingleDigit(Math.pow(10, n));
45292 return (this._s < 0 ? k.negate() : k);
45293 } else if (-n >= this._d.length*BigInteger_base_log10) {
45294 return ZERO;
45295 } else {
45296 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45297
45298 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45299 k._d.shift();
45300 }
45301 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
45302 }
45303};
45304
45305/*
45306 Function: pow
45307 Raise a <BigInteger> to a power.
45308
45309 In this implementation, 0**0 is 1.
45310
45311 Parameters:
45312
45313 n - The exponent to raise *this* by. *n* must be no greater than
45314 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
45315
45316 Returns:
45317
45318 *this* raised to the *nth* power.
45319
45320 See Also:
45321
45322 <modPow>
45323*/
45324BigInteger.prototype.pow = function(n) {
45325 if (this.isUnit()) {
45326 if (this._s > 0) {
45327 return this;
45328 }
45329 else {
45330 return BigInteger(n).isOdd() ? this : this.negate();
45331 }
45332 }
45333
45334 n = BigInteger(n);
45335 if (n._s === 0) {
45336 return ONE;
45337 }
45338 else if (n._s < 0) {
45339 if (this._s === 0) {
45340 throw new Error("Divide by zero");
45341 }
45342 else {
45343 return ZERO;
45344 }
45345 }
45346 if (this._s === 0) {
45347 return ZERO;
45348 }
45349 if (n.isUnit()) {
45350 return this;
45351 }
45352
45353 if (n.compareAbs(MAX_EXP) > 0) {
45354 throw new Error("exponent too large in BigInteger.pow");
45355 }
45356 var x = this;
45357 var aux = ONE;
45358 var two = BigInteger.small[2];
45359
45360 while (n.isPositive()) {
45361 if (n.isOdd()) {
45362 aux = aux.multiply(x);
45363 if (n.isUnit()) {
45364 return aux;
45365 }
45366 }
45367 x = x.square();
45368 n = n.quotient(two);
45369 }
45370
45371 return aux;
45372};
45373
45374/*
45375 Function: modPow
45376 Raise a <BigInteger> to a power (mod m).
45377
45378 Because it is reduced by a modulus, <modPow> is not limited by
45379 <BigInteger.MAX_EXP> like <pow>.
45380
45381 Parameters:
45382
45383 exponent - The exponent to raise *this* by. Must be positive.
45384 modulus - The modulus.
45385
45386 Returns:
45387
45388 *this* ^ *exponent* (mod *modulus*).
45389
45390 See Also:
45391
45392 <pow>, <mod>
45393*/
45394BigInteger.prototype.modPow = function(exponent, modulus) {
45395 var result = ONE;
45396 var base = this;
45397
45398 while (exponent.isPositive()) {
45399 if (exponent.isOdd()) {
45400 result = result.multiply(base).remainder(modulus);
45401 }
45402
45403 exponent = exponent.quotient(BigInteger.small[2]);
45404 if (exponent.isPositive()) {
45405 base = base.square().remainder(modulus);
45406 }
45407 }
45408
45409 return result;
45410};
45411
45412/*
45413 Function: log
45414 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
45415
45416 This is equivalent to
45417
45418 > Math.log(this.toJSValue())
45419
45420 but handles values outside of the native number range.
45421
45422 Returns:
45423
45424 log( *this* )
45425
45426 See Also:
45427
45428 <toJSValue>
45429*/
45430BigInteger.prototype.log = function() {
45431 switch (this._s) {
45432 case 0: return -Infinity;
45433 case -1: return NaN;
45434 default: // Fall through.
45435 }
45436
45437 var l = this._d.length;
45438
45439 if (l*BigInteger_base_log10 < 30) {
45440 return Math.log(this.valueOf());
45441 }
45442
45443 var N = Math.ceil(30/BigInteger_base_log10);
45444 var firstNdigits = this._d.slice(l - N);
45445 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
45446};
45447
45448/*
45449 Function: valueOf
45450 Convert a <BigInteger> to a native JavaScript integer.
45451
45452 This is called automatically by JavaScipt to convert a <BigInteger> to a
45453 native value.
45454
45455 Returns:
45456
45457 > parseInt(this.toString(), 10)
45458
45459 See Also:
45460
45461 <toString>, <toJSValue>
45462*/
45463BigInteger.prototype.valueOf = function() {
45464 return parseInt(this.toString(), 10);
45465};
45466
45467/*
45468 Function: toJSValue
45469 Convert a <BigInteger> to a native JavaScript integer.
45470
45471 This is the same as valueOf, but more explicitly named.
45472
45473 Returns:
45474
45475 > parseInt(this.toString(), 10)
45476
45477 See Also:
45478
45479 <toString>, <valueOf>
45480*/
45481BigInteger.prototype.toJSValue = function() {
45482 return parseInt(this.toString(), 10);
45483};
45484
45485var MAX_EXP = BigInteger(0x7FFFFFFF);
45486// Constant: MAX_EXP
45487// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
45488BigInteger.MAX_EXP = MAX_EXP;
45489
45490(function() {
45491 function makeUnary(fn) {
45492 return function(a) {
45493 return fn.call(BigInteger(a));
45494 };
45495 }
45496
45497 function makeBinary(fn) {
45498 return function(a, b) {
45499 return fn.call(BigInteger(a), BigInteger(b));
45500 };
45501 }
45502
45503 function makeTrinary(fn) {
45504 return function(a, b, c) {
45505 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
45506 };
45507 }
45508
45509 (function() {
45510 var i, fn;
45511 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
45512 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
45513 var trinary = ["modPow"];
45514
45515 for (i = 0; i < unary.length; i++) {
45516 fn = unary[i];
45517 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
45518 }
45519
45520 for (i = 0; i < binary.length; i++) {
45521 fn = binary[i];
45522 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
45523 }
45524
45525 for (i = 0; i < trinary.length; i++) {
45526 fn = trinary[i];
45527 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
45528 }
45529
45530 BigInteger.exp10 = function(x, n) {
45531 return BigInteger(x).exp10(n);
45532 };
45533 })();
45534})();
45535
45536exports.BigInteger = BigInteger;
45537})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
45538</script>
45539 <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){
45540var 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;
45541
45542},{}],2:[function(require,module,exports){
45543var 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;
45544
45545},{"./scoring":6}],3:[function(require,module,exports){
45546var 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(","),
45547english_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(","),
45548female_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(","),
45549us_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(","),
45550male_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;
45551
45552},{}],4:[function(require,module,exports){
45553var 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;
45554
45555},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
45556var 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;
45557
45558},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
45559var 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;
45560
45561},{"./adjacency_graphs":1}],7:[function(require,module,exports){
45562var 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;
45563
45564},{}]},{},[4])(4)
45565});
861750ae 45566
95f04905
IC
45567</script>
45568 <script>/*
45569 * Detects entropy from a string.
45570 *
45571 * Formats include:
45572 * binary [0-1]
45573 * base 6 [0-5]
45574 * dice 6 [1-6]
45575 * decimal [0-9]
45576 * hexadecimal [0-9A-F]
9e97eb76 45577 * card [A2-9TJQK][CDHS]
95f04905
IC
45578 *
45579 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
45580 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
45581 * entropy.
45582 */
45583
45584window.Entropy = new (function() {
45585
78b8d604
IC
45586 var TWO = new BigInteger(2);
45587
95f04905
IC
45588 // matchers returns an array of the matched events for each type of entropy.
45589 // eg
45590 // matchers.binary("010") returns ["0", "1", "0"]
45591 // matchers.binary("a10") returns ["1", "0"]
45592 // matchers.hex("a10") returns ["a", "1", "0"]
45593 var matchers = {
45594 binary: function(str) {
45595 return str.match(/[0-1]/gi) || [];
45596 },
45597 base6: function(str) {
45598 return str.match(/[0-5]/gi) || [];
45599 },
45600 dice: function(str) {
45601 return str.match(/[1-6]/gi) || []; // ie dice numbers
45602 },
45603 base10: function(str) {
45604 return str.match(/[0-9]/gi) || [];
45605 },
45606 hex: function(str) {
45607 return str.match(/[0-9A-F]/gi) || [];
45608 },
45609 card: function(str) {
45610 // Format is NumberSuit, eg
45611 // AH ace of hearts
45612 // 8C eight of clubs
45613 // TD ten of diamonds
45614 // JS jack of spades
45615 // QH queen of hearts
45616 // KC king of clubs
45617 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
45618 }
45619 }
45620
45621 // Convert array of cards from ["ac", "4d", "ks"]
45622 // to numbers between 0 and 51 [0, 16, 51]
45623 function convertCardsToInts(cards) {
45624 var ints = [];
45625 var values = "a23456789tjqk";
45626 var suits = "cdhs";
45627 for (var i=0; i<cards.length; i++) {
45628 var card = cards[i].toLowerCase();
45629 var value = card[0];
45630 var suit = card[1];
45631 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
45632 ints.push(asInt);
45633 }
45634 return ints;
45635 }
45636
45637 this.fromString = function(rawEntropyStr) {
45638 // Find type of entropy being used (binary, hex, dice etc)
45639 var base = getBase(rawEntropyStr);
45640 // Convert dice to base6 entropy (ie 1-6 to 0-5)
45641 // This is done by changing all 6s to 0s
45642 if (base.str == "dice") {
45643 var newParts = [];
45644 var newInts = [];
45645 for (var i=0; i<base.parts.length; i++) {
45646 var c = base.parts[i];
45647 if ("12345".indexOf(c) > -1) {
45648 newParts[i] = base.parts[i];
45649 newInts[i] = base.ints[i];
45650 }
45651 else {
45652 newParts[i] = "0";
45653 newInts[i] = 0;
45654 }
45655 }
45656 base.str = "base 6 (dice)";
45657 base.ints = newInts;
45658 base.parts = newParts;
45659 base.matcher = matchers.base6;
45660 }
45661 // Detect empty entropy
45662 if (base.parts.length == 0) {
45663 return {
45664 binaryStr: "",
45665 cleanStr: "",
45666 cleanHtml: "",
45667 base: base,
45668 };
45669 }
45670 // Convert base.ints to BigInteger.
45671 // Due to using unusual bases, eg cards of base52, this is not as simple as
45672 // using BigInteger.parse()
45673 var entropyInt = BigInteger.ZERO;
45674 for (var i=base.ints.length-1; i>=0; i--) {
45675 var thisInt = BigInteger.parse(base.ints[i]);
45676 var power = (base.ints.length - 1) - i;
45677 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
45678 entropyInt = entropyInt.add(additionalEntropy);
45679 }
45680 // Convert entropy to binary
45681 var entropyBin = entropyInt.toString(2);
45682 // If the first integer is small, it must be padded with zeros.
45683 // Otherwise the chance of the first bit being 1 is 100%, which is
45684 // obviously incorrect.
45685 // This is not perfect for non-2^n bases.
45686 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
45687 while (entropyBin.length < expectedBits) {
45688 entropyBin = "0" + entropyBin;
45689 }
94959756
IC
45690 // Calculate the number of bits per event
45691 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 45692 // Cards binary must be handled differently, since they're not replaced
9e97eb76 45693 if (base.asInt == 52) {
94959756
IC
45694 var cardEntropy = processCardEntropy(base.parts);
45695 entropyBin = cardEntropy.binaryStr;
45696 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 45697 }
95f04905
IC
45698 // Supply a 'filtered' entropy string for display purposes
45699 var entropyClean = base.parts.join("");
45700 var entropyHtml = base.parts.join("");
45701 if (base.asInt == 52) {
45702 entropyClean = base.parts.join(" ").toUpperCase();
45703 entropyClean = entropyClean.replace(/C/g, "\u2663");
45704 entropyClean = entropyClean.replace(/D/g, "\u2666");
45705 entropyClean = entropyClean.replace(/H/g, "\u2665");
45706 entropyClean = entropyClean.replace(/S/g, "\u2660");
45707 entropyHtml = base.parts.join(" ").toUpperCase();
45708 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
45709 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
45710 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
45711 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
45712 }
9e97eb76 45713 // Return the result
95f04905
IC
45714 var e = {
45715 binaryStr: entropyBin,
45716 cleanStr: entropyClean,
45717 cleanHtml: entropyHtml,
94959756 45718 bitsPerEvent: bitsPerEvent,
95f04905
IC
45719 base: base,
45720 }
45721 return e;
45722 }
45723
78b8d604
IC
45724 function getSortedDeck() {
45725 var s = [];
45726 var suits = "CDHS";
45727 var values = "A23456789TJQK";
45728 for (var i=0; i<suits.length; i++) {
45729 for (var j=0; j<values.length; j++) {
45730 s.push(values[j]+suits[i]);
45731 }
45732 }
45733 return s;
45734 }
45735
95f04905
IC
45736 function getBase(str) {
45737 // Need to get the lowest base for the supplied entropy.
45738 // This prevents interpreting, say, dice rolls as hexadecimal.
45739 var binaryMatches = matchers.binary(str);
45740 var hexMatches = matchers.hex(str);
45741 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
45742 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
45743 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
45744 return {
45745 ints: ints,
45746 parts: binaryMatches,
45747 matcher: matchers.binary,
45748 asInt: 2,
45749 str: "binary",
45750 }
45751 }
45752 var cardMatches = matchers.card(str);
45753 if (cardMatches.length >= hexMatches.length / 2) {
45754 var ints = convertCardsToInts(cardMatches);
45755 return {
45756 ints: ints,
45757 parts: cardMatches,
45758 matcher: matchers.card,
45759 asInt: 52,
45760 str: "card",
45761 }
45762 }
45763 var diceMatches = matchers.dice(str);
45764 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
45765 var ints = diceMatches.map(function(i) { return parseInt(i) });
45766 return {
45767 ints: ints,
45768 parts: diceMatches,
45769 matcher: matchers.dice,
45770 asInt: 6,
45771 str: "dice",
45772 }
45773 }
45774 var base6Matches = matchers.base6(str);
45775 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
45776 var ints = base6Matches.map(function(i) { return parseInt(i) });
45777 return {
45778 ints: ints,
45779 parts: base6Matches,
45780 matcher: matchers.base6,
45781 asInt: 6,
45782 str: "base 6",
45783 }
45784 }
45785 var base10Matches = matchers.base10(str);
45786 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
45787 var ints = base10Matches.map(function(i) { return parseInt(i) });
45788 return {
45789 ints: ints,
45790 parts: base10Matches,
45791 matcher: matchers.base10,
45792 asInt: 10,
45793 str: "base 10",
45794 }
45795 }
45796 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
45797 return {
45798 ints: ints,
45799 parts: hexMatches,
45800 matcher: matchers.hex,
45801 asInt: 16,
45802 str: "hexadecimal",
45803 }
45804 }
45805
ea87f1d3
IC
45806 // Assume cards are NOT replaced.
45807 // Additional entropy decreases as more cards are used. This means
45808 // total possible entropy is measured using n!, not base^n.
45809 // eg the second last card can be only one of two, not one of fifty two
45810 // so the added entropy for that card is only one bit at most
94959756 45811 function processCardEntropy(cards) {
ea87f1d3
IC
45812 // Track how many instances of each card have been used, and thus
45813 // how many decks are in use.
45814 var cardCounts = {};
45815 var numberOfDecks = 0;
45816 // Work out number of decks by max(duplicates)
45817 for (var i=0; i<cards.length; i++) {
45818 // Get the card that was drawn
45819 var cardLower = cards[i];
45820 var card = cardLower.toUpperCase();
45821 // Initialize the count for this card if needed
45822 if (!(card in cardCounts)) {
45823 cardCounts[card] = 0;
45824 }
45825 cardCounts[card] += 1;
45826 // See if this is max(duplicates)
45827 if (cardCounts[card] > numberOfDecks) {
45828 numberOfDecks = cardCounts[card];
45829 }
45830 }
45831 // Work out the total number of bits for this many decks
45832 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
45833 var gainedBits = 0;
45834 // Equivalent of Math.log2(factorial(52*numberOfDecks))
45835 // which becomes infinity for numberOfDecks > 4
45836 for (var i=1; i<=52*numberOfDecks; i++) {
45837 gainedBits = gainedBits + Math.log2(i);
45838 }
ea87f1d3
IC
45839 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
45840 var maxBits = gainedBits - lostBits;
45841 // Convert the drawn cards to a binary representation.
45842 // The exact technique for doing this is unclear.
45843 // See
45844 // http://crypto.stackexchange.com/a/41896
45845 // "I even doubt that this is well defined (only the average entropy
45846 // is, I believe)."
45847 // See
45848 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
45849 // "The binary representation can be the first log(permutations,2) bits
45850 // of the sha-2 hash of the normalized deck string."
45851 //
45852 // In this specific implementation, the first N bits of the hash of the
45853 // normalized cards string is being used. Uppercase, no spaces; eg
45854 // sha256("AH8DQSTC2H")
45855 var totalCards = numberOfDecks * 52;
45856 var percentUsed = cards.length / totalCards;
45857 // Calculate the average number of bits of entropy for the number of
45858 // cards drawn.
45859 var numberOfBits = Math.floor(maxBits * percentUsed);
45860 // Create a normalized string of the selected cards
45861 var normalizedCards = cards.join("").toUpperCase();
45862 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 45863 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
45864 // are used until the required number of bits is reached.
45865 var entropyBin = "";
45866 var iterations = 0;
45867 while (entropyBin.length < numberOfBits) {
434caecd 45868 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
45869 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
45870 for (var i=0; i<hashHex.length; i++) {
45871 var decimal = parseInt(hashHex[i], 16);
45872 var binary = decimal.toString(2);
45873 while (binary.length < 4) {
45874 binary = "0" + binary;
45875 }
45876 entropyBin = entropyBin + binary;
45877 }
45878 iterations = iterations + 1;
45879 }
45880 // Truncate to the appropriate number of bits.
45881 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
45882 // Get the number of bits per event
45883 bitsPerEvent = maxBits / totalCards;
45884 return {
45885 binaryStr: entropyBin,
45886 bitsPerEvent: bitsPerEvent,
45887 }
ea87f1d3
IC
45888 }
45889
95f04905
IC
45890 // Polyfill for Math.log2
45891 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
45892 Math.log2 = Math.log2 || function(x) {
45893 // The polyfill isn't good enough because of the poor accuracy of
45894 // Math.LOG2E
45895 // log2(8) gave 2.9999999999999996 which when floored causes issues.
45896 // So instead use the BigInteger library to get it right.
45897 return BigInteger.log(x) / BigInteger.log(2);
45898 };
45899
9e97eb76
IC
45900 // Depends on BigInteger
45901 function factorial(n) {
45902 if (n == 0) {
45903 return 1;
45904 }
45905 f = BigInteger.ONE;
45906 for (var i=1; i<=n; i++) {
45907 f = f.multiply(new BigInteger(i));
45908 }
45909 return f;
45910 }
45911
95f04905 45912})();
c6624d51
IC
45913</script>
45914 <script>(function() {
45915
45916 // mnemonics is populated as required by getLanguage
45917 var mnemonics = { "english": new Mnemonic("english") };
45918 var mnemonic = mnemonics["english"];
3725abb5 45919 var seed = null;
c6624d51
IC
45920 var bip32RootKey = null;
45921 var bip32ExtendedKey = null;
9987f0c1 45922 var network = bitcoinjs.bitcoin.networks.bitcoin;
c6624d51
IC
45923 var addressRowTemplate = $("#address-row-template");
45924
45925 var showIndex = true;
45926 var showAddress = true;
45927 var showPubKey = true;
45928 var showPrivKey = true;
52da415f 45929 var showQr = false;
8d18f379 45930 var litecoinUseLtub = false;
c6624d51
IC
45931
45932 var entropyChangeTimeoutEvent = null;
45933 var phraseChangeTimeoutEvent = null;
45934 var rootKeyChangedTimeoutEvent = null;
45935
40892aba
IC
45936 var generationProcesses = [];
45937
c6624d51
IC
45938 var DOM = {};
45939 DOM.network = $(".network");
56530adc 45940 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
45941 DOM.phraseNetwork = $("#network-phrase");
45942 DOM.useEntropy = $(".use-entropy");
45943 DOM.entropyContainer = $(".entropy-container");
45944 DOM.entropy = $(".entropy");
2a6dd137
IC
45945 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
45946 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 45947 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
45948 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
45949 DOM.entropyBits = DOM.entropyContainer.find(".bits");
45950 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
45951 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
45952 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
45953 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
9ff30bab 45954 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
c6624d51
IC
45955 DOM.phrase = $(".phrase");
45956 DOM.passphrase = $(".passphrase");
45957 DOM.generateContainer = $(".generate-container");
45958 DOM.generate = $(".generate");
45959 DOM.seed = $(".seed");
45960 DOM.rootKey = $(".root-key");
8d18f379
IC
45961 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
45962 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
c6624d51
IC
45963 DOM.extendedPrivKey = $(".extended-priv-key");
45964 DOM.extendedPubKey = $(".extended-pub-key");
45965 DOM.bip32tab = $("#bip32-tab");
45966 DOM.bip44tab = $("#bip44-tab");
9987f0c1 45967 DOM.bip49tab = $("#bip49-tab");
c6624d51
IC
45968 DOM.bip32panel = $("#bip32");
45969 DOM.bip44panel = $("#bip44");
9987f0c1 45970 DOM.bip49panel = $("#bip49");
c6624d51
IC
45971 DOM.bip32path = $("#bip32-path");
45972 DOM.bip44path = $("#bip44-path");
45973 DOM.bip44purpose = $("#bip44 .purpose");
45974 DOM.bip44coin = $("#bip44 .coin");
45975 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
45976 DOM.bip44accountXprv = $("#bip44 .account-xprv");
45977 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 45978 DOM.bip44change = $("#bip44 .change");
9987f0c1
IC
45979 DOM.bip49unavailable = $("#bip49 .unavailable");
45980 DOM.bip49available = $("#bip49 .available");
45981 DOM.bip49path = $("#bip49-path");
45982 DOM.bip49purpose = $("#bip49 .purpose");
45983 DOM.bip49coin = $("#bip49 .coin");
45984 DOM.bip49account = $("#bip49 .account");
45985 DOM.bip49accountXprv = $("#bip49 .account-xprv");
45986 DOM.bip49accountXpub = $("#bip49 .account-xpub");
45987 DOM.bip49change = $("#bip49 .change");
18abe53b 45988 DOM.generatedStrength = $(".generate-container .strength");
c6624d51 45989 DOM.hardenedAddresses = $(".hardened-addresses");
0a8d06d0 45990 DOM.useP2wpkhNestedInP2sh = $(".p2wpkh-nested-in-p2sh");
c6624d51
IC
45991 DOM.addresses = $(".addresses");
45992 DOM.rowsToAdd = $(".rows-to-add");
45993 DOM.more = $(".more");
45994 DOM.feedback = $(".feedback");
45995 DOM.tab = $(".derivation-type a");
45996 DOM.indexToggle = $(".index-toggle");
45997 DOM.addressToggle = $(".address-toggle");
45998 DOM.publicKeyToggle = $(".public-key-toggle");
45999 DOM.privateKeyToggle = $(".private-key-toggle");
46000 DOM.languages = $(".languages a");
e00964cc 46001 DOM.qrContainer = $(".qr-container");
52da415f 46002 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
46003 DOM.qrImage = DOM.qrContainer.find(".qr-image");
46004 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
46005 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
46006
46007 function init() {
46008 // Events
46009 DOM.network.on("change", networkChanged);
56530adc 46010 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
46011 DOM.useEntropy.on("change", setEntropyVisibility);
46012 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 46013 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
46014 DOM.phrase.on("input", delayedPhraseChanged);
46015 DOM.passphrase.on("input", delayedPhraseChanged);
46016 DOM.generate.on("click", generateClicked);
46017 DOM.more.on("click", showMore);
46018 DOM.rootKey.on("input", delayedRootKeyChanged);
8d18f379 46019 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
c6624d51 46020 DOM.bip32path.on("input", calcForDerivationPath);
c6624d51
IC
46021 DOM.bip44account.on("input", calcForDerivationPath);
46022 DOM.bip44change.on("input", calcForDerivationPath);
9987f0c1
IC
46023 DOM.bip49account.on("input", calcForDerivationPath);
46024 DOM.bip49change.on("input", calcForDerivationPath);
c6624d51
IC
46025 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
46026 DOM.hardenedAddresses.on("change", calcForDerivationPath);
0a8d06d0 46027 DOM.useP2wpkhNestedInP2sh.on("change", calcForDerivationPath);
c6624d51
IC
46028 DOM.indexToggle.on("click", toggleIndexes);
46029 DOM.addressToggle.on("click", toggleAddresses);
46030 DOM.publicKeyToggle.on("click", togglePublicKeys);
46031 DOM.privateKeyToggle.on("click", togglePrivateKeys);
46032 DOM.languages.on("click", languageChanged);
e00964cc 46033 setQrEvents(DOM.showQrEls);
c6624d51
IC
46034 disableForms();
46035 hidePending();
46036 hideValidationError();
46037 populateNetworkSelect();
56530adc 46038 populateClientSelect();
c6624d51
IC
46039 }
46040
46041 // Event handlers
46042
46043 function networkChanged(e) {
9987f0c1
IC
46044 clearDerivedKeys();
46045 clearAddressesList();
8d18f379 46046 DOM.litecoinLtubContainer.addClass("hidden");
c6624d51 46047 var networkIndex = e.target.value;
9987f0c1
IC
46048 var network = networks[networkIndex];
46049 network.onSelect();
0a8d06d0
IC
46050 if (network.p2wpkhNestedInP2shAvailable) {
46051 showP2wpkhNestedInP2shAvailable();
9987f0c1
IC
46052 }
46053 else {
0a8d06d0 46054 showP2wpkhNestedInP2shUnavailable();
9987f0c1 46055 }
c6624d51
IC
46056 if (seed != null) {
46057 phraseChanged();
46058 }
46059 else {
46060 rootKeyChanged();
46061 }
46062 }
46063
56530adc
IC
46064 function bip32ClientChanged(e) {
46065 var clientIndex = DOM.bip32Client.val();
46066 if (clientIndex == "custom") {
46067 DOM.bip32path.prop("readonly", false);
46068 }
46069 else {
46070 DOM.bip32path.prop("readonly", true);
46071 clients[clientIndex].onSelect();
46072 if (seed != null) {
46073 phraseChanged();
46074 }
46075 else {
46076 rootKeyChanged();
46077 }
46078 }
46079 }
46080
c6624d51
IC
46081 function setEntropyVisibility() {
46082 if (isUsingOwnEntropy()) {
46083 DOM.entropyContainer.removeClass("hidden");
46084 DOM.generateContainer.addClass("hidden");
46085 DOM.phrase.prop("readonly", true);
46086 DOM.entropy.focus();
46087 entropyChanged();
46088 }
46089 else {
46090 DOM.entropyContainer.addClass("hidden");
46091 DOM.generateContainer.removeClass("hidden");
46092 DOM.phrase.prop("readonly", false);
18abe53b 46093 hidePending();
c6624d51
IC
46094 }
46095 }
46096
46097 function delayedPhraseChanged() {
46098 hideValidationError();
f128bd58
IC
46099 seed = null;
46100 bip32RootKey = null;
46101 bip32ExtendedKey = null;
46102 clearAddressesList();
c6624d51
IC
46103 showPending();
46104 if (phraseChangeTimeoutEvent != null) {
46105 clearTimeout(phraseChangeTimeoutEvent);
46106 }
46107 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
46108 }
46109
46110 function phraseChanged() {
46111 showPending();
c6624d51
IC
46112 setMnemonicLanguage();
46113 // Get the mnemonic phrase
46114 var phrase = DOM.phrase.val();
46115 var errorText = findPhraseErrors(phrase);
46116 if (errorText) {
46117 showValidationError(errorText);
46118 return;
46119 }
46120 // Calculate and display
46121 var passphrase = DOM.passphrase.val();
46122 calcBip32RootKeyFromSeed(phrase, passphrase);
46123 calcForDerivationPath();
c6624d51
IC
46124 }
46125
46126 function delayedEntropyChanged() {
46127 hideValidationError();
46128 showPending();
46129 if (entropyChangeTimeoutEvent != null) {
46130 clearTimeout(entropyChangeTimeoutEvent);
46131 }
46132 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
46133 }
46134
46135 function entropyChanged() {
18abe53b
IC
46136 // If blank entropy, clear mnemonic, addresses, errors
46137 if (DOM.entropy.val().trim().length == 0) {
46138 clearDisplay();
2a6dd137 46139 clearEntropyFeedback();
18abe53b
IC
46140 DOM.phrase.val("");
46141 showValidationError("Blank entropy");
46142 return;
46143 }
46144 // Get the current phrase to detect changes
46145 var phrase = DOM.phrase.val();
46146 // Set the phrase from the entropy
c6624d51 46147 setMnemonicFromEntropy();
18abe53b
IC
46148 // Recalc addresses if the phrase has changed
46149 var newPhrase = DOM.phrase.val();
46150 if (newPhrase != phrase) {
46151 if (newPhrase.length == 0) {
46152 clearDisplay();
46153 }
46154 else {
46155 phraseChanged();
46156 }
46157 }
46158 else {
46159 hidePending();
46160 }
c6624d51
IC
46161 }
46162
46163 function delayedRootKeyChanged() {
46164 // Warn if there is an existing mnemonic or passphrase.
46165 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
46166 if (!confirm("This will clear existing mnemonic and passphrase")) {
46167 DOM.rootKey.val(bip32RootKey);
46168 return
46169 }
46170 }
46171 hideValidationError();
46172 showPending();
46173 // Clear existing mnemonic and passphrase
46174 DOM.phrase.val("");
46175 DOM.passphrase.val("");
46176 seed = null;
46177 if (rootKeyChangedTimeoutEvent != null) {
46178 clearTimeout(rootKeyChangedTimeoutEvent);
46179 }
46180 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
46181 }
46182
46183 function rootKeyChanged() {
46184 showPending();
46185 hideValidationError();
c6624d51
IC
46186 var rootKeyBase58 = DOM.rootKey.val();
46187 var errorText = validateRootKey(rootKeyBase58);
46188 if (errorText) {
46189 showValidationError(errorText);
46190 return;
46191 }
46192 // Calculate and display
46193 calcBip32RootKeyFromBase58(rootKeyBase58);
46194 calcForDerivationPath();
c6624d51
IC
46195 }
46196
8d18f379
IC
46197 function litecoinUseLtubChanged() {
46198 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
46199 if (litecoinUseLtub) {
46200 network = bitcoinjs.bitcoin.networks.litecoinLtub;
46201 }
46202 else {
46203 network = bitcoinjs.bitcoin.networks.litecoin;
46204 }
46205 phraseChanged();
46206 }
46207
c6624d51 46208 function calcForDerivationPath() {
9987f0c1 46209 clearDerivedKeys();
ba3cb9ec 46210 clearAddressesList();
f128bd58 46211 showPending();
9987f0c1
IC
46212 // Don't show bip49 if it's selected but network doesn't support it
46213 if (bip49TabSelected() && !networkHasBip49()) {
46214 return;
46215 }
c6624d51
IC
46216 // Get the derivation path
46217 var derivationPath = getDerivationPath();
46218 var errorText = findDerivationPathErrors(derivationPath);
46219 if (errorText) {
46220 showValidationError(errorText);
46221 return;
46222 }
20083ab9
IC
46223 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
46224 if (bip44TabSelected()) {
46225 displayBip44Info();
46226 }
9987f0c1
IC
46227 if (bip49TabSelected()) {
46228 displayBip49Info();
46229 }
c6624d51 46230 displayBip32Info();
c6624d51
IC
46231 }
46232
46233 function generateClicked() {
46234 if (isUsingOwnEntropy()) {
46235 return;
46236 }
46237 clearDisplay();
46238 showPending();
46239 setTimeout(function() {
46240 setMnemonicLanguage();
46241 var phrase = generateRandomPhrase();
46242 if (!phrase) {
46243 return;
46244 }
46245 phraseChanged();
46246 }, 50);
46247 }
46248
46249 function languageChanged() {
46250 setTimeout(function() {
46251 setMnemonicLanguage();
46252 if (DOM.phrase.val().length > 0) {
46253 var newPhrase = convertPhraseToNewLanguage();
46254 DOM.phrase.val(newPhrase);
46255 phraseChanged();
46256 }
46257 else {
46258 DOM.generate.trigger("click");
46259 }
46260 }, 50);
46261 }
46262
46263 function toggleIndexes() {
46264 showIndex = !showIndex;
46265 $("td.index span").toggleClass("invisible");
46266 }
46267
46268 function toggleAddresses() {
46269 showAddress = !showAddress;
46270 $("td.address span").toggleClass("invisible");
46271 }
46272
46273 function togglePublicKeys() {
46274 showPubKey = !showPubKey;
46275 $("td.pubkey span").toggleClass("invisible");
46276 }
46277
46278 function togglePrivateKeys() {
46279 showPrivKey = !showPrivKey;
46280 $("td.privkey span").toggleClass("invisible");
46281 }
46282
46283 // Private methods
46284
46285 function generateRandomPhrase() {
46286 if (!hasStrongRandom()) {
46287 var errorText = "This browser does not support strong randomness";
46288 showValidationError(errorText);
46289 return;
46290 }
18abe53b 46291 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
46292 var strength = numWords / 3 * 32;
46293 var words = mnemonic.generate(strength);
46294 DOM.phrase.val(words);
46295 return words;
46296 }
46297
46298 function calcBip32RootKeyFromSeed(phrase, passphrase) {
46299 seed = mnemonic.toSeed(phrase, passphrase);
9987f0c1 46300 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
c6624d51
IC
46301 }
46302
46303 function calcBip32RootKeyFromBase58(rootKeyBase58) {
9987f0c1 46304 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
c6624d51
IC
46305 }
46306
46307 function calcBip32ExtendedKey(path) {
0a1f0259
IC
46308 // Check there's a root key to derive from
46309 if (!bip32RootKey) {
46310 return bip32RootKey;
46311 }
20083ab9 46312 var extendedKey = bip32RootKey;
c6624d51
IC
46313 // Derive the key from the path
46314 var pathBits = path.split("/");
ebd8d4e8
IC
46315 for (var i=0; i<pathBits.length; i++) {
46316 var bit = pathBits[i];
46317 var index = parseInt(bit);
46318 if (isNaN(index)) {
46319 continue;
46320 }
46321 var hardened = bit[bit.length-1] == "'";
9987f0c1 46322 var isPriv = !(extendedKey.isNeutered());
ba3cb9ec
IC
46323 var invalidDerivationPath = hardened && !isPriv;
46324 if (invalidDerivationPath) {
46325 extendedKey = null;
46326 }
46327 else if (hardened) {
20083ab9 46328 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
46329 }
46330 else {
20083ab9 46331 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
46332 }
46333 }
20083ab9 46334 return extendedKey
ebd8d4e8
IC
46335 }
46336
46337 function showValidationError(errorText) {
46338 DOM.feedback
46339 .text(errorText)
46340 .show();
46341 }
46342
46343 function hideValidationError() {
46344 DOM.feedback
46345 .text("")
46346 .hide();
46347 }
46348
46349 function findPhraseErrors(phrase) {
ebd8d4e8 46350 // Preprocess the words
783981de 46351 phrase = mnemonic.normalizeString(phrase);
0515eeec 46352 var words = phraseToWordArray(phrase);
18abe53b
IC
46353 // Detect blank phrase
46354 if (words.length == 0) {
46355 return "Blank mnemonic";
46356 }
563e401a 46357 // Check each word
0515eeec
IC
46358 for (var i=0; i<words.length; i++) {
46359 var word = words[i];
46360 var language = getLanguage();
46361 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
46362 console.log("Finding closest match to " + word);
46363 var nearestWord = findNearestWord(word);
46364 return word + " not in wordlist, did you mean " + nearestWord + "?";
46365 }
46366 }
ebd8d4e8 46367 // Check the words are valid
0515eeec 46368 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
46369 var isValid = mnemonic.check(properPhrase);
46370 if (!isValid) {
46371 return "Invalid mnemonic";
46372 }
46373 return false;
46374 }
46375
efe41586
IC
46376 function validateRootKey(rootKeyBase58) {
46377 try {
0a8d06d0 46378 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
46379 }
46380 catch (e) {
46381 return "Invalid root key";
46382 }
46383 return "";
46384 }
46385
38523d36 46386 function getDerivationPath() {
20083ab9 46387 if (bip44TabSelected()) {
38523d36
IC
46388 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46389 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46390 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46391 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
46392 var path = "m/";
46393 path += purpose + "'/";
46394 path += coin + "'/";
46395 path += account + "'/";
46396 path += change;
46397 DOM.bip44path.val(path);
46398 var derivationPath = DOM.bip44path.val();
46399 console.log("Using derivation path from BIP44 tab: " + derivationPath);
46400 return derivationPath;
46401 }
9987f0c1
IC
46402 if (bip49TabSelected()) {
46403 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46404 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46405 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46406 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
46407 var path = "m/";
46408 path += purpose + "'/";
46409 path += coin + "'/";
46410 path += account + "'/";
46411 path += change;
46412 DOM.bip49path.val(path);
46413 var derivationPath = DOM.bip49path.val();
46414 console.log("Using derivation path from BIP49 tab: " + derivationPath);
46415 return derivationPath;
46416 }
20083ab9 46417 else if (bip32TabSelected()) {
38523d36
IC
46418 var derivationPath = DOM.bip32path.val();
46419 console.log("Using derivation path from BIP32 tab: " + derivationPath);
46420 return derivationPath;
46421 }
46422 else {
46423 console.log("Unknown derivation path");
46424 }
46425 }
46426
ebd8d4e8 46427 function findDerivationPathErrors(path) {
30c9e79d
IC
46428 // TODO is not perfect but is better than nothing
46429 // Inspired by
46430 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
46431 // and
46432 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
46433 var maxDepth = 255; // TODO verify this!!
46434 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
46435 if (path[0] != "m") {
46436 return "First character must be 'm'";
46437 }
46438 if (path.length > 1) {
46439 if (path[1] != "/") {
46440 return "Separator must be '/'";
46441 }
46442 var indexes = path.split("/");
46443 if (indexes.length > maxDepth) {
46444 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
46445 }
46446 for (var depth = 1; depth<indexes.length; depth++) {
46447 var index = indexes[depth];
46448 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
46449 if (invalidChars.length > 0) {
46450 return "Invalid characters " + invalidChars + " found at depth " + depth;
46451 }
46452 var indexValue = parseInt(index.replace("'", ""));
46453 if (isNaN(depth)) {
46454 return "Invalid number at depth " + depth;
46455 }
46456 if (indexValue > maxIndexValue) {
46457 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
46458 }
46459 }
46460 }
0a1f0259
IC
46461 // Check root key exists or else derivation path is useless!
46462 if (!bip32RootKey) {
46463 return "No root key";
46464 }
ba3cb9ec 46465 // Check no hardened derivation path when using xpub keys
8d18f379
IC
46466 var hardenedPath = path.indexOf("'") > -1;
46467 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
46468 var hardened = hardenedPath || hardenedAddresses;
9987f0c1 46469 var isXpubkey = bip32RootKey.isNeutered();
ba3cb9ec
IC
46470 if (hardened && isXpubkey) {
46471 return "Hardened derivation path is invalid with xpub key";
46472 }
ebd8d4e8
IC
46473 return false;
46474 }
46475
20083ab9
IC
46476 function displayBip44Info() {
46477 // Get the derivation path for the account
46478 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46479 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46480 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46481 var path = "m/";
46482 path += purpose + "'/";
46483 path += coin + "'/";
46484 path += account + "'/";
46485 // Calculate the account extended keys
46486 var accountExtendedKey = calcBip32ExtendedKey(path);
46487 var accountXprv = accountExtendedKey.toBase58();
9987f0c1 46488 var accountXpub = accountExtendedKey.neutered().toBase58();
20083ab9
IC
46489 // Display the extended keys
46490 DOM.bip44accountXprv.val(accountXprv);
46491 DOM.bip44accountXpub.val(accountXpub);
46492 }
46493
9987f0c1
IC
46494 function displayBip49Info() {
46495 // Get the derivation path for the account
46496 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46497 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46498 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46499 var path = "m/";
46500 path += purpose + "'/";
46501 path += coin + "'/";
46502 path += account + "'/";
46503 // Calculate the account extended keys
46504 var accountExtendedKey = calcBip32ExtendedKey(path);
46505 var accountXprv = accountExtendedKey.toBase58();
46506 var accountXpub = accountExtendedKey.neutered().toBase58();
46507 // Display the extended keys
46508 DOM.bip49accountXprv.val(accountXprv);
46509 DOM.bip49accountXpub.val(accountXpub);
46510 }
46511
ebd8d4e8
IC
46512 function displayBip32Info() {
46513 // Display the key
73161a92 46514 DOM.seed.val(seed);
ebd8d4e8
IC
46515 var rootKey = bip32RootKey.toBase58();
46516 DOM.rootKey.val(rootKey);
ba3cb9ec 46517 var xprvkeyB58 = "NA";
9987f0c1 46518 if (!bip32ExtendedKey.isNeutered()) {
ba3cb9ec
IC
46519 xprvkeyB58 = bip32ExtendedKey.toBase58();
46520 }
46521 var extendedPrivKey = xprvkeyB58;
ebd8d4e8 46522 DOM.extendedPrivKey.val(extendedPrivKey);
9987f0c1 46523 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
ebd8d4e8
IC
46524 DOM.extendedPubKey.val(extendedPubKey);
46525 // Display the addresses and privkeys
46526 clearAddressesList();
46527 displayAddresses(0, 20);
46528 }
46529
46530 function displayAddresses(start, total) {
40892aba
IC
46531 generationProcesses.push(new (function() {
46532
46533 var rows = [];
46534
46535 this.stop = function() {
46536 for (var i=0; i<rows.length; i++) {
46537 rows[i].shouldGenerate = false;
46538 }
f128bd58 46539 hidePending();
40892aba
IC
46540 }
46541
46542 for (var i=0; i<total; i++) {
46543 var index = i + start;
f128bd58
IC
46544 var isLast = i == total - 1;
46545 rows.push(new TableRow(index, isLast));
40892aba
IC
46546 }
46547
46548 })());
80c4dd2a
IC
46549 }
46550
f128bd58 46551 function TableRow(index, isLast) {
80c4dd2a 46552
40892aba
IC
46553 var self = this;
46554 this.shouldGenerate = true;
1975bfbc 46555 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
0a8d06d0
IC
46556 var isP2wpkhNestedInP2sh = bip49TabSelected() || (bip32TabSelected() && useP2wpkhNestedInP2sh());
46557 var p2wpkhNestedInP2shAvailable = networkHasBip49();
1975bfbc 46558
80c4dd2a
IC
46559 function init() {
46560 calculateValues();
46561 }
46562
46563 function calculateValues() {
46564 setTimeout(function() {
40892aba
IC
46565 if (!self.shouldGenerate) {
46566 return;
46567 }
9987f0c1 46568 var key = "NA";
1975bfbc
IC
46569 if (useHardenedAddresses) {
46570 key = bip32ExtendedKey.deriveHardened(index);
46571 }
46572 else {
46573 key = bip32ExtendedKey.derive(index);
46574 }
80c4dd2a 46575 var address = key.getAddress().toString();
ba3cb9ec 46576 var privkey = "NA";
9987f0c1
IC
46577 if (!key.isNeutered()) {
46578 privkey = key.keyPair.toWIF(network);
ba3cb9ec 46579 }
9987f0c1 46580 var pubkey = key.getPublicKeyBuffer().toString('hex');
38523d36 46581 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
46582 if (useHardenedAddresses) {
46583 indexText = indexText + "'";
46584 }
8b095871 46585 // Ethereum values are different
534481b6 46586 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
9987f0c1 46587 var privKeyBuffer = key.keyPair.d.toBuffer();
8b095871
IC
46588 privkey = privKeyBuffer.toString('hex');
46589 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
46590 var hexAddress = addressBuffer.toString('hex');
46591 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
46592 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
46593 privkey = ethUtil.addHexPrefix(privkey);
46594 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 46595 }
8a1f452d 46596 // Ripple values are different
534481b6 46597 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 46598 privkey = convertRipplePriv(privkey);
46599 address = convertRippleAdrr(address);
46600 }
9987f0c1 46601 // BIP49 addresses are different
0a8d06d0
IC
46602 if (isP2wpkhNestedInP2sh) {
46603 if (!p2wpkhNestedInP2shAvailable) {
9987f0c1
IC
46604 return;
46605 }
46606 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
46607 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
46608 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
46609 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
46610 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
46611 }
1b12b2f5 46612 addAddressToList(indexText, address, pubkey, privkey);
f128bd58
IC
46613 if (isLast) {
46614 hidePending();
46615 }
80c4dd2a 46616 }, 50)
ebd8d4e8 46617 }
80c4dd2a
IC
46618
46619 init();
46620
ebd8d4e8
IC
46621 }
46622
46623 function showMore() {
46624 var start = DOM.addresses.children().length;
46625 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
46626 if (isNaN(rowsToAdd)) {
46627 rowsToAdd = 20;
46628 DOM.rowsToAdd.val("20");
46629 }
46630 if (rowsToAdd > 200) {
46631 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
46632 msg += "Do you want to continue?";
46633 if (!confirm(msg)) {
46634 return;
46635 }
46636 }
ebd8d4e8 46637 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
46638 }
46639
46640 function clearDisplay() {
46641 clearAddressesList();
9987f0c1 46642 clearKeys();
ebd8d4e8
IC
46643 hideValidationError();
46644 }
46645
46646 function clearAddressesList() {
46647 DOM.addresses.empty();
40892aba
IC
46648 stopGenerating();
46649 }
46650
46651 function stopGenerating() {
46652 while (generationProcesses.length > 0) {
46653 var generation = generationProcesses.shift();
46654 generation.stop();
46655 }
ebd8d4e8
IC
46656 }
46657
9987f0c1
IC
46658 function clearKeys() {
46659 clearRootKey();
46660 clearDerivedKeys();
46661 }
46662
46663 function clearRootKey() {
ebd8d4e8 46664 DOM.rootKey.val("");
9987f0c1
IC
46665 }
46666
46667 function clearDerivedKeys() {
ebd8d4e8
IC
46668 DOM.extendedPrivKey.val("");
46669 DOM.extendedPubKey.val("");
9987f0c1
IC
46670 DOM.bip44accountXprv.val("");
46671 DOM.bip44accountXpub.val("");
ebd8d4e8
IC
46672 }
46673
1b12b2f5 46674 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 46675 var row = $(addressRowTemplate.html());
80c4dd2a
IC
46676 // Elements
46677 var indexCell = row.find(".index span");
46678 var addressCell = row.find(".address span");
1b12b2f5 46679 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
46680 var privkeyCell = row.find(".privkey span");
46681 // Content
ae30fed8 46682 indexCell.text(indexText);
80c4dd2a 46683 addressCell.text(address);
1b12b2f5 46684 pubkeyCell.text(pubkey);
80c4dd2a
IC
46685 privkeyCell.text(privkey);
46686 // Visibility
46687 if (!showIndex) {
46688 indexCell.addClass("invisible");
46689 }
46690 if (!showAddress) {
46691 addressCell.addClass("invisible");
46692 }
1b12b2f5
IC
46693 if (!showPubKey) {
46694 pubkeyCell.addClass("invisible");
46695 }
80c4dd2a 46696 if (!showPrivKey) {
6d628db7 46697 privkeyCell.addClass("invisible");
80c4dd2a 46698 }
ebd8d4e8 46699 DOM.addresses.append(row);
e00964cc
IC
46700 var rowShowQrEls = row.find("[data-show-qr]");
46701 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
46702 }
46703
46704 function hasStrongRandom() {
46705 return 'crypto' in window && window['crypto'] !== null;
46706 }
46707
46708 function disableForms() {
46709 $("form").on("submit", function(e) {
46710 e.preventDefault();
46711 });
46712 }
46713
ebd8d4e8
IC
46714 function parseIntNoNaN(val, defaultVal) {
46715 var v = parseInt(val);
46716 if (isNaN(v)) {
46717 return defaultVal;
46718 }
46719 return v;
46720 }
46721
46722 function showPending() {
46723 DOM.feedback
46724 .text("Calculating...")
46725 .show();
46726 }
46727
563e401a 46728 function findNearestWord(word) {
0515eeec
IC
46729 var language = getLanguage();
46730 var words = WORDLISTS[language];
563e401a
IC
46731 var minDistance = 99;
46732 var closestWord = words[0];
46733 for (var i=0; i<words.length; i++) {
46734 var comparedTo = words[i];
6ea15134
IC
46735 if (comparedTo.indexOf(word) == 0) {
46736 return comparedTo;
46737 }
563e401a
IC
46738 var distance = Levenshtein.get(word, comparedTo);
46739 if (distance < minDistance) {
46740 closestWord = comparedTo;
46741 minDistance = distance;
46742 }
46743 }
46744 return closestWord;
46745 }
46746
ebd8d4e8
IC
46747 function hidePending() {
46748 DOM.feedback
46749 .text("")
46750 .hide();
46751 }
46752
ab78acc6
IC
46753 function populateNetworkSelect() {
46754 for (var i=0; i<networks.length; i++) {
46755 var network = networks[i];
46756 var option = $("<option>");
46757 option.attr("value", i);
46758 option.text(network.name);
b3cc3930
IC
46759 if (network.name == "BTC - Bitcoin") {
46760 option.prop("selected", true);
46761 }
ab78acc6
IC
46762 DOM.phraseNetwork.append(option);
46763 }
46764 }
46765
56530adc
IC
46766 function populateClientSelect() {
46767 for (var i=0; i<clients.length; i++) {
46768 var client = clients[i];
46769 var option = $("<option>");
46770 option.attr("value", i);
46771 option.text(client.name);
46772 DOM.bip32Client.append(option);
46773 }
46774 }
46775
0515eeec
IC
46776 function getLanguage() {
46777 var defaultLanguage = "english";
46778 // Try to get from existing phrase
46779 var language = getLanguageFromPhrase();
46780 // Try to get from url if not from phrase
46781 if (language.length == 0) {
46782 language = getLanguageFromUrl();
46783 }
46784 // Default to English if no other option
46785 if (language.length == 0) {
46786 language = defaultLanguage;
46787 }
46788 return language;
46789 }
46790
46791 function getLanguageFromPhrase(phrase) {
46792 // Check if how many words from existing phrase match a language.
46793 var language = "";
46794 if (!phrase) {
46795 phrase = DOM.phrase.val();
46796 }
46797 if (phrase.length > 0) {
46798 var words = phraseToWordArray(phrase);
46799 var languageMatches = {};
46800 for (l in WORDLISTS) {
46801 // Track how many words match in this language
46802 languageMatches[l] = 0;
46803 for (var i=0; i<words.length; i++) {
46804 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
46805 if (wordInLanguage) {
46806 languageMatches[l]++;
46807 }
46808 }
46809 // Find languages with most word matches.
46810 // This is made difficult due to commonalities between Chinese
46811 // simplified vs traditional.
46812 var mostMatches = 0;
46813 var mostMatchedLanguages = [];
46814 for (var l in languageMatches) {
46815 var numMatches = languageMatches[l];
46816 if (numMatches > mostMatches) {
46817 mostMatches = numMatches;
46818 mostMatchedLanguages = [l];
46819 }
46820 else if (numMatches == mostMatches) {
46821 mostMatchedLanguages.push(l);
46822 }
46823 }
46824 }
46825 if (mostMatchedLanguages.length > 0) {
46826 // Use first language and warn if multiple detected
46827 language = mostMatchedLanguages[0];
46828 if (mostMatchedLanguages.length > 1) {
46829 console.warn("Multiple possible languages");
46830 console.warn(mostMatchedLanguages);
46831 }
46832 }
46833 }
46834 return language;
46835 }
46836
46837 function getLanguageFromUrl() {
c6624d51
IC
46838 for (var language in WORDLISTS) {
46839 if (window.location.hash.indexOf(language) > -1) {
46840 return language;
46841 }
46842 }
46843 return "";
0515eeec
IC
46844 }
46845
46846 function setMnemonicLanguage() {
46847 var language = getLanguage();
46848 // Load the bip39 mnemonic generator for this language if required
46849 if (!(language in mnemonics)) {
46850 mnemonics[language] = new Mnemonic(language);
46851 }
46852 mnemonic = mnemonics[language];
46853 }
46854
46855 function convertPhraseToNewLanguage() {
46856 var oldLanguage = getLanguageFromPhrase();
46857 var newLanguage = getLanguageFromUrl();
46858 var oldPhrase = DOM.phrase.val();
46859 var oldWords = phraseToWordArray(oldPhrase);
46860 var newWords = [];
46861 for (var i=0; i<oldWords.length; i++) {
46862 var oldWord = oldWords[i];
46863 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
46864 var newWord = WORDLISTS[newLanguage][index];
46865 newWords.push(newWord);
46866 }
46867 newPhrase = wordArrayToPhrase(newWords);
46868 return newPhrase;
46869 }
46870
46871 // TODO look at jsbip39 - mnemonic.splitWords
46872 function phraseToWordArray(phrase) {
46873 var words = phrase.split(/\s/g);
46874 var noBlanks = [];
46875 for (var i=0; i<words.length; i++) {
46876 var word = words[i];
46877 if (word.length > 0) {
46878 noBlanks.push(word);
46879 }
46880 }
46881 return noBlanks;
46882 }
46883
46884 // TODO look at jsbip39 - mnemonic.joinWords
46885 function wordArrayToPhrase(words) {
46886 var phrase = words.join(" ");
46887 var language = getLanguageFromPhrase(phrase);
46888 if (language == "japanese") {
46889 phrase = words.join("\u3000");
46890 }
46891 return phrase;
46892 }
46893
c6624d51
IC
46894 function isUsingOwnEntropy() {
46895 return DOM.useEntropy.prop("checked");
46896 }
46897
46898 function setMnemonicFromEntropy() {
2a6dd137 46899 clearEntropyFeedback();
18abe53b 46900 // Get entropy value
c6624d51 46901 var entropyStr = DOM.entropy.val();
18abe53b 46902 // Work out minimum base for entropy
c6624d51 46903 var entropy = Entropy.fromString(entropyStr);
18abe53b 46904 if (entropy.binaryStr.length == 0) {
c6624d51
IC
46905 return;
46906 }
46907 // Show entropy details
18abe53b
IC
46908 showEntropyFeedback(entropy);
46909 // Use entropy hash if not using raw entropy
46910 var bits = entropy.binaryStr;
46911 var mnemonicLength = DOM.entropyMnemonicLength.val();
46912 if (mnemonicLength != "raw") {
46913 // Get bits by hashing entropy with SHA256
46914 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
46915 var hex = sjcl.codec.hex.fromBits(hash);
46916 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 46917 while (bits.length % 256 != 0) {
18abe53b
IC
46918 bits = "0" + bits;
46919 }
46920 // Truncate hash to suit number of words
46921 mnemonicLength = parseInt(mnemonicLength);
46922 var numberOfBits = 32 * mnemonicLength / 3;
46923 bits = bits.substring(0, numberOfBits);
c6624d51 46924 }
c6624d51 46925 // Discard trailing entropy
18abe53b 46926 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
46927 var start = bits.length - bitsToUse;
46928 var binaryStr = bits.substring(start);
c6624d51
IC
46929 // Convert entropy string to numeric array
46930 var entropyArr = [];
18abe53b
IC
46931 for (var i=0; i<binaryStr.length / 8; i++) {
46932 var byteAsBits = binaryStr.substring(i*8, i*8+8);
46933 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
46934 entropyArr.push(entropyByte)
46935 }
46936 // Convert entropy array to mnemonic
46937 var phrase = mnemonic.toMnemonic(entropyArr);
46938 // Set the mnemonic in the UI
46939 DOM.phrase.val(phrase);
46940 }
46941
2a6dd137 46942 function clearEntropyFeedback() {
f1e5d484 46943 DOM.entropyCrackTime.text("...");
18abe53b 46944 DOM.entropyType.text("");
2a6dd137
IC
46945 DOM.entropyWordCount.text("0");
46946 DOM.entropyEventCount.text("0");
46947 DOM.entropyBitsPerEvent.text("0");
46948 DOM.entropyBits.text("0");
46949 DOM.entropyFiltered.html("&nbsp;");
46950 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
46951 }
46952
18abe53b 46953 function showEntropyFeedback(entropy) {
9e97eb76 46954 var numberOfBits = entropy.binaryStr.length;
f1e5d484 46955 var timeToCrack = "unknown";
95f04905
IC
46956 try {
46957 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
46958 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
46959 if (z.feedback.warning != "") {
46960 timeToCrack = timeToCrack + " - " + z.feedback.warning;
46961 };
18abe53b 46962 }
95f04905 46963 catch (e) {
95f04905
IC
46964 console.log("Error detecting entropy strength with zxcvbn:");
46965 console.log(e);
46966 }
95f04905 46967 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 46968 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 46969 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 46970 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 46971 DOM.entropyType.text(entropyTypeStr);
f1e5d484 46972 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 46973 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 46974 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
46975 DOM.entropyWordCount.text(wordCount);
46976 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 46977 DOM.entropyBitsPerEvent.text(bitsPerEvent);
9ff30bab
IC
46978 // detect and warn of filtering
46979 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
46980 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
46981 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
46982 if (isFiltered) {
46983 DOM.entropyFilterWarning.removeClass('hidden');
46984 }
46985 else {
46986 DOM.entropyFilterWarning.addClass('hidden');
46987 }
95f04905
IC
46988 }
46989
46990 function getEntropyTypeStr(entropy) {
46991 var typeStr = entropy.base.str;
46992 // Add some detail if these are cards
46993 if (entropy.base.asInt == 52) {
46994 var cardDetail = []; // array of message strings
46995 // Detect duplicates
46996 var dupes = [];
46997 var dupeTracker = {};
46998 for (var i=0; i<entropy.base.parts.length; i++) {
46999 var card = entropy.base.parts[i];
9e97eb76
IC
47000 var cardUpper = card.toUpperCase();
47001 if (cardUpper in dupeTracker) {
95f04905
IC
47002 dupes.push(card);
47003 }
9e97eb76 47004 dupeTracker[cardUpper] = true;
95f04905
IC
47005 }
47006 if (dupes.length > 0) {
47007 var dupeWord = "duplicates";
47008 if (dupes.length == 1) {
47009 dupeWord = "duplicate";
47010 }
47011 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
47012 if (dupes.length > 3) {
47013 msg += "...";
47014 }
47015 cardDetail.push(msg);
47016 }
47017 // Detect full deck
47018 var uniqueCards = [];
47019 for (var uniqueCard in dupeTracker) {
47020 uniqueCards.push(uniqueCard);
47021 }
47022 if (uniqueCards.length == 52) {
47023 cardDetail.unshift("full deck");
47024 }
9e97eb76
IC
47025 // Detect missing cards
47026 var values = "A23456789TJQK";
47027 var suits = "CDHS";
47028 var missingCards = [];
47029 for (var i=0; i<suits.length; i++) {
47030 for (var j=0; j<values.length; j++) {
47031 var card = values[j] + suits[i];
47032 if (!(card in dupeTracker)) {
47033 missingCards.push(card);
47034 }
47035 }
47036 }
47037 // Display missing cards if six or less, ie clearly going for full deck
47038 if (missingCards.length > 0 && missingCards.length <= 6) {
47039 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
47040 if (missingCards.length > 3) {
47041 msg += "...";
47042 }
47043 cardDetail.push(msg);
47044 }
95f04905
IC
47045 // Add card details to typeStr
47046 if (cardDetail.length > 0) {
47047 typeStr += " (" + cardDetail.join(", ") + ")";
47048 }
47049 }
47050 return typeStr;
47051 }
47052
e00964cc
IC
47053 function setQrEvents(els) {
47054 els.on("mouseenter", createQr);
47055 els.on("mouseleave", destroyQr);
47056 els.on("click", toggleQr);
47057 }
47058
47059 function createQr(e) {
47060 var content = e.target.textContent || e.target.value;
47061 if (content) {
47062 var size = 130;
47063 DOM.qrImage.qrcode({width: size, height: size, text: content});
47064 if (!showQr) {
52da415f
IC
47065 DOM.qrHider.addClass("hidden");
47066 }
47067 else {
47068 DOM.qrHider.removeClass("hidden");
e00964cc
IC
47069 }
47070 DOM.qrContainer.removeClass("hidden");
47071 }
47072 }
47073
47074 function destroyQr() {
47075 DOM.qrImage.text("");
47076 DOM.qrContainer.addClass("hidden");
47077 }
47078
47079 function toggleQr() {
47080 showQr = !showQr;
52da415f 47081 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
47082 DOM.qrHint.toggleClass("hidden");
47083 }
47084
20083ab9
IC
47085 function bip44TabSelected() {
47086 return DOM.bip44tab.hasClass("active");
47087 }
47088
47089 function bip32TabSelected() {
47090 return DOM.bip32tab.hasClass("active");
47091 }
47092
0a8d06d0
IC
47093 function useP2wpkhNestedInP2sh() {
47094 return DOM.useP2wpkhNestedInP2sh.prop("checked");
47095 }
47096
9987f0c1 47097 function networkHasBip49() {
0a8d06d0 47098 return networks[DOM.network.val()].p2wpkhNestedInP2shAvailable;
9987f0c1
IC
47099 }
47100
47101 function bip49TabSelected() {
47102 return DOM.bip49tab.hasClass("active");
47103 }
47104
47105 function setHdCoin(coinValue) {
47106 DOM.bip44coin.val(coinValue);
47107 DOM.bip49coin.val(coinValue);
47108 }
47109
0a8d06d0 47110 function showP2wpkhNestedInP2shAvailable() {
9987f0c1
IC
47111 DOM.bip49unavailable.addClass("hidden");
47112 DOM.bip49available.removeClass("hidden");
0a8d06d0 47113 DOM.useP2wpkhNestedInP2sh.prop("disabled", false);
9987f0c1
IC
47114 }
47115
0a8d06d0 47116 function showP2wpkhNestedInP2shUnavailable() {
9987f0c1
IC
47117 DOM.bip49available.addClass("hidden");
47118 DOM.bip49unavailable.removeClass("hidden");
0a8d06d0
IC
47119 DOM.useP2wpkhNestedInP2sh.prop("disabled", true);
47120 DOM.useP2wpkhNestedInP2sh.prop("checked", false);
9987f0c1
IC
47121 }
47122
ab78acc6 47123 var networks = [
b3cc3930
IC
47124 {
47125 name: "BCH - Bitcoin Cash",
0a8d06d0 47126 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47127 onSelect: function() {
47128 network = bitcoinjs.bitcoin.networks.bitcoin;
47129 setHdCoin(145);
47130 },
47131 },
ab78acc6 47132 {
534481b6 47133 name: "BTC - Bitcoin",
0a8d06d0 47134 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47135 onSelect: function() {
9987f0c1
IC
47136 network = bitcoinjs.bitcoin.networks.bitcoin;
47137 setHdCoin(0);
ab78acc6
IC
47138 },
47139 },
47140 {
534481b6 47141 name: "BTC - Bitcoin Testnet",
0a8d06d0 47142 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47143 onSelect: function() {
9987f0c1
IC
47144 network = bitcoinjs.bitcoin.networks.testnet;
47145 setHdCoin(1);
ab78acc6
IC
47146 },
47147 },
47148 {
534481b6 47149 name: "CLAM - Clams",
0a8d06d0 47150 p2wpkhNestedInP2shAvailable: false,
ab78acc6 47151 onSelect: function() {
9987f0c1
IC
47152 network = bitcoinjs.bitcoin.networks.clam;
47153 setHdCoin(23);
ab78acc6
IC
47154 },
47155 },
0921f370 47156 {
47157 name: "CRW - Crown",
0a8d06d0 47158 p2wpkhNestedInP2shAvailable: false,
0921f370 47159 onSelect: function() {
9987f0c1
IC
47160 network = bitcoinjs.bitcoin.networks.crown;
47161 setHdCoin(72);
0921f370 47162 },
47163 },
ab78acc6 47164 {
534481b6 47165 name: "DASH - Dash",
0a8d06d0 47166 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47167 onSelect: function() {
9987f0c1
IC
47168 network = bitcoinjs.bitcoin.networks.dash;
47169 setHdCoin(5);
d5dc92fd
IC
47170 },
47171 },
c0386f3b 47172 {
534481b6 47173 name: "DASH - Dash Testnet",
0a8d06d0 47174 p2wpkhNestedInP2shAvailable: false,
c0386f3b 47175 onSelect: function() {
9987f0c1
IC
47176 network = bitcoinjs.bitcoin.networks.dashtn;
47177 setHdCoin(1);
c0386f3b
KR
47178 },
47179 },
d5dc92fd 47180 {
534481b6 47181 name: "DOGE - Dogecoin",
0a8d06d0 47182 p2wpkhNestedInP2shAvailable: false,
534481b6 47183 onSelect: function() {
9987f0c1
IC
47184 network = bitcoinjs.bitcoin.networks.dogecoin;
47185 setHdCoin(3);
534481b6 47186 },
47187 },
47188 {
47189 name: "ETH - Ethereum",
0a8d06d0 47190 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47191 onSelect: function() {
9987f0c1
IC
47192 network = bitcoinjs.bitcoin.networks.bitcoin;
47193 setHdCoin(60);
d5dc92fd
IC
47194 },
47195 },
1102f201
IC
47196 {
47197 name: "FJC - Fujicoin",
47198 p2wpkhNestedInP2shAvailable: false,
47199 onSelect: function() {
47200 network = bitcoinjs.bitcoin.networks.fujicoin;
47201 setHdCoin(75);
47202 },
47203 },
f88fab20 47204 {
534481b6 47205 name: "GAME - GameCredits",
0a8d06d0 47206 p2wpkhNestedInP2shAvailable: false,
f88fab20 47207 onSelect: function() {
9987f0c1
IC
47208 network = bitcoinjs.bitcoin.networks.game;
47209 setHdCoin(101);
f88fab20 47210 },
47211 },
a3baa26e 47212 {
534481b6 47213 name: "JBS - Jumbucks",
0a8d06d0 47214 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47215 onSelect: function() {
9987f0c1
IC
47216 network = bitcoinjs.bitcoin.networks.jumbucks;
47217 setHdCoin(26);
a3baa26e
IC
47218 },
47219 },
47220 {
534481b6 47221 name: "LTC - Litecoin",
0a8d06d0 47222 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47223 onSelect: function() {
9987f0c1
IC
47224 network = bitcoinjs.bitcoin.networks.litecoin;
47225 setHdCoin(2);
8d18f379 47226 DOM.litecoinLtubContainer.removeClass("hidden");
a3baa26e
IC
47227 },
47228 },
56ad9601
JS
47229 {
47230 name: "MAZA - Maza",
0a8d06d0 47231 p2wpkhNestedInP2shAvailable: false,
56ad9601
JS
47232 onSelect: function() {
47233 network = bitcoinjs.bitcoin.networks.maza;
47234 setHdCoin(13);
47235 },
47236 },
47237
a3baa26e 47238 {
534481b6 47239 name: "NMC - Namecoin",
0a8d06d0 47240 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47241 onSelect: function() {
9987f0c1
IC
47242 network = bitcoinjs.bitcoin.networks.namecoin;
47243 setHdCoin(7);
a3baa26e
IC
47244 },
47245 },
f128bd58
IC
47246 {
47247 name: "PIVX - PIVX",
0a8d06d0 47248 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47249 onSelect: function() {
47250 network = bitcoinjs.bitcoin.networks.pivx;
47251 setHdCoin(119);
47252 },
47253 },
47254 {
47255 name: "PIVX - PIVX Testnet",
0a8d06d0 47256 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47257 onSelect: function() {
47258 network = bitcoinjs.bitcoin.networks.pivxtestnet;
47259 setHdCoin(1);
47260 },
47261 },
5c434a8a 47262 {
534481b6 47263 name: "PPC - Peercoin",
0a8d06d0 47264 p2wpkhNestedInP2shAvailable: false,
5c434a8a 47265 onSelect: function() {
9987f0c1
IC
47266 network = bitcoinjs.bitcoin.networks.peercoin;
47267 setHdCoin(6);
5c434a8a
CM
47268 },
47269 },
8a1f452d 47270 {
534481b6 47271 name: "SDC - ShadowCash",
0a8d06d0 47272 p2wpkhNestedInP2shAvailable: false,
5493efc3 47273 onSelect: function() {
9987f0c1
IC
47274 network = bitcoinjs.bitcoin.networks.shadow;
47275 setHdCoin(35);
5493efc3 47276 },
47277 },
07ac4350 47278 {
534481b6 47279 name: "SDC - ShadowCash Testnet",
0a8d06d0 47280 p2wpkhNestedInP2shAvailable: false,
07ac4350 47281 onSelect: function() {
9987f0c1
IC
47282 network = bitcoinjs.bitcoin.networks.shadowtn;
47283 setHdCoin(1);
07ac4350 47284 },
47285 },
01e81e53 47286 {
534481b6 47287 name: "SLM - Slimcoin",
0a8d06d0 47288 p2wpkhNestedInP2shAvailable: false,
01e81e53 47289 onSelect: function() {
9987f0c1
IC
47290 network = bitcoinjs.bitcoin.networks.slimcoin;
47291 setHdCoin(63);
01e81e53
GH
47292 },
47293 },
47294 {
534481b6 47295 name: "SLM - Slimcoin Testnet",
0a8d06d0 47296 p2wpkhNestedInP2shAvailable: false,
01e81e53 47297 onSelect: function() {
9987f0c1
IC
47298 network = bitcoinjs.bitcoin.networks.slimcointn;
47299 setHdCoin(111);
01e81e53
GH
47300 },
47301 },
07ac4350 47302 {
534481b6 47303 name: "VIA - Viacoin",
0a8d06d0 47304 p2wpkhNestedInP2shAvailable: false,
07ac4350 47305 onSelect: function() {
9987f0c1
IC
47306 network = bitcoinjs.bitcoin.networks.viacoin;
47307 setHdCoin(14);
07ac4350 47308 },
47309 },
8b095871 47310 {
534481b6 47311 name: "VIA - Viacoin Testnet",
0a8d06d0 47312 p2wpkhNestedInP2shAvailable: false,
8b095871 47313 onSelect: function() {
9987f0c1
IC
47314 network = bitcoinjs.bitcoin.networks.viacointestnet;
47315 setHdCoin(1);
8b095871
IC
47316 },
47317 },
b3cc3930
IC
47318 {
47319 name: "XMY - Myriadcoin",
0a8d06d0 47320 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47321 onSelect: function() {
47322 network = bitcoinjs.bitcoin.networks.myriadcoin;
47323 setHdCoin(90);
47324 },
47325 },
534481b6 47326 {
47327 name: "XRP - Ripple",
0a8d06d0 47328 p2wpkhNestedInP2shAvailable: false,
534481b6 47329 onSelect: function() {
9987f0c1
IC
47330 network = bitcoinjs.bitcoin.networks.bitcoin;
47331 setHdCoin(144);
534481b6 47332 },
47333 }
ab78acc6
IC
47334 ]
47335
56530adc
IC
47336 var clients = [
47337 {
47338 name: "Bitcoin Core",
47339 onSelect: function() {
47340 DOM.bip32path.val("m/0'/0'");
47341 DOM.hardenedAddresses.prop('checked', true);
47342 },
47343 },
47344 {
47345 name: "blockchain.info",
47346 onSelect: function() {
47347 DOM.bip32path.val("m/44'/0'/0'");
47348 DOM.hardenedAddresses.prop('checked', false);
47349 },
47350 },
47351 {
47352 name: "MultiBit HD",
47353 onSelect: function() {
47354 DOM.bip32path.val("m/0'/0");
47355 DOM.hardenedAddresses.prop('checked', false);
47356 },
47357 }
47358 ]
47359
ebd8d4e8
IC
47360 init();
47361
47362})();
dc55c6b0 47363</script>
ebd8d4e8
IC
47364 </body>
47365</html>