]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Add virtual keyboard
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <style>/* keyboard - jQuery UI Widget */
12 .ui-keyboard {
13 text-align: center;
14 padding: .3em;
15 position: absolute;
16 left: 0;
17 top: 0;
18 z-index: 16000;
19 /* see issue #484 */
20 -ms-touch-action: manipulation;
21 touch-action: manipulation;
22 }
23 .ui-keyboard-has-focus {
24 z-index: 16001;
25 }
26 .ui-keyboard div {
27 font-size: 1.1em;
28 }
29 .ui-keyboard-button {
30 height: 2em;
31 min-width: 2em;
32 margin: .1em;
33 cursor: pointer;
34 overflow: hidden;
35 line-height: 2em;
36 -moz-user-focus: ignore;
37 }
38 .ui-keyboard-button span {
39 padding: 0;
40 margin: 0;
41 white-space: nowrap;
42 display: inline-block;
43 }
44 .ui-keyboard-button-endrow {
45 clear: left;
46 }
47 .ui-keyboard-space {
48 width: 15em;
49 }
50 /* see http://nicolasgallagher.com/another-css-image-replacement-technique/ */
51 .ui-keyboard-space span, .ui-keyboard-empty span {
52 font: 0/0 a;
53 text-shadow: none;
54 color: transparent;
55 }
56 .ui-keyboard-preview-wrapper {
57 text-align: center;
58 position: relative;
59 overflow: hidden;
60 }
61 /* width is calculated in IE, since 99% = 99% full browser width =( */
62 .ui-keyboard-preview {
63 text-align: left;
64 margin: 0 0 3px 0;
65 display: inline;
66 width: 99%;
67 }
68 .ui-keyboard-keyset {
69 text-align: center;
70 white-space: nowrap;
71 }
72 .ui-keyboard-input {
73 text-align: left;
74 }
75 .ui-keyboard-input-current {
76 -moz-box-shadow: 0 0 5px #4d90fe;
77 -webkit-box-shadow: 0 0 5px #4d90fe;
78 box-shadow: 0 0 5px #4d90fe;
79 }
80 .ui-keyboard-placeholder {
81 color: #888;
82 }
83 /* disabled or readonly inputs, or use
84 input[disabled='disabled'] { color: #f00; } */
85 .ui-keyboard-nokeyboard {
86 color: #888;
87 border-color: #888;
88 }
89 .ui-keyboard-spacer {
90 display: inline-block;
91 width: 1px;
92 height: 0;
93 cursor: default;
94 }
95
96 .ui-keyboard-NBSP span, .ui-keyboard-ZWSP span, .ui-keyboard-ZWNJ span,
97 .ui-keyboard-ZWJ span, .ui-keyboard-LRM span, .ui-keyboard-RLM span {
98 font-size: 0.5em;
99 line-height: 1.5em;
100 white-space: normal;
101 }
102
103 /* combo key styling - toggles diacritics on/off */
104 .ui-keyboard-button.ui-keyboard-combo.ui-state-default {
105 border-color: #ffaf0f;
106 }
107
108 /* (in)valid inputs */
109 button.ui-keyboard-accept.ui-keyboard-valid-input {
110 border-color: #0c0;
111 background: #080;
112 color: #fff;
113 }
114 button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover {
115 background: #0a0;
116 }
117 button.ui-keyboard-accept.ui-keyboard-invalid-input {
118 border-color: #c00;
119 background: #800;
120 color: #fff;
121 opacity: 0.5;
122 filter: alpha(opacity=50);
123 }
124 button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover {
125 background: #a00;
126 }
127
128 /*** Caret extension definition ***/
129 /* margin-top => is added to the caret height (top & bottom) */
130 .ui-keyboard-caret {
131 background: #c00;
132 width: 1px;
133 margin-top: 3px;
134 }
135
136 /*** jQuery Mobile definitions ***/
137 /* jQuery Mobile styles - need wider buttons because of font size and
138 text-overflow:ellipsis */
139 div.ui-body.ui-keyboard button.ui-keyboard-button.ui-btn {
140 padding: 0.5em 1em;
141 border-color: transparent;
142 }
143 .ui-body .ui-keyboard-button {
144 width: 3em;
145 height: 3em;
146 display: inline-block;
147 }
148 .ui-body .ui-keyboard-widekey {
149 width: 5.5em;
150 }
151 .ui-body .ui-keyboard-space {
152 width: 15em;
153 }
154 .ui-body .ui-keyboard-space span {
155 visibility: hidden; /* hides the ellipsis */
156 }
157 .ui-body .ui-keyboard-keyset {
158 line-height: 0.5em;
159 }
160 .ui-body input.ui-input-text, .ui-body textarea.ui-input-text {
161 width: 95%;
162 }
163
164 /* over-ride padding set by mobile ui theme - needed because the mobile script
165 wraps button text with several more spans */
166 .ui-body .ui-btn-inner {
167 height: 2em;
168 padding: 0.2em 0;
169 margin: 0;
170 }
171 .ui-body .ui-btn {
172 margin: 0;
173 font-size: 13px; /* mobile default size is 13px */
174 }
175
176 /* override Bootstrap excessive button padding */
177 button.ui-keyboard-button.btn {
178 padding: 1px 6px;
179 }
180
181 /* enable/disable icons */
182 button.ui-keyboard-toggle span {
183 width: .8em;
184 height: .8em;
185 display: inline-block;
186 background-repeat: no-repeat;
187 background-position: center center;
188 background-size: contain;
189 }
190 /* unlocked icon (keyboard enabled) */
191 button.ui-keyboard-toggle span {
192 /* light theme unlocked icon - fill: #111 */
193 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==);
194 }
195 .ui-keyboard-dark-theme button.ui-keyboard-toggle span {
196 /* dark theme unlocked icon - fill: #eee */
197 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==);
198 }
199
200 /* locked icon (keyboard disabled) */
201 button.ui-keyboard-toggle.ui-keyboard-disabled span {
202 /* light theme locked icon - fill: #111 */
203 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=);
204 }
205 .ui-keyboard-dark-theme button.ui-keyboard-toggle.ui-keyboard-disabled span {
206 /* dark theme locked icon - fill: #eee */
207 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=);
208 }
209
210 .ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),
211 .ui-keyboard.ui-keyboard-disabled input {
212 opacity: 0.5;
213 }
214
215 /*** Alt-Keys Popup extension ***/
216 /* clickable overlay on top of keyboard to hide the popup */
217 .ui-keyboard-overlay {
218 position: absolute;
219 top: 0;
220 left: 0;
221 bottom: 0;
222 right: 0;
223 background: rgba(0, 0, 0, 0.5);
224 }
225 /* the actual popup styling, class names from the css.container option are also
226 added */
227 .ui-keyboard-popup {
228 display: inline-block;
229 /* default buttons are 2em wide + .1em margin on either side (set in
230 .ui-keyboard-button definition); so use multiples of 2.2em for a max-width
231 if you don't want any extra white space on the sides, e.g.
232 5 buttons * 2.2em = 11em,
233 6 buttons * 2.2em = 13.2em, etc
234 */
235 max-width: 22em; /* 10 buttons */
236 }
237
238 /*** Extender keyboard extension ***/
239 div.ui-keyboard-extender {
240 margin-left: 5px;
241 }
242 button.ui-keyboard-extender span {
243 width: .9em;
244 height: .9em;
245 display: inline-block;
246 margin-bottom: 3px;
247 background-repeat: no-repeat;
248 background-position: center center;
249 background-size: contain;
250 /* light theme extender icon - fill: #111 */
251 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6IzExMSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzExMSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+);
252 }
253 .ui-keyboard-dark-theme button.ui-keyboard-extender span {
254 /* dark theme extender icon - fill: #eee */
255 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6I2VlZSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+);
256 }
257
258 /* Media Queries (optimized for jQuery UI themes;
259 may be slightly off in jQuery Mobile themes) */
260 /* 240 x 320 (small phone) */
261 @media all and (max-width: 319px) {
262 .ui-keyboard div {
263 font-size: 9px;
264 }
265 .ui-keyboard .ui-keyboard-input {
266 font-size: 12px;
267 }
268 /* I don't own an iPhone so I have no idea how small this really is... is it
269 even clickable with your finger? */
270 .ui-body .ui-btn {
271 margin: 0;
272 font-size: 9px;
273 }
274 .ui-body .ui-keyboard-button {
275 width: 1.8em;
276 height: 2.5em;
277 }
278 .ui-body .ui-keyboard-widekey {
279 width: 4em;
280 }
281 .ui-body .ui-keyboard-space {
282 width: 8em;
283 }
284 .ui-body .ui-btn-inner {
285 height: 2.5em;
286 padding: 0.3em 0;
287 }
288 }
289
290 /* 320 x 480 (iPhone) */
291 @media all and (min-width: 320px) and (max-width: 479px) {
292 .ui-keyboard div {
293 font-size: 9px;
294 }
295 .ui-keyboard .ui-keyboard-input {
296 font-size: 14px;
297 }
298 /* I don't own an iPhone so I have no idea how small this really is... is it
299 even clickable with your finger? */
300 .ui-body .ui-btn {
301 margin: 0;
302 font-size: 11px;
303 }
304 .ui-body .ui-keyboard-button {
305 width: 1.8em;
306 height: 3em;
307 }
308 .ui-body .ui-keyboard-widekey {
309 width: 4.5em;
310 }
311 .ui-body .ui-keyboard-space {
312 width: 10em;
313 }
314 .ui-body .ui-btn-inner {
315 height: 3em;
316 padding: 0.7em 0;
317 }
318 }
319
320 /* 480 x 640 (small tablet) */
321 @media all and (min-width: 480px) and (max-width: 767px) {
322 .ui-keyboard div {
323 font-size: 13px;
324 }
325 .ui-keyboard .ui-keyboard-input {
326 font-size: 14px;
327 }
328 .ui-body .ui-btn {
329 margin: 0;
330 font-size: 10px;
331 }
332 .ui-body .ui-keyboard-button {
333 height: 2.5em;
334 }
335 .ui-body .ui-btn-inner {
336 height: 2.5em;
337 padding: 0.5em 0;
338 }
339 }
340 </style>
341 <style>.ui-keyboard-has-focus {
342 background: #eeeeee 50% bottom repeat-x;
343 border-style: solid;
344 border-width: 1px;
345 border-color: #cccccc;
346 }
347 </style>
348 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
349 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
350 <meta content="bitcoin mnemonic converter" name="description" />
351 <meta content="Ian Coleman" name="author" />
352 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
353
354 <style>
355 body {
356 padding-bottom: 32px;
357 }
358 .form-control[readonly] {
359 cursor: text;
360 }
361 .feedback-container {
362 position: fixed;
363 top: 0;
364 width: 100%;
365 text-align: center;
366 z-index: 4;
367 }
368 .feedback {
369 display: table;
370 padding: 0.5em 1em;
371 background-color: orange;
372 margin: 0 auto;
373 font-size: 2em;
374 color: #444;
375 border: 2px solid #555;
376 border-top: 0;
377 border-bottom-left-radius: 20px 20px;
378 border-bottom-right-radius: 20px 20px;
379 }
380 .no-border {
381 border: 0;
382 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
383 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
384 }
385 .phrase {
386 word-break: keep-all;
387 }
388 .generate-container .strength {
389 /* override mobile width from bootstrap */
390 width: auto!important;
391 display: inline-block;
392 }
393 .languages a {
394 padding-left: 10px;
395 }
396 .languages a:nth-of-type(1) {
397 margin-left: -12px;
398 padding-left: 0;
399 }
400 .monospace {
401 font-family: monospace;
402 }
403 .entropy-container .filtered,
404 .entropy-container .binary {
405 word-wrap: break-word;
406 }
407 .entropy-container li {
408 padding-bottom: 5px;
409 }
410 .card-suit {
411 font-size: 19px;
412 line-height: 0;
413 }
414 .card-suit.club {
415 color: #009F00;
416 }
417 .card-suit.diamond {
418 color: #3D5DC4;
419 }
420 .card-suit.heart {
421 color: #F00;
422 }
423 .card-suit.spade {
424 color: #000;
425 }
426 .qr-container {
427 position: fixed;
428 top: 0;
429 right: 0;
430 text-align: center;
431 background-color: #FFF;
432 border: 1px solid #CCC;
433 }
434 .qr-image {
435 margin: 5px;
436 }
437 .qr-hint,
438 .qr-warning {
439 padding: 2px;
440 max-width: 150px;
441 }
442 .more-info {
443 cursor: help;
444 border-bottom: 1px dashed #000;
445 text-decoration: none;
446 }
447 </style>
448 </head>
449 <body>
450 <div class="container">
451
452 <h1 class="text-center">Mnemonic Code Converter</h1>
453 <hr>
454 <div class="row">
455 <div class="col-md-12">
456 <h2>Mnemonic</h2>
457 <form class="form-horizontal" role="form">
458 <div class="form-group">
459 <div class="col-sm-2"></div>
460 <div class="col-sm-10">
461 <p data-translate>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
462 <p data-translate-html>
463 For more info see the
464 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
465 </p>
466 </div>
467 </div>
468 <div class="form-group generate-container">
469 <label class="col-sm-2 control-label"></label>
470 <div class="col-sm-10">
471 <div class="form-inline">
472 <div class="input-group-inline">
473 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
474 <button class="btn generate">Generate</button>
475 <select id="strength" class="strength form-control">
476 <option value="3">3</option>
477 <option value="6">6</option>
478 <option value="9">9</option>
479 <option value="12">12</option>
480 <option value="15" selected>15</option>
481 <option value="18">18</option>
482 <option value="21">21</option>
483 <option value="24">24</option>
484 </select>
485 <span data-translate>words</span>
486 </div>
487 </div>
488 </div>
489 </div>
490 <div class="entropy-container hidden">
491 <div class="form-group text-danger">
492 <label class="col-sm-2 control-label" data-translate>Warning</label>
493 <div class="col-sm-10 form-control-static">
494 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
495 <a href="#entropy-notes" data-translate>Read more</a>
496 </div>
497 </div>
498 <div class="form-group">
499 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
500 <div class="col-sm-7">
501 <textarea id="entropy" rows="2" class="entropy form-control virtual-keyboard" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
502 <div class="row">
503 <label class="col-sm-3 control-label" data-translate>Strength</label>
504 <div class="strength col-sm-3 form-control-static"></div>
505 <label class="col-sm-3 control-label" data-translate>Event Count</label>
506 <div class="event-count col-sm-3 form-control-static"></div>
507 </div>
508 <div class="row">
509 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
510 <div class="type col-sm-3 form-control-static"></div>
511 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
512 <div class="bits-per-event col-sm-3 form-control-static"></div>
513 </div>
514 <div class="row">
515 <label class="col-sm-3 control-label" data-translate>Word Count</label>
516 <div class="word-count col-sm-3 form-control-static"></div>
517 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
518 <div class="bits col-sm-3 form-control-static"></div>
519 </div>
520 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
521 <div class="filtered col-sm-9 form-control-static"></div>
522 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
523 <div class="binary col-sm-9 form-control-static"></div>
524 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
525 <div class="col-sm-9">
526 <select class="mnemonic-length form-control">
527 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
528 <option value="12">12 <span data-translate>Words</span></option>
529 <option value="15">15 <span data-translate>Words</option>
530 <option value="18">18 <span data-translate>Words</span></option>
531 <option value="21">21 <span data-translate>Words</span></option>
532 <option value="24">24 <span data-translate>Words</span></option>
533 </select>
534 </div>
535 </div>
536 <div class="col-sm-3">
537 <p data-translate>Valid entropy values include:</p>
538 <ul>
539 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
540 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
541 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
542 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
543 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
544 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
545 </ul>
546 </div>
547 </div>
548 </div>
549 <div class="form-group">
550 <div class="col-sm-2"></div>
551 <div class="col-sm-10 checkbox">
552 <label>
553 <input type="checkbox" class="use-entropy">
554 <span data-translate>Supply my own source of entropy</span>
555 </label>
556 </div>
557 </div>
558 <div class="form-group">
559 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
560 <div class="col-sm-10 languages">
561 <div class="form-control no-border">
562 <a href="#english">English</a>
563 <a href="#japanese" title="Japanese">日本語</a>
564 <a href="#spanish" title="Spanish">Español</a>
565 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
566 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
567 <a href="#french" title="French">Français</a>
568 <a href="#italian" title="Italian">Italiano</a>
569 </div>
570 </div>
571 </div>
572 <div class="form-group">
573 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
574 <div class="col-sm-10">
575 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
576 </div>
577 </div>
578 <div class="form-group">
579 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
580 <div class="col-sm-10">
581 <textarea id="passphrase" class="passphrase form-control"></textarea>
582 </div>
583 </div>
584 <div class="form-group">
585 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
586 <div class="col-sm-10">
587 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
588 </div>
589 </div>
590 <div class="form-group">
591 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
592 <div class="col-sm-10">
593 <select id="network-phrase" class="network form-control">
594 <!-- populated by javascript -->
595 </select>
596 </div>
597 </div>
598 <div class="form-group">
599 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
600 <div class="col-sm-10">
601 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
602 </div>
603 </div>
604 </form>
605 </div>
606 </div>
607
608 <hr>
609
610 <div class="row">
611 <div class="col-md-12">
612 <h2>Derivation Path</h2>
613 <ul class="derivation-type nav nav-tabs" role="tablist">
614 <li id="bip44-tab" class="active">
615 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
616 </li>
617 <li id="bip32-tab">
618 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
619 </li>
620 </ul>
621 <div class="derivation-type tab-content">
622 <div id="bip44" class="tab-pane active">
623 <form class="form-horizontal" role="form">
624 <br>
625 <div class="col-sm-2"></div>
626 <div class="col-sm-10">
627 <p data-translate-html>
628 For more info see the
629 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
630 </p>
631 </div>
632 <div class="form-group">
633 <label for="purpose" class="col-sm-2 control-label">
634 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
635 </label>
636 <div class="col-sm-10">
637 <input id="purpose" type="text" class="purpose form-control" value="44">
638 </div>
639 </div>
640 <div class="form-group">
641 <label for="coin" class="col-sm-2 control-label">
642 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
643 </label>
644 <div class="col-sm-10">
645 <input id="coin" type="text" class="coin form-control" value="0">
646 </div>
647 </div>
648 <div class="form-group">
649 <label for="account" class="col-sm-2 control-label">
650 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
651 </label>
652 <div class="col-sm-10">
653 <input id="account" type="text" class="account form-control" value="0">
654 </div>
655 </div>
656 <div class="form-group">
657 <label for="change" class="col-sm-2 control-label">
658 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
659 </label>
660 <div class="col-sm-10">
661 <input id="change" type="text" class="change form-control" value="0">
662 </div>
663 </div>
664 <div class="form-group">
665 <label class="col-sm-2 control-label">
666 </label>
667 <div class="col-sm-10">
668 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
669 </div>
670 </div>
671 <div class="form-group">
672 <label for="account-xprv" class="col-sm-2 control-label">
673 <span data-translate>Account Extended Private Key</span>
674 </label>
675 <div class="col-sm-10">
676 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
677 </div>
678 </div>
679 <div class="form-group">
680 <label for="account-xpub" class="col-sm-2 control-label">
681 <span data-translate>Account Extended Public Key</span>
682 </label>
683 <div class="col-sm-10">
684 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
685 </div>
686 </div>
687 <div class="form-group">
688 <label class="col-sm-2 control-label">
689 </label>
690 <div class="col-sm-10">
691 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
692 </div>
693 </div>
694 <div class="form-group">
695 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
696 <div class="col-sm-10">
697 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
698 </div>
699 </div>
700 </form>
701 </div>
702 <div id="bip32" class="tab-pane">
703 <form class="form-horizontal" role="form">
704 <br>
705 <div class="col-sm-2"></div>
706 <div class="col-sm-10">
707 <p data-translate>
708 For more info see the
709 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
710 </p>
711 </div>
712 <div class="form-group">
713 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
714 <div class="col-sm-10">
715 <select id="bip32-client" class="client form-control">
716 <option value="custom">Custom derivation path</option>
717 <!-- populated by javascript -->
718 </select>
719 </div>
720 </div>
721 <div class="form-group">
722 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
723 <div class="col-sm-10">
724 <input id="bip32-path" type="text" class="path form-control" value="m/0">
725 </div>
726 </div>
727 <div class="form-group">
728 <div class="col-sm-2"></div>
729 <label class="col-sm-10">
730 <input class="hardened-addresses" type="checkbox">
731 <span data-translate>Use hardened addresses</span>
732 </label>
733 </div>
734 <div class="form-group">
735 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
736 <div class="col-sm-10">
737 <p class="form-control no-border" data-translate-html>
738 Use path <code>m/0'/0'</code> with hardened addresses.
739 </p>
740 <p class="form-control no-border" data-translate-html>
741 For more info see the
742 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
743 </p>
744 </div>
745 </div>
746 <div class="form-group">
747 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
748 <div class="col-sm-10">
749 <p class="form-control no-border">
750 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
751 </p>
752 <p class="form-control no-border">
753 <span data-translate>For more info see</span>
754 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
755 </p>
756 </div>
757 </div>
758 <div class="form-group">
759 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
760 <div class="col-sm-10">
761 <p class="form-control no-border">
762 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
763 <span data-translate-html>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
764 </p>
765 <p class="form-control no-border">
766 <span data-translate>Can be used with</span>:
767 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
768 </p>
769 </div>
770 </div>
771 </form>
772 </div>
773 </div>
774 <form class="form-horizontal" role="form">
775 <div class="form-group">
776 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
777 <div class="col-sm-10">
778 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
779 </div>
780 </div>
781 <div class="form-group">
782 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
783 <div class="col-sm-10">
784 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
785 </div>
786 </div>
787 </form>
788 </div>
789 </div>
790
791 <hr>
792
793 <div class="row">
794 <div class="col-md-12">
795 <h2>Derived Addresses</h2>
796 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
797 <table class="table table-striped">
798 <thead>
799 <th>
800 <div class="input-group">
801 <span data-translate>Path</span>&nbsp;&nbsp;
802 <button class="index-toggle" data-translate>Toggle</button>
803 </div>
804 </th>
805 <th>
806 <div class="input-group">
807 <span data-translate>Address</span>&nbsp;&nbsp;
808 <button class="address-toggle" data-translate>Toggle</button>
809 </div>
810 </th>
811 <th>
812 <div class="input-group">
813 <span data-translate>Public Key</span>&nbsp;&nbsp;
814 <button class="public-key-toggle" data-translate>Toggle</button>
815 </div>
816 </th>
817 <th>
818 <div class="input-group">
819 <span data-translate>Private Key</span>&nbsp;&nbsp;
820 <button class="private-key-toggle" data-translate>Toggle</button>
821 </div>
822 </th>
823 </thead>
824 <tbody class="addresses monospace">
825 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
826 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
827 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
828 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
829 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
830 </tbody>
831 </table>
832 </div>
833 </div>
834 <span data-translate>Show more rows</span>:
835 <input type="number" class="rows-to-add" value="20">
836 <button class="more" data-translate>Show</button>
837
838 <hr>
839
840 <div class="row">
841 <div class="col-md-12">
842 <h2 data-translate>More info</h2>
843 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
844 <p data-translate-html>
845 Read more at the
846 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
847 </p>
848 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
849 <p data-translate-html>
850 Read more at the
851 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
852 </p>
853 <p data-translate-html>
854 See the demo at
855 <a href="http://bip32.org/" target="_blank">bip32.org</a>
856 </p>
857 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
858 <p data-translate-html>
859 Read more at the
860 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
861 </p>
862 <h3 data-translate>Private Keys</h3>
863 <p>
864 <span data-translate-html>
865 Use private keys at
866 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
867 </span>
868 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
869 </p>
870 <h3 id="entropy-notes" data-translate>Entropy</h3>
871 <p>
872 <span data-translate-html>
873 Entropy values must be sourced from a
874 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
875 </span>
876 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
877 <span data-translate-html>
878 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
879 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
880 random enough for the needs of this tool.
881 </span>
882 </p>
883 <p>
884 <strong><span data-translate>Do not store entropy.</span></strong>
885 </p>
886 <p>
887 <span data-translate>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
888 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
889 <span data-translate-html><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
890 </p>
891 <p>
892 <span data-translate-html>
893 The random mnemonic generator on this page uses a
894 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
895 </span>
896 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
897 <span data-translate>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
898 <span data-translate>In that case you might choose to use your own source of entropy.</span>
899 </p>
900 <p>
901 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank" data-translate>You are not a good source of entropy.</a>
902 </p>
903 <h3 data-translate>License</h3>
904 <p>
905 <span data-translate-html>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
906 </span>
907 </p>
908 <p data-translate>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
909 </div>
910 </div>
911
912 <hr>
913
914 <div class="row">
915 <div class="col-md-12">
916
917 <h2 data-translate>Offline Usage</h2>
918
919 <p data-translate>
920 You can use this tool without having to be online.
921 </p>
922 <p data-translate>
923 In your browser, select file save-as, and save this page
924 as a file.
925 </p>
926 <p data-translate>
927 Double-click that file to open it in a browser
928 on any offline computer.
929 </p>
930 <p>
931 <span data-translate>Alternatively, download the file from the repository</span>
932 -
933 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
934 </p>
935
936 </div>
937 </div>
938
939 <hr>
940
941 <div class="row">
942 <div class="col-md-12">
943
944 <h2 data-translate>This project is 100% open-source code</h2>
945
946 <p>
947 <span data-translate>Get the source code from the repository</span>
948 -
949 <a href="https://github.com/iancoleman/bip39" target="_blank">
950 https://github.com/iancoleman/bip39
951 </a>
952 </p>
953
954 <h3 data-translate>Libraries</h3>
955
956 <p>
957 <span>BitcoinJS - </span>
958 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
959 https://github.com/bitcoinjs/bitcoinjs-lib
960 </a>
961 </p>
962
963 <p>
964 <span>jsBIP39 - </span>
965 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
966 https://github.com/iancoleman/jsbip39
967 </a>
968 </p>
969
970 <p>
971 <span>sjcl - </span>
972 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
973 https://github.com/bitwiseshiftleft/sjcl
974 </a>
975 </p>
976
977 <p>
978 <span>jQuery - </span>
979 <a href="https://jquery.com/" target="_blank">
980 https://jquery.com/
981 </a>
982 </p>
983
984 <p>
985 <span>Twitter Bootstrap - </span>
986 <a href="http://getbootstrap.com/" target="_blank">
987 http://getbootstrap.com/
988 </a>
989 </p>
990
991 </div>
992 </div>
993
994 </div>
995
996 <div class="qr-container hidden">
997 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
998 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
999 <div class="qr-hider hidden">
1000 <div class="qr-image"></div>
1001 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
1002 </div>
1003 </div>
1004
1005 <div class="feedback-container">
1006 <div class="feedback">Loading...</div>
1007 </div>
1008
1009 <script type="text/template" id="address-row-template">
1010 <tr>
1011 <td class="index"><span></span></td>
1012 <td class="address"><span data-show-qr></span></td>
1013 <td class="pubkey"><span data-show-qr></span></td>
1014 <td class="privkey"><span data-show-qr></span></td>
1015 </tr>
1016 </script>
1017 <script>// From
1018 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
1019 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
1020 // but is not required in any modern browsers.
1021 // For more information, see
1022 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
1023
1024 //----------------------------------------------------------------------
1025 //
1026 // ECMAScript 2015 Polyfills
1027 //
1028 //----------------------------------------------------------------------
1029
1030 (function (global) {
1031 "use strict";
1032
1033 // Set this to always override native implementations, for testing
1034 // the polyfill in browsers with partial/full ES2015 support.
1035 var OVERRIDE_NATIVE_FOR_TESTING = false;
1036
1037 var undefined = (void 0); // Paranoia
1038
1039 // Helpers
1040
1041 function strict(o) {
1042 return o === global ? undefined : o;
1043 }
1044
1045 function hook(o, p, f) {
1046 var op = o[p];
1047 console.assert(typeof op === 'function', 'Hooking a non-function');
1048 o[p] = function() {
1049 var o = strict(this);
1050 var r = f.apply(o, arguments);
1051 return r !== undefined ? r : op.apply(o, arguments);
1052 };
1053 }
1054
1055 function isSymbol(s) {
1056 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
1057 }
1058
1059 function getPropertyDescriptor(target, name) {
1060 var desc = Object.getOwnPropertyDescriptor(target, name);
1061 var proto = Object.getPrototypeOf(target);
1062 while (!desc && proto) {
1063 desc = Object.getOwnPropertyDescriptor(proto, name);
1064 proto = Object.getPrototypeOf(proto);
1065 }
1066 return desc;
1067 }
1068
1069 var enqueue = (function(nativePromise, nativeSetImmediate) {
1070 if (nativePromise)
1071 return function(job) { nativePromise.resolve().then(function() { job(); }); };
1072 if (nativeSetImmediate)
1073 return function(job) { nativeSetImmediate(job); };
1074 return function(job) { setTimeout(job, 0); };
1075 }(global['Promise'], global['setImmediate']));
1076
1077 function define(o, p, v, override) {
1078 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
1079 return;
1080
1081 if (typeof v === 'function') {
1082 // Sanity check that functions are appropriately named (where possible)
1083 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
1084 Object.defineProperty(o, p, {
1085 value: v,
1086 configurable: true,
1087 enumerable: false,
1088 writable: true
1089 });
1090 } else {
1091 Object.defineProperty(o, p, {
1092 value: v,
1093 configurable: false,
1094 enumerable: false,
1095 writable: false
1096 });
1097 }
1098 }
1099
1100 function set_internal(o, p, v) {
1101 Object.defineProperty(o, p, {
1102 value: v,
1103 configurable: false,
1104 enumerable: false,
1105 writable: true
1106 });
1107 }
1108
1109 // Snapshot intrinsic functions
1110 var $isNaN = global.isNaN,
1111 $parseInt = global.parseInt,
1112 $parseFloat = global.parseFloat;
1113
1114 var E = Math.E,
1115 LOG10E = Math.LOG10E,
1116 LOG2E = Math.LOG2E,
1117 abs = Math.abs,
1118 ceil = Math.ceil,
1119 exp = Math.exp,
1120 floor = Math.floor,
1121 log = Math.log,
1122 max = Math.max,
1123 min = Math.min,
1124 pow = Math.pow,
1125 random = Math.random,
1126 sqrt = Math.sqrt;
1127
1128 var orig_match = String.prototype.match,
1129 orig_replace = String.prototype.replace,
1130 orig_search = String.prototype.search,
1131 orig_split = String.prototype.split;
1132
1133 // These are used for implementing the polyfills, but not exported.
1134
1135 // Inspired by https://gist.github.com/1638059
1136 /** @constructor */
1137 function EphemeronTable() {
1138 var secretKey = ObjectCreate(null);
1139
1140 function conceal(o) {
1141 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
1142 Object.defineProperty(o, 'valueOf', {
1143 value: (function(secretKey) {
1144 return function (k) {
1145 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
1146 };
1147 }(secretKey)),
1148 configurable: true,
1149 writeable: true,
1150 enumerable: false
1151 });
1152 return secrets;
1153 }
1154
1155 function reveal(o) {
1156 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
1157 return v === o ? null : v;
1158 }
1159
1160 return {
1161 clear: function() {
1162 secretKey = ObjectCreate(null);
1163 },
1164 remove: function(key) {
1165 var secrets = reveal(key);
1166 if (secrets && HasOwnProperty(secrets, 'value')) {
1167 delete secrets.value;
1168 return true;
1169 }
1170 return false;
1171 },
1172 get: function(key, defaultValue) {
1173 var secrets = reveal(key);
1174 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
1175 },
1176 has: function(key) {
1177 var secrets = reveal(key);
1178 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
1179 },
1180 set: function(key, value) {
1181 var secrets = reveal(key) || conceal(key);
1182 secrets.value = value;
1183 }
1184 };
1185 }
1186
1187 var empty = Object.create(null);
1188
1189 //----------------------------------------------------------------------
1190 //
1191 // ECMAScript 2015
1192 // http://www.ecma-international.org/ecma-262/6.0/
1193 //
1194 //----------------------------------------------------------------------
1195
1196 // ---------------------------------------
1197 // 19.4 Symbol Objects
1198 // ---------------------------------------
1199
1200 // NOTE: Symbols are defined here - out of spec order - since we need the
1201 // properties and prototype to be populated for other polyfills.
1202
1203 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
1204
1205 var symbolForKey;
1206 (function() {
1207 var secret = Object.create(null);
1208 var symbolMap = {};
1209 symbolForKey = function(k) {
1210 return symbolMap[k];
1211 };
1212
1213 var GlobalSymbolRegistry = [];
1214
1215 function unique(bits) {
1216 return Array(bits + 1).join('x').replace(/x/g, function() {
1217 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
1218 });
1219 }
1220
1221 // 19.4.1 The Symbol Constructor
1222 // 19.4.1.1 Symbol ( description=undefined )
1223 function Symbol(description) {
1224 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1225 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
1226
1227 var descString = description === undefined ? undefined : String(description);
1228
1229 set_internal(this, '[[SymbolData]]', unique(128));
1230 set_internal(this, '[[Description]]', descString);
1231
1232 symbolMap[this] = this;
1233 return this;
1234 }
1235
1236 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1237 global.Symbol = Symbol;
1238
1239 // 19.4.2 Properties of the Symbol Constructor
1240
1241 // 19.4.2.1 Symbol.for (key)
1242 define(Symbol, 'for', function for_(key) {
1243 var stringKey = String(key);
1244 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1245 var e = GlobalSymbolRegistry[i];
1246 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
1247 }
1248 var newSymbol = Symbol(key);
1249 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1250 return newSymbol;
1251 });
1252
1253 // 19.4.2.2 Symbol.hasInstance
1254 // 19.4.2.3 Symbol.isConcatSpreadable
1255
1256 // 19.4.2.4 Symbol.iterator
1257 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
1258
1259 // 19.4.2.5 Symbol.keyFor (sym)
1260 define(Symbol, 'keyFor', function keyFor(sym) {
1261 if (!(sym instanceof Symbol)) throw TypeError();
1262 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1263 var e = GlobalSymbolRegistry[i];
1264 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1265 }
1266 return undefined;
1267 });
1268
1269 // 19.4.2.6 Symbol.match
1270 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
1271
1272 // 19.4.2.7 Symbol.prototype
1273
1274 // 19.4.2.8 Symbol.replace
1275 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
1276
1277 // 19.4.2.9 Symbol.search
1278 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
1279
1280 // 19.4.2.10 Symbol.species
1281
1282 // 19.4.2.11 Symbol.search
1283 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
1284
1285 // 19.4.2.12 Symbol.toPrimitive
1286
1287 // 19.4.2.13 Symbol.toStringTag
1288 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1289
1290 // 19.4.2.14 Symbol.unscopables
1291
1292 // 19.4.3 Properties of the Symbol Prototype Object
1293 // 19.4.3.1 Symbol.prototype.constructor
1294
1295 // 19.4.3.2 Symbol.prototype.toString ( )
1296 Object.defineProperty(Symbol.prototype, 'toString', {
1297 value: function toString() {
1298 var s = strict(this);
1299 var desc = s['[[Description]]'];
1300 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1301 },
1302 configurable: true, writeable: true, enumerable: false });
1303
1304 // 19.4.3.3 Symbol.prototype.valueOf ( )
1305 Object.defineProperty(Symbol.prototype, 'valueOf', {
1306 value: function valueOf() {
1307 // To prevent automatic string conversion:
1308 throw TypeError();
1309
1310 // Spec has approximately the following:
1311 //var s = strict(this);
1312 //if (Type(s) === 'symbol') return s;
1313 //if (Type(s) !== 'object') throw TypeError();
1314 //if (!('[[SymbolData]]' in s)) throw TypeError();
1315 //return s['[[SymbolData]]'];
1316 },
1317 configurable: true, writeable: true, enumerable: false });
1318
1319 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1320 // (Done later to polyfill partial implementations)
1321
1322 // 19.4.4 Properties of Symbol Instances
1323 }());
1324
1325 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1326
1327 // Defined here so that other prototypes can reference it
1328 // 25.1.2 The %IteratorPrototype% Object
1329 var $IteratorPrototype$ = {};
1330
1331 //----------------------------------------
1332 // 6 ECMAScript Data Types and Values
1333 //----------------------------------------
1334
1335 // 6.1 ECMAScript Language Types
1336
1337 // "Type(x)" is used as shorthand for "the type of x"...
1338 function Type(v) {
1339 switch (typeof v) {
1340 case 'undefined': return 'undefined';
1341 case 'boolean': return 'boolean';
1342 case 'number': return 'number';
1343 case 'string': return 'string';
1344 case 'symbol': return 'symbol';
1345 default:
1346 if (v === null) return 'null';
1347 if (v instanceof global.Symbol) return 'symbol';
1348 return 'object';
1349 }
1350 }
1351
1352 // 6.1.5.1 Well-Known Symbols
1353 var $$iterator = global.Symbol.iterator,
1354 $$match = global.Symbol.match,
1355 $$replace = global.Symbol.replace,
1356 $$search = global.Symbol.search,
1357 $$split = global.Symbol.split,
1358 $$toStringTag = global.Symbol.toStringTag;
1359
1360 //----------------------------------------
1361 // 7 Abstract Operations
1362 //----------------------------------------
1363
1364 //----------------------------------------
1365 // 7.1 Type Conversion
1366 //----------------------------------------
1367
1368 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1369 // just use valueOf()
1370
1371 // 7.1.2 ToBoolean ( argument )
1372 // just use Boolean()
1373
1374 // 7.1.3 ToNumber ( argument )
1375 // just use Number()
1376
1377 // 7.1.4 ToInteger ( argument )
1378 function ToInteger(n) {
1379 n = Number(n);
1380 if ($isNaN(n)) return 0;
1381 if (n === 0 || n === Infinity || n === -Infinity) return n;
1382 return ((n < 0) ? -1 : 1) * floor(abs(n));
1383 }
1384
1385 // 7.1.5 ToInt32 ( argument )
1386 function ToInt32(v) { return v >> 0; }
1387
1388 // 7.1.6 ToUint32 ( argument )
1389 function ToUint32(v) { return v >>> 0; }
1390
1391 // 7.1.7 ToInt16 ( argument )
1392 function ToInt16(v) { return (v << 16) >> 16; }
1393
1394 // 7.1.8 ToUint16 ( argument )
1395 function ToUint16(v) { return v & 0xFFFF; }
1396
1397 // 7.1.9 ToInt8 ( argument )
1398 function ToInt8(v) { return (v << 24) >> 24; }
1399
1400 // 7.1.10 ToUint8 ( argument )
1401 function ToUint8(v) { return v & 0xFF; }
1402
1403 // 7.1.11 ToUint8Clamp ( argument )
1404 function ToUint8Clamp(argument) {
1405 var number = Number(argument);
1406 if ($isNaN(number)) return 0;
1407 if (number <= 0) return 0;
1408 if (number >= 255) return 255;
1409 var f = floor(number);
1410 if ((f + 0.5) < number) return f + 1;
1411 if (number < (f + 0.5)) return f;
1412 if (f % 2) return f + 1;
1413 return f;
1414 }
1415
1416 // 7.1.12 ToString ( argument )
1417 // just use String()
1418
1419 // 7.1.13 ToObject ( argument )
1420 function ToObject(v) {
1421 if (v === null || v === undefined) throw TypeError();
1422 return Object(v);
1423 }
1424
1425 // 7.1.14 ToPropertyKey ( argument )
1426 function ToPropertyKey(v) {
1427 return String(v);
1428 }
1429
1430 // 7.1.15 ToLength ( argument )
1431 function ToLength(v) {
1432 var len = ToInteger(v);
1433 if (len <= 0) return 0;
1434 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1435 return min(len, 0x20000000000000 - 1); // 2^53-1
1436 }
1437
1438 // 7.1.16 CanonicalNumericIndexString ( argument )
1439
1440 //----------------------------------------
1441 // 7.2 Testing and Comparison Operations
1442 //----------------------------------------
1443
1444 // 7.2.1 RequireObjectCoercible ( argument )
1445 // 7.2.2 IsArray ( argument )
1446
1447 // 7.2.3 IsCallable ( argument )
1448 function IsCallable(o) { return typeof o === 'function'; }
1449
1450 // 7.2.4 IsConstructor ( argument )
1451 function IsConstructor(o) {
1452 // Hacks for Safari 7 TypedArray XXXConstructor objects
1453 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1454 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1455 // TODO: Can this be improved on?
1456 return typeof o === 'function';
1457 }
1458
1459 // 7.2.5 IsExtensible (O)
1460 // 7.2.6 IsInteger ( argument )
1461
1462 // 7.2.7 IsPropertyKey ( argument )
1463 function IsPropertyKey(argument) {
1464 if (Type(argument) === 'string') return true;
1465 if (Type(argument) === 'symbol') return true;
1466 return false;
1467 }
1468
1469 // 7.2.8 IsRegExp ( argument )
1470 // 7.2.5 IsConstructor ( argument )
1471
1472 // 7.2.9 SameValue(x, y)
1473 function SameValue(x, y) {
1474 if (typeof x !== typeof y) return false;
1475 switch (typeof x) {
1476 case 'undefined':
1477 return true;
1478 case 'number':
1479 if (x !== x && y !== y) return true;
1480 if (x === 0 && y === 0) return 1/x === 1/y;
1481 return x === y;
1482 case 'boolean':
1483 case 'string':
1484 case 'object':
1485 default:
1486 return x === y;
1487 }
1488 }
1489
1490 // 7.2.10 SameValueZero(x, y)
1491 function SameValueZero(x, y) {
1492 if (typeof x !== typeof y) return false;
1493 switch (typeof x) {
1494 case 'undefined':
1495 return true;
1496 case 'number':
1497 if (x !== x && y !== y) return true;
1498 return x === y;
1499 case 'boolean':
1500 case 'string':
1501 case 'object':
1502 default:
1503 return x === y;
1504 }
1505 }
1506
1507 //----------------------------------------
1508 // 7.3 Operations on Objects
1509 //----------------------------------------
1510
1511 // 7.3.1 Get (O, P)
1512 // - just use o.p or o[p]
1513
1514 // 7.3.2 GetV (V, P)
1515 function GetV(v, p) {
1516 var o = ToObject(v);
1517 return o[p];
1518 }
1519
1520 // 7.3.3 Set (O, P, V, Throw)
1521 // - just use o.p = v or o[p] = v
1522
1523
1524
1525
1526 // 7.3.9 GetMethod (O, P)
1527 function GetMethod(o, p) {
1528 var func = GetV(o, p);
1529 if (func === undefined || func === null) return undefined;
1530 if (!IsCallable(func)) throw TypeError();
1531 return func;
1532 }
1533
1534 // 7.3.10 HasProperty (O, P)
1535 function HasProperty(o, p) {
1536 while (o) {
1537 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1538 if (Type(o) !== 'object') return false;
1539 o = Object.getPrototypeOf(o);
1540 }
1541 return false;
1542 }
1543
1544 // 7.3.11 HasOwnProperty (O, P)
1545 function HasOwnProperty(o, p) {
1546 return Object.prototype.hasOwnProperty.call(o, p);
1547 }
1548
1549 //----------------------------------------
1550 // 7.4 Operations on Iterator Objects
1551 //----------------------------------------
1552
1553 // 7.4.1 GetIterator ( obj, method )
1554 function GetIterator(obj, method) {
1555 if (arguments.length < 2)
1556 method = GetMethod(obj, $$iterator);
1557 var iterator = method.call(obj);
1558 if (Type(iterator) !== 'object') throw TypeError();
1559 return iterator;
1560 }
1561
1562 // 7.4.2 IteratorNext ( iterator, value )
1563 function IteratorNext(iterator, value) {
1564 if (arguments.length < 2)
1565 var result = iterator.next();
1566 else
1567 result = iterator.next(value);
1568 if (Type(result) !== 'object') throw TypeError();
1569 return result;
1570 }
1571
1572 // 7.4.3 IteratorComplete ( iterResult )
1573 function IteratorComplete(iterResult) {
1574 console.assert(Type(iterResult) === 'object');
1575 return Boolean(iterResult.done);
1576 }
1577
1578 // 7.4.4 IteratorValue ( iterResult )
1579 function IteratorValue(iterResult) {
1580 console.assert(Type(iterResult) === 'object');
1581 return iterResult.value;
1582 }
1583
1584 // 7.4.5 IteratorStep ( iterator )
1585 function IteratorStep( iterator, value ) {
1586 var result = IteratorNext(iterator, value);
1587 var done = result['done'];
1588 if (Boolean(done) === true) return false;
1589 return result;
1590 }
1591
1592 // 7.4.6 IteratorClose( iterator, completion )
1593 function IteratorClose( iterator, completion ) {
1594 console.assert(Type(iterator) === 'object');
1595 var _return = GetMethod(iterator, 'return');
1596 if (_return === undefined) return completion;
1597 try {
1598 var innerResult = _return[iterator]();
1599 } catch (result) {
1600 // TODO: If completion.[[type]] is throw, return completion
1601 return result;
1602 }
1603 if (Type(innerResult) !== 'object') throw TypeError();
1604 return completion;
1605 }
1606
1607 // 7.4.7 CreateIterResultObject (value, done)
1608 function CreateIterResultObject(value, done) {
1609 console.assert(Type(done) === 'boolean');
1610 var obj = {};
1611 obj["value"] = value;
1612 obj["done"] = done;
1613 return obj;
1614 }
1615
1616 // 7.4.8 CreateListIterator (list)
1617 // 7.4.8.1 ListIterator next( )
1618 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1619 // 7.4.9.1 CompoundIterator next( )
1620
1621 //----------------------------------------
1622 // 8 Executable Code and Execution Contexts
1623 //----------------------------------------
1624
1625 //----------------------------------------
1626 // 8.4 Jobs and Job Queues
1627 //----------------------------------------
1628
1629 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1630 function EnqueueJob(queueName, job, args) {
1631 var fn = function() { job.apply(undefined, args); };
1632 enqueue(fn);
1633 }
1634
1635 // 8.4.2 NextJob result
1636 function NextJob(result) {
1637 // no-op
1638 }
1639
1640 //----------------------------------------
1641 // 9 Ordinary and Exotic Objects Behaviors
1642 //----------------------------------------
1643
1644 // 9.1.11 [[Enumerate]] ()
1645 function Enumerate(obj) {
1646 var e = [];
1647 if (Object(obj) !== obj) return e;
1648 var visited = new Set;
1649 while (obj !== null) {
1650 Object.getOwnPropertyNames(obj).forEach(function(name) {
1651 if (!visited.has(name)) {
1652 var desc = Object.getOwnPropertyDescriptor(obj, name);
1653 if (desc) {
1654 visited.add(name);
1655 if (desc.enumerable) e.push(name);
1656 }
1657 }
1658 });
1659 obj = Object.getPrototypeOf(obj);
1660 }
1661 return e[$$iterator]();
1662 }
1663
1664 // 9.1.12 [[OwnPropertyKeys]] ( )
1665 function OwnPropertyKeys(o) {
1666 return Object.getOwnPropertyNames(o);
1667 }
1668
1669 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1670 function ObjectCreate(proto, internalSlotsList) {
1671 return Object.create(proto, internalSlotsList);
1672 }
1673
1674 // ---------------------------------------
1675 // 19 Fundamental Objects
1676 // ---------------------------------------
1677
1678 // ---------------------------------------
1679 // 19.1 Object Objects
1680 // ---------------------------------------
1681
1682 // 19.1.1 The Object Constructor
1683 // 19.1.1.1 Object ( [ value ] )
1684 // 19.1.2 Properties of the Object Constructor
1685 // 19.1.2.1 Object.assign ( target, ...sources )
1686 define(
1687 Object, 'assign',
1688 function assign(target, /*...*/sources) {
1689 var to = ToObject(target);
1690 if (arguments.length < 2) return to;
1691
1692 var sourcesIndex = 1;
1693 while (sourcesIndex < arguments.length) {
1694 var nextSource = arguments[sourcesIndex++];
1695 if (nextSource === undefined || nextSource === null) {
1696 var keys = [];
1697 } else {
1698 var from = ToObject(nextSource);
1699 keys = OwnPropertyKeys(from);
1700 }
1701 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1702 var nextKey = keys[keysIndex];
1703 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1704 if (desc !== undefined && desc.enumerable) {
1705 var propValue = from[nextKey];
1706 to[nextKey] = propValue;
1707 }
1708 }
1709 }
1710 return to;
1711 });
1712
1713 // 19.1.2.2 Object.create ( O [ , Properties ] )
1714 // 19.1.2.3 Object.defineProperties ( O, Properties )
1715 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1716 // 19.1.2.5 Object.freeze ( O )
1717 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1718
1719 (function() {
1720 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1721 $getOwnPropertyNames = Object.getOwnPropertyNames,
1722 $keys = Object.keys,
1723 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1724
1725 function isStringKey(k) { return !symbolForKey(k); }
1726
1727 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1728 define(
1729 Object, 'getOwnPropertyNames',
1730 function getOwnPropertyNames(o) {
1731 if (Object.prototype.toString.call(o) === '[object Window]') {
1732 // Workaround for cross-realm calling by IE itself.
1733 // https://github.com/inexorabletash/polyfill/issues/96
1734 try {
1735 return $getOwnPropertyNames(o).filter(isStringKey);
1736 } catch (_) {
1737 return $window_names.slice();
1738 }
1739 }
1740 return $getOwnPropertyNames(o).filter(isStringKey);
1741 }, !nativeSymbols);
1742
1743 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1744 define(
1745 Object, 'getOwnPropertySymbols',
1746 function getOwnPropertySymbols(o) {
1747 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1748 }, !nativeSymbols);
1749
1750 // 19.1.2.14 Object.keys ( O )
1751 define(
1752 Object, 'keys',
1753 function keys(o) {
1754 return $keys(o).filter(isStringKey);
1755 }, !nativeSymbols);
1756 }());
1757
1758 // 19.1.2.9 Object.getPrototypeOf ( O )
1759 // 19.1.2.10 Object.is ( value1, value2 )
1760 define(
1761 Object, 'is',
1762 function is(value1, value2) {
1763 return SameValue(value1, value2);
1764 });
1765
1766 // 19.1.2.11 Object.isExtensible ( O )
1767 // 19.1.2.12 Object.isFrozen ( O )
1768 // 19.1.2.13 Object.isSealed ( O )
1769
1770 // 19.1.2.14 Object.keys ( O )
1771 // see above
1772
1773 // 19.1.2.15 Object.preventExtensions ( O )
1774 // 19.1.2.16 Object.prototype
1775 // 19.1.2.17 Object.seal ( O )
1776
1777 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1778 define(
1779 Object, 'setPrototypeOf',
1780 function setPrototypeOf(o, proto) {
1781 if (Type(o) !== 'object') throw TypeError();
1782 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1783 o.__proto__ = proto;
1784 return o;
1785 }
1786 );
1787
1788 // 19.1.3 Properties of the Object Prototype Object
1789 // 19.1.3.1 Object.prototype.constructor
1790 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1791 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1792 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1793 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1794 // 19.1.3.6 Object.prototype.toString ( )
1795 hook(Object.prototype, 'toString',
1796 function() {
1797 var o = strict(this);
1798 if (o === Object(o) && $$toStringTag in o) {
1799 return '[object ' + o[$$toStringTag] + ']';
1800 }
1801 return undefined;
1802 });
1803
1804 // 19.1.3.7 Object.prototype.valueOf ( )
1805 // 19.1.4 Properties of Object Instances
1806
1807 // ---------------------------------------
1808 // 19.2 Function Objects
1809 // ---------------------------------------
1810
1811 // 19.2.1 The Function Constructor
1812 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1813 // 19.2.2 Properties of the Function Constructor
1814 // 19.2.2.1 Function.length
1815 // 19.2.2.2 Function.prototype
1816 // 19.2.3 Properties of the Function Prototype Object
1817 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1818 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1819 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1820 // 19.2.3.4 Function.prototype.constructor
1821 // 19.2.3.5 Function.prototype.toString ( )
1822 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1823 // 19.2.4 Function Instances
1824 // 19.2.4.1 length
1825 // 19.2.4.2 name
1826 // 19.2.4.3 prototype
1827
1828 // (No polyfillable changes from ES5)
1829
1830 // ---------------------------------------
1831 // 19.3 Boolean Objects
1832 // ---------------------------------------
1833
1834 // 19.3.1 The Boolean Constructor
1835 // 19.3.1.1 Boolean ( value )
1836 // 19.3.2 Properties of the Boolean Constructor
1837 // 19.3.2.1 Boolean.prototype
1838 // 19.3.3 Properties of the Boolean Prototype Object
1839 // 19.3.3.1 Boolean.prototype.constructor
1840 // 19.3.3.2 Boolean.prototype.toString ( )
1841 // 19.3.3.3 Boolean.prototype.valueOf ( )
1842 // 19.3.4 Properties of Boolean Instances
1843
1844 // (No polyfillable changes from ES5)
1845
1846 // ---------------------------------------
1847 // 19.4 Symbol Objects
1848 // ---------------------------------------
1849
1850 // Moved earlier in this script, so that other polyfills can depend on them.
1851
1852 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1853 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1854
1855 // ---------------------------------------
1856 // 19.5 Error Objects
1857 // ---------------------------------------
1858
1859 // 19.5.1 The Error Constructor
1860 // 19.5.1.1 Error ( message )
1861 // 19.5.1.2 new Error( ...argumentsList )
1862 // 19.5.2 Properties of the Error Constructor
1863 // 19.5.2.1 Error.prototype
1864 // 19.5.3 Properties of the Error Prototype Object
1865 // 19.5.3.1 Error.prototype.constructor
1866 // 19.5.3.2 Error.prototype.message
1867 // 19.5.3.3 Error.prototype.name
1868 // 19.5.3.4 Error.prototype.toString ( )
1869 // 19.5.4 Properties of Error Instances
1870 // 19.5.5 Native Error Types Used in This Standard
1871 // 19.5.5.1 EvalError
1872 // 19.5.5.2 RangeError
1873 // 19.5.5.3 ReferenceError
1874 // 19.5.5.4 SyntaxError
1875 // 19.5.5.5 TypeError
1876 // 19.5.5.6 URIError
1877 // 19.5.6 NativeError Object Structure
1878 // 19.5.6.1 NativeError Constructors
1879 // 19.5.6.1.1 NativeError ( message )
1880 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1881 // 19.5.6.2 Properties of the NativeError Constructors
1882 // 19.5.6.2.1 NativeError.prototype
1883 // 19.5.6.3 Properties of the NativeError Prototype Objects
1884 // 19.5.6.4 Properties of NativeError Instances
1885
1886 // (No polyfillable changes from ES5)
1887
1888 // ---------------------------------------
1889 // 20 Numbers and Dates
1890 // ---------------------------------------
1891
1892 // ---------------------------------------
1893 // 20.1 Number Objects
1894 // ---------------------------------------
1895
1896 // 20.1.1 The Number Constructor
1897 // 20.1.1.1 Number ( [ value ] )
1898 // 20.1.1.2 new Number ( ...argumentsList )
1899 // 20.1.2 Properties of the Number Constructor
1900
1901 // 20.1.2.1 Number.EPSILON
1902 define(
1903 Number, 'EPSILON',
1904 (function () {
1905 var next, result;
1906 for (next = 1; 1 + next !== 1; next = next / 2)
1907 result = next;
1908 return result;
1909 }()));
1910
1911 // 20.1.2.2 Number.isFinite ( number )
1912 define(
1913 Number, 'isFinite',
1914 function isFinite(number) {
1915 if (Type(number) !== 'number') return false;
1916 if (number !== number || number === +Infinity || number === -Infinity) return false;
1917 return true;
1918 });
1919
1920 // 20.1.2.3 Number.isInteger ( number )
1921 define(
1922 Number, 'isInteger',
1923 function isInteger(number) {
1924 if (Type(number) !== 'number') return false;
1925 if (number !== number || number === +Infinity || number === -Infinity) return false;
1926 var integer = ToInteger(number);
1927 if (integer !== number) return false;
1928 return true;
1929 });
1930
1931 // 20.1.2.4 Number.isNaN ( number )
1932 define(
1933 Number, 'isNaN',
1934 function isNaN(number) {
1935 if (Type(number) !== 'number') return false;
1936 if (number !== number) return true;
1937 return false;
1938 });
1939
1940 // 20.1.2.5 Number.isSafeInteger ( number )
1941 define(
1942 Number, 'isSafeInteger',
1943 function isSafeInteger(number) {
1944 if (Type(number) !== 'number') return false;
1945 if (number !== number || number === +Infinity || number === -Infinity) return false;
1946 var integer = ToInteger(number);
1947 if (integer !== number) return false;
1948 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1949 return true;
1950 return false;
1951 });
1952
1953 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1954 define(
1955 Number, 'MAX_SAFE_INTEGER',
1956 9007199254740991); // 2^53-1
1957
1958 // 20.1.2.7 Number.MAX_VALUE
1959
1960 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1961 define(
1962 Number, 'MIN_SAFE_INTEGER',
1963 -9007199254740991); // -2^53+1
1964
1965 // 20.1.2.9 Number.MIN_VALUE
1966 // 20.1.2.10 Number.NaN
1967 // 20.1.2.11 Number.NEGATIVE_INFINITY
1968
1969 // 20.1.2.12 Number.parseFloat ( string )
1970 define(Number, 'parseFloat', $parseFloat);
1971
1972 // 20.1.2.13 Number.parseInt ( string, radix )
1973 define(Number, 'parseInt', $parseInt);
1974
1975 // 20.1.2.14 Number.POSITIVE_INFINITY
1976 // 20.1.2.15 Number.prototype
1977
1978 // 20.1.3 Properties of the Number Prototype Object
1979 // 20.1.3.1 Number.prototype.constructor
1980 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1981 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1982 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1983 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1984 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1985 // 20.1.3.7 Number.prototype.valueOf ( )
1986 // 20.1.4 Properties of Number Instances
1987
1988 // ---------------------------------------
1989 // 20.2 The Math Object
1990 // ---------------------------------------
1991
1992 // 20.2.1 Value Properties of the Math Object
1993 // 20.2.1.1 Math.E
1994 // 20.2.1.2 Math.LN10
1995 // 20.2.1.3 Math.LN2
1996 // 20.2.1.4 Math.LOG10E
1997 // 20.2.1.5 Math.LOG2E
1998 // 20.2.1.6 Math.PI
1999 // 20.2.1.7 Math.SQRT1_2
2000 // 20.2.1.8 Math.SQRT2
2001
2002 // 20.2.1.9 Math [ @@toStringTag ]
2003 define(Math, $$toStringTag, 'Math');
2004
2005 // 20.2.2 Function Properties of the Math Object
2006 // 20.2.2.1 Math.abs ( x )
2007 // 20.2.2.2 Math.acos ( x )
2008
2009 // 20.2.2.3 Math.acosh(x)
2010 define(
2011 Math, 'acosh',
2012 function acosh(x) {
2013 x = Number(x);
2014 return log(x + sqrt(x * x - 1));
2015 });
2016
2017 // 20.2.2.4 Math.asin ( x )
2018
2019 // 20.2.2.5 Math.asinh( x )
2020 define(
2021 Math, 'asinh',
2022 function asinh(x) {
2023 x = Number(x);
2024 if (SameValue(x, -0)) {
2025 return x;
2026 }
2027 var s = sqrt(x * x + 1);
2028 return (s === -x) ? log(0) : log(x + s);
2029 });
2030
2031 // 20.2.2.6 Math.atan ( x )
2032
2033 // 20.2.2.7 Math.atanh( x )
2034 define(
2035 Math, 'atanh',
2036 function atanh(x) {
2037 x = Number(x);
2038 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
2039 });
2040
2041 // 20.2.2.8 Math.atan2 ( y, x )
2042
2043 // 20.2.2.9 Math.cbrt ( x )
2044 define(
2045 Math, 'cbrt',
2046 function cbrt(x) {
2047 x = Number(x);
2048 if ($isNaN(x/x)) {
2049 return x;
2050 }
2051 var r = pow(abs(x), 1/3);
2052 var t = x/r/r;
2053 return r + (r * (t-r) / (2*r + t));
2054 });
2055
2056 // 20.2.2.10 Math.ceil ( x )
2057
2058 // 20.2.2.11 Math.clz32 ( x )
2059 define(
2060 Math, 'clz32',
2061 function clz32(x) {
2062 function clz8(x) {
2063 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
2064 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
2065 }
2066 x = ToUint32(x);
2067 return x & 0xff000000 ? clz8(x >> 24) :
2068 x & 0xff0000 ? clz8(x >> 16) + 8 :
2069 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
2070 });
2071
2072
2073
2074 // 20.2.2.12 Math.cos ( x )
2075
2076 // 20.2.2.13 Math.cosh ( x )
2077 define(
2078 Math, 'cosh',
2079 function cosh(x) {
2080 x = Number(x);
2081 return (pow(E, x) + pow(E, -x)) / 2;
2082 });
2083
2084 // 20.2.2.14 Math.exp ( x )
2085
2086 // 20.2.2.15 Math.expm1 ( x )
2087 define(
2088 Math, 'expm1',
2089 function expm1(x) {
2090 x = Number(x);
2091 // from: http://www.johndcook.com/cpp_log1p.html
2092 if (SameValue(x, -0)) {
2093 return -0;
2094 } else if (abs(x) < 1e-5) {
2095 return x + 0.5 * x * x; // two terms of Taylor expansion
2096 } else {
2097 return exp(x) - 1;
2098 }
2099 });
2100
2101 // 20.2.2.16 Math.floor ( x )
2102
2103 // 20.2.2.17 Math.fround ( x )
2104 define(
2105 Math, 'fround',
2106 function fround(x) {
2107 if ($isNaN(x)) {
2108 return NaN;
2109 }
2110 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
2111 return x;
2112 }
2113 return (new Float32Array([x]))[0];
2114 });
2115
2116 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
2117 define(
2118 Math, 'hypot',
2119 function hypot() {
2120 var values = [];
2121 var m = 0, sawNaN = false;
2122 for (var i = 0; i < arguments.length; ++i) {
2123 var n = abs(Number(arguments[i]));
2124 if (n === Infinity) return n;
2125 if (n !== n) sawNaN = true;
2126 if (n > m) m = n;
2127 values[i] = n;
2128 }
2129 if (sawNaN) return NaN;
2130 if (m === 0) return +0;
2131 var sum = +0;
2132 for (i = 0; i < values.length; ++i) {
2133 var r = values[i] / m;
2134 sum = sum + r * r;
2135 }
2136 return m * sqrt(sum);
2137 });
2138
2139 // 20.2.2.19 Math.imul ( x, y )
2140 define(
2141 Math, 'imul',
2142 function imul(x, y) {
2143 var a = ToUint32(x);
2144 var b = ToUint32(y);
2145 // (slow but accurate)
2146 var ah = (a >>> 16) & 0xffff;
2147 var al = a & 0xffff;
2148 var bh = (b >>> 16) & 0xffff;
2149 var bl = b & 0xffff;
2150 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
2151 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
2152 );
2153
2154 // 20.2.2.20 Math.log ( x )
2155
2156 // 20.2.2.21 Math.log1p ( x )
2157 define(
2158 Math, 'log1p',
2159 function log1p(x) {
2160 x = Number(x);
2161 // from: http://www.johndcook.com/cpp_expm1.html
2162 if (x < -1) {
2163 return NaN;
2164 } else if (SameValue(x, -0)) {
2165 return -0;
2166 } else if (abs(x) > 1e-4) {
2167 return log(1 + x);
2168 } else {
2169 return (-0.5 * x + 1) * x;
2170 }
2171 });
2172
2173 // 20.2.2.22 Math.log10 ( x )
2174 define(
2175 Math, 'log10',
2176 function log10(x) {
2177 x = Number(x);
2178 return log(x) * LOG10E;
2179 });
2180
2181 // 20.2.2.23 Math.log2 ( x )
2182 define(
2183 Math, 'log2',
2184 function log2(x) {
2185 x = Number(x);
2186 return log(x) * LOG2E;
2187 });
2188
2189 // 20.2.2.24 Math.max ( value1, value2 , ...values )
2190 // 20.2.2.25 Math.min ( value1, value2 , ...values )
2191 // 20.2.2.26 Math.pow ( x, y )
2192 // 20.2.2.27 Math.random ( )
2193 // 20.2.2.28 Math.round ( x )
2194
2195 // 20.2.2.29 Math.sign(x)
2196 define(
2197 Math, 'sign',
2198 function sign(x) {
2199 x = Number(x);
2200 return x < 0 ? -1 : x > 0 ? 1 : x;
2201 });
2202
2203 // 20.2.2.30 Math.sin ( x )
2204
2205 // 20.2.2.31 Math.sinh( x )
2206 define(
2207 Math, 'sinh',
2208 function sinh(x) {
2209 x = Number(x);
2210 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
2211 });
2212
2213 // 20.2.2.32 Math.sqrt ( x )
2214 // 20.2.2.33 Math.tan ( x )
2215
2216 // 20.2.2.34 Math.tanh ( x )
2217 define(
2218 Math, 'tanh',
2219 function tanh(x) {
2220 x = Number(x);
2221 var n = pow(E, 2 * x) - 1,
2222 d = pow(E, 2 * x) + 1;
2223 if (SameValue(x, -0))
2224 return x;
2225 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2226 });
2227
2228 // 20.2.2.35 Math.trunc ( x )
2229 define(
2230 Math, 'trunc',
2231 function trunc(x) {
2232 x = Number(x);
2233 return $isNaN(x) ? NaN :
2234 x < 0 ? ceil(x) : floor(x);
2235 });
2236
2237 // ---------------------------------------
2238 // 20.3 Date Objects
2239 // ---------------------------------------
2240
2241 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2242 // 20.3.1.1 Time Values and Time Range
2243 // 20.3.1.2 Day Number and Time within Day
2244 // 20.3.1.3 Year Number
2245 // 20.3.1.4 Month Number
2246 // 20.3.1.5 Date Number
2247 // 20.3.1.6 Week Day
2248 // 20.3.1.7 Local Time Zone Adjustment
2249 // 20.3.1.8 Daylight Saving Time Adjustment
2250 // 20.3.1.9 Local Time
2251 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2252 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2253 // 20.3.1.12 MakeDay (year, month, date)
2254 // 20.3.1.13 MakeDate (day, time)
2255 // 20.3.1.14 TimeClip (time)
2256 // 20.3.1.15 Date Time String Format
2257 // 20.3.1.15.1 Extended years
2258 // 20.3.2 The Date Constructor
2259 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2260 // 20.3.2.2 Date ( value )
2261 // 20.3.2.3 Date ( )
2262 // 20.3.3 Properties of the Date Constructor
2263 // 20.3.3.1 Date.now ( )
2264 // 20.3.3.2 Date.parse (string)
2265 // 20.3.3.3 Date.prototype
2266 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2267 // 20.3.4 Properties of the Date Prototype Object
2268 // 20.3.4.1 Date.prototype.constructor
2269 // 20.3.4.2 Date.prototype.getDate ( )
2270 // 20.3.4.3 Date.prototype.getDay ( )
2271 // 20.3.4.4 Date.prototype.getFullYear ( )
2272 // 20.3.4.5 Date.prototype.getHours ( )
2273 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2274 // 20.3.4.7 Date.prototype.getMinutes ( )
2275 // 20.3.4.8 Date.prototype.getMonth ( )
2276 // 20.3.4.9 Date.prototype.getSeconds ( )
2277 // 20.3.4.10 Date.prototype.getTime ( )
2278 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2279 // 20.3.4.12 Date.prototype.getUTCDate ( )
2280 // 20.3.4.13 Date.prototype.getUTCDay ( )
2281 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2282 // 20.3.4.15 Date.prototype.getUTCHours ( )
2283 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2284 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2285 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2286 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2287 // 20.3.4.20 Date.prototype.setDate ( date )
2288 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2289 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2290 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2291 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2292 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2293 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2294 // 20.3.4.27 Date.prototype.setTime ( time )
2295 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2296 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2297 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2298 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2299 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2300 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2301 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2302 // 20.3.4.35 Date.prototype.toDateString ( )
2303 // 20.3.4.36 Date.prototype.toISOString ( )
2304 // 20.3.4.37 Date.prototype.toJSON ( key )
2305 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2306 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2307 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2308 // 20.3.4.41 Date.prototype.toString ( )
2309 // 20.3.4.42 Date.prototype.toTimeString ( )
2310 // 20.3.4.43 Date.prototype.toUTCString ( )
2311 // 20.3.4.44 Date.prototype.valueOf ( )
2312 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2313 // 20.3.5 Properties of Date Instances
2314
2315 // (No polyfillable changes from ES5)
2316
2317 // ---------------------------------------
2318 // 21 Text Processing
2319 // ---------------------------------------
2320
2321 var string_regexp_dispatch = (function() {
2322 var faux = {}, secret = Symbol();
2323 faux[Symbol.match] = function() { return secret; };
2324 return ("").match(faux) === secret;
2325 }());
2326
2327 // 21.1 String Objects
2328 // 21.1.1 The String Constructor
2329 // 21.1.1.1 String ( value )
2330 // 21.1.2 Properties of the String Constructor
2331 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2332
2333 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2334 define(
2335 String, 'fromCodePoint',
2336 function fromCodePoint(/*...codePoints*/) {
2337 var codePoints = arguments,
2338 length = codePoints.length,
2339 elements = [],
2340 nextIndex = 0;
2341 while (nextIndex < length) {
2342 var next = codePoints[nextIndex];
2343 var nextCP = Number(next);
2344 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2345 nextCP < 0 || nextCP > 0x10FFFF) {
2346 throw RangeError('Invalid code point ' + nextCP);
2347 }
2348 if (nextCP < 0x10000) {
2349 elements.push(String.fromCharCode(nextCP));
2350 } else {
2351 nextCP -= 0x10000;
2352 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2353 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2354 }
2355 nextIndex += 1;
2356 }
2357 return elements.join('');
2358 });
2359
2360 // 21.1.2.3 String.prototype
2361
2362 // 21.1.2.4 String.raw ( template , ...substitutions )
2363 define(
2364 String, 'raw',
2365 function raw(template /*, ...substitutions*/) {
2366 var substitutions = [].slice.call(arguments, 1);
2367
2368 var cooked = Object(template);
2369 var rawValue = cooked['raw'];
2370 var raw = Object(rawValue);
2371 var len = raw['length'];
2372 var literalSegments = ToLength(len);
2373 if (literalSegments <= 0) return '';
2374 var stringElements = [];
2375 var nextIndex = 0;
2376 while (true) {
2377 var next = raw[nextIndex];
2378 var nextSeg = String(next);
2379 stringElements.push(nextSeg);
2380 if (nextIndex + 1 === literalSegments)
2381 return stringElements.join('');
2382 next = substitutions[nextIndex];
2383 var nextSub = String(next);
2384 stringElements.push(nextSub);
2385 nextIndex = nextIndex + 1;
2386 }
2387 });
2388
2389 // See https://githib.com/inexorabletash/uate for a more useful version.
2390
2391 // 21.1.3 Properties of the String Prototype Object
2392 // 21.1.3.1 String.prototype.charAt ( pos )
2393 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2394
2395 // 21.1.3.3 String.prototype.codePointAt ( pos )
2396 define(
2397 String.prototype, 'codePointAt',
2398 function codePointAt(pos) {
2399 var o = strict(this);
2400 var s = String(o);
2401 var position = ToInteger(pos);
2402 var size = s.length;
2403 if (position < 0 || position >= size) return undefined;
2404 var first = s.charCodeAt(position);
2405 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2406 var second = s.charCodeAt(position + 1);
2407 if (second < 0xDC00 || second > 0xDFFF) return first;
2408 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2409 });
2410
2411 // 21.1.3.4 String.prototype.concat ( ...args )
2412 // 21.1.3.5 String.prototype.constructor
2413
2414 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2415 define(
2416 String.prototype, 'endsWith',
2417 function endsWith(searchString) {
2418 var endPosition = arguments[1];
2419
2420 var o = strict(this);
2421 var s = String(o);
2422 var searchStr = String(searchString);
2423 var len = s.length;
2424 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2425 var end = min(max(pos, 0), len);
2426 var searchLength = searchStr.length;
2427 var start = end - searchLength;
2428 if (start < 0) return false;
2429 if (s.substring(start, start + searchLength) === searchStr) return true;
2430 return false;
2431 });
2432
2433 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2434 define(
2435 String.prototype, 'includes',
2436 function includes(searchString) {
2437 var position = arguments[1];
2438
2439 var o = strict(this);
2440 var s = String(o);
2441 var searchStr = String(searchString);
2442 var pos = ToInteger(position);
2443 var len = s.length;
2444 var start = min(max(pos, 0), len);
2445 return s.indexOf(searchStr, start) !== -1;
2446 });
2447
2448 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2449 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2450 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2451 // 21.1.3.11 String.prototype.match ( regexp )
2452 define(
2453 String.prototype, 'match',
2454 function match(regexp) {
2455 var o = strict(this);
2456 var s = String(o);
2457 if (HasProperty(regexp, $$match)) var rx = regexp;
2458 else rx = new RegExp(regexp);
2459 return rx[$$match](s);
2460 }, !string_regexp_dispatch);
2461
2462 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2463
2464 // Not practical due to table sizes; if needed, pull in:
2465 // https://github.com/walling/unorm/
2466
2467 // 21.1.3.13 String.prototype.repeat ( count )
2468 define(
2469 String.prototype, 'repeat',
2470 function repeat(count) {
2471 var o = strict(this);
2472 var s = String(o);
2473 var n = ToInteger(count);
2474 if (n < 0) throw RangeError();
2475 if (n === Infinity) throw RangeError();
2476 var t = new Array(n + 1).join(s);
2477 return t;
2478 });
2479
2480 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2481 define(
2482 String.prototype, 'replace',
2483 function replace(searchValue, replaceValue) {
2484 var o = strict(this);
2485 if (HasProperty(searchValue, $$replace))
2486 return searchValue[$$replace](o, replaceValue);
2487 return orig_replace.call(o, searchValue, replaceValue);
2488 }, !string_regexp_dispatch);
2489
2490 // 21.1.3.15 String.prototype.search ( regexp )
2491 define(
2492 String.prototype, 'search',
2493 function search(regexp) {
2494 var o = strict(this);
2495 var string = String(o);
2496 if (HasProperty(regexp, $$search)) var rx = regexp;
2497 else rx = new RegExp(regexp);
2498 return rx[$$search](string);
2499 }, !string_regexp_dispatch);
2500
2501 // 21.1.3.16 String.prototype.slice ( start, end )
2502 // 21.1.3.17 String.prototype.split ( separator, limit )
2503 define(
2504 String.prototype, 'split',
2505 function split(separator, limit) {
2506 var o = strict(this);
2507 if (HasProperty(separator, $$split))
2508 return separator[$$split](o, limit);
2509 return orig_split.call(o, separator, limit);
2510 }, !string_regexp_dispatch);
2511
2512 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2513 define(
2514 String.prototype, 'startsWith',
2515 function startsWith(searchString) {
2516 var position = arguments[1];
2517
2518 var o = strict(this);
2519 var s = String(o);
2520 var searchStr = String(searchString);
2521 var pos = ToInteger(position);
2522 var len = s.length;
2523 var start = min(max(pos, 0), len);
2524 var searchLength = searchStr.length;
2525 if (searchLength + start > len) return false;
2526 if (s.substring(start, start + searchLength) === searchStr) return true;
2527 return false;
2528 });
2529
2530 // 21.1.3.19 String.prototype.substring ( start, end )
2531 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2532 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2533 // 21.1.3.22 String.prototype.toLowerCase ( )
2534 // 21.1.3.23 String.prototype.toString ( )
2535 // 21.1.3.24 String.prototype.toUpperCase ( )
2536 // 21.1.3.25 String.prototype.trim ( )
2537 // 21.1.3.26 String.prototype.valueOf ( )
2538
2539 // 21.1.3.27 String.prototype [ @@iterator ]( )
2540 define(
2541 String.prototype, $$iterator,
2542 function entries() {
2543 return CreateStringIterator(this, 'value');
2544 });
2545
2546 // 21.1.4 Properties of String Instances
2547 // 21.1.4.1 length
2548
2549 // 21.1.5 String Iterator Objects
2550 /** @constructor */
2551 function StringIterator() {}
2552
2553 // 21.1.5.1 CreateStringIterator Abstract Operation
2554 function CreateStringIterator(string, kind) {
2555 var s = String(string);
2556 var iterator = new StringIterator;
2557 set_internal(iterator, '[[IteratedString]]', s);
2558 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2559 set_internal(iterator, '[[StringIterationKind]]', kind);
2560 return iterator;
2561 }
2562
2563 // 21.1.5.2 The %StringIteratorPrototype% Object
2564 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2565 StringIterator.prototype = $StringIteratorPrototype$;
2566
2567 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2568 define(
2569 $StringIteratorPrototype$, 'next',
2570 function next() {
2571 var o = ToObject(this);
2572 var s = String(o['[[IteratedString]]']),
2573 index = o['[[StringIteratorNextIndex]]'],
2574 len = s.length;
2575 if (index >= len) {
2576 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2577 return CreateIterResultObject(undefined, true);
2578 }
2579 var cp = s.codePointAt(index);
2580 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2581 return CreateIterResultObject(String.fromCodePoint(cp), false);
2582 });
2583
2584 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2585 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2586
2587 // 21.1.5.3 Properties of String Iterator Instances
2588
2589 // ---------------------------------------
2590 // 21.2 RegExp (Regular Expression) Objects
2591 // ---------------------------------------
2592
2593 // 21.2.1 Patterns
2594 // 21.2.2 Pattern Semantics
2595 // 21.2.2.1 Notation
2596 // 21.2.2.2 Pattern
2597 // 21.2.2.3 Disjunction
2598 // 21.2.2.4 Alternative
2599 // 21.2.2.5 Term
2600 // 21.2.2.6 Assertion
2601 // 21.2.2.7 Quantifier
2602 // 21.2.2.8 Atom
2603 // 21.2.2.9 AtomEscape
2604 // 21.2.2.10 CharacterEscape
2605 // 21.2.2.11 DecimalEscape
2606 // 21.2.2.12 CharacterClassEscape
2607 // 21.2.2.13 CharacterClass
2608 // 21.2.2.14 ClassRanges
2609 // 21.2.2.15 NonemptyClassRanges
2610 // 21.2.2.16 NonemptyClassRangesNoDash
2611 // 21.2.2.17 ClassAtom
2612 // 21.2.2.18 ClassAtomNoDash
2613 // 21.2.2.19 ClassEscape
2614 // 21.2.3 The RegExp Constructor
2615 // 21.2.3.1 RegExp ( pattern, flags )
2616 // 21.2.3.2 new RegExp( ...argumentsList )
2617 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2618 // 21.2.4 Properties of the RegExp Constructor
2619 // 21.2.4.1 RegExp.prototype
2620 // 21.2.5 Properties of the RegExp Prototype Object
2621 // 21.2.5.1 RegExp.prototype.constructor
2622 // 21.2.5.2 RegExp.prototype.exec ( string )
2623
2624 // 21.2.5.3 get RegExp.prototype.flags
2625 if (!('flags' in RegExp.prototype)) {
2626 Object.defineProperty(
2627 RegExp.prototype, 'flags', {
2628 get: function() {
2629 var s = String(this);
2630 return s.substring(s.lastIndexOf('/') + 1);
2631 }
2632 });
2633 }
2634
2635 // 21.2.5.4 get RegExp.prototype.global
2636 // 21.2.5.5 get RegExp.prototype.ignoreCase
2637
2638 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2639 define(RegExp.prototype, $$match, function(string) {
2640 var o = strict(this);
2641 return orig_match.call(string, o);
2642 });
2643
2644 // 21.2.5.7 get RegExp.prototype.multiline
2645
2646 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2647 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2648 var o = strict(this);
2649 return orig_replace.call(string, o, replaceValue);
2650 });
2651
2652 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2653 define(RegExp.prototype, $$search, function(string) {
2654 var o = strict(this);
2655 return orig_search.call(string, o);
2656 });
2657
2658 // 21.2.5.10 get RegExp.prototype.source
2659
2660 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2661 define(RegExp.prototype, $$split, function(string, limit) {
2662 var o = strict(this);
2663 return orig_split.call(string, o, limit);
2664 });
2665
2666 // 21.2.5.12 get RegExp.prototype.sticky
2667 // 21.2.5.13 RegExp.prototype.test( S )
2668 // 21.2.5.14 RegExp.prototype.toString ( )
2669 // 21.2.5.15 get RegExp.prototype.unicode
2670
2671 // 21.2.6 Properties of RegExp Instances
2672 // 21.2.6.1 lastIndex
2673
2674 // (No polyfillable changes from ES5)
2675
2676 // ---------------------------------------
2677 // 22 Indexed Collections
2678 // ---------------------------------------
2679
2680 // ---------------------------------------
2681 // 22.1 Array Objects
2682 // ---------------------------------------
2683
2684 // 22.1.1 The Array Constructor
2685 // 22.1.1.1 Array ( )
2686 // 22.1.1.2 Array (len)
2687 // 22.1.1.3 Array (...items )
2688
2689 // 22.1.2 Properties of the Array Constructor
2690
2691 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2692 define(
2693 Array, 'from',
2694 function from(items) {
2695 var mapfn = arguments[1];
2696 var thisArg = arguments[2];
2697
2698 var c = strict(this);
2699 if (mapfn === undefined) {
2700 var mapping = false;
2701 } else {
2702 if (!IsCallable(mapfn)) throw TypeError();
2703 var t = thisArg;
2704 mapping = true;
2705 }
2706 var usingIterator = GetMethod(items, $$iterator);
2707 if (usingIterator !== undefined) {
2708 if (IsConstructor(c)) {
2709 var a = new c();
2710 } else {
2711 a = new Array(0);
2712 }
2713 var iterator = GetIterator(items, usingIterator);
2714 var k = 0;
2715 while (true) {
2716 var next = IteratorStep(iterator);
2717 if (next === false) {
2718 a.length = k;
2719 return a;
2720 }
2721 var nextValue = IteratorValue(next);
2722 if (mapping)
2723 var mappedValue = mapfn.call(t, nextValue);
2724 else
2725 mappedValue = nextValue;
2726 a[k] = mappedValue;
2727 k += 1;
2728 }
2729 }
2730 var arrayLike = ToObject(items);
2731 var lenValue = arrayLike.length;
2732 var len = ToLength(lenValue);
2733 if (IsConstructor(c)) {
2734 a = new c(len);
2735 } else {
2736 a = new Array(len);
2737 }
2738 k = 0;
2739 while (k < len) {
2740 var kValue = arrayLike[k];
2741 if (mapping)
2742 mappedValue = mapfn.call(t, kValue, k);
2743 else
2744 mappedValue = kValue;
2745 a[k] = mappedValue;
2746 k += 1;
2747 }
2748 a.length = len;
2749 return a;
2750 });
2751
2752 // 22.1.2.2 Array.isArray ( arg )
2753
2754 // 22.1.2.3 Array.of ( ...items )
2755 define(
2756 Array, 'of',
2757 function of() {
2758 var items = arguments;
2759
2760 var lenValue = items.length;
2761 var len = ToUint32(lenValue);
2762 var c = strict(this), a;
2763 if (IsConstructor(c)) {
2764 a = new c(len);
2765 a = ToObject(a);
2766 } else {
2767 a = new Array(len);
2768 }
2769 var k = 0;
2770 while (k < len) {
2771 a[k] = items[k];
2772 k += 1;
2773 }
2774 a.length = len;
2775 return a;
2776 });
2777
2778 // 22.1.2.4 Array.prototype
2779 // 22.1.2.5 get Array [ @@species ]
2780 // 22.1.3 Properties of the Array Prototype Object
2781 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2782 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2783 // 22.1.3.2 Array.prototype.constructor
2784 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2785 define(
2786 Array.prototype, 'copyWithin',
2787 function copyWithin(target, start/*, end*/) {
2788 var end = arguments[2];
2789
2790 var o = ToObject(this);
2791 var lenVal = o.length;
2792 var len = ToLength(lenVal);
2793 len = max(len, 0);
2794 var relativeTarget = ToInteger(target);
2795 var to;
2796 if (relativeTarget < 0)
2797 to = max(len + relativeTarget, 0);
2798 else
2799 to = min(relativeTarget, len);
2800 var relativeStart = ToInteger(start);
2801 var from;
2802 if (relativeStart < 0)
2803 from = max(len + relativeStart, 0);
2804 else
2805 from = min(relativeStart, len);
2806 var relativeEnd;
2807 if (end === undefined)
2808 relativeEnd = len;
2809 else
2810 relativeEnd = ToInteger(end);
2811 var final;
2812 if (relativeEnd < 0)
2813 final = max(len + relativeEnd, 0);
2814 else
2815 final = min(relativeEnd, len);
2816 var count = min(final - from, len - to);
2817 var direction;
2818 if (from < to && to < from + count) {
2819 direction = -1;
2820 from = from + count - 1;
2821 to = to + count - 1;
2822 } else {
2823 direction = 1;
2824 }
2825 while (count > 0) {
2826 var fromKey = String(from);
2827 var toKey = String(to);
2828 var fromPresent = HasProperty(o, fromKey);
2829 if (fromPresent) {
2830 var fromVal = o[fromKey];
2831 o[toKey] = fromVal;
2832 } else {
2833 delete o[toKey];
2834 }
2835 from = from + direction;
2836 to = to + direction;
2837 count = count - 1;
2838 }
2839 return o;
2840 });
2841
2842 // 22.1.3.4 Array.prototype.entries ( )
2843 var nativeArrayIteratorMethods =
2844 ('entries' in Array.prototype && 'next' in [].entries());
2845
2846 define(
2847 Array.prototype, 'entries',
2848 function entries() {
2849 return CreateArrayIterator(this, 'key+value');
2850 }, !nativeArrayIteratorMethods);
2851
2852 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2853
2854 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2855 define(
2856 Array.prototype, 'fill',
2857 function fill(value/*, start, end*/) {
2858 var start = arguments[1],
2859 end = arguments[2];
2860
2861 var o = ToObject(this);
2862 var lenVal = o.length;
2863 var len = ToLength(lenVal);
2864 len = max(len, 0);
2865 var relativeStart = ToInteger(start);
2866 var k;
2867 if (relativeStart < 0)
2868 k = max((len + relativeStart), 0);
2869 else
2870 k = min(relativeStart, len);
2871 var relativeEnd;
2872 if (end === undefined)
2873 relativeEnd = len;
2874 else
2875 relativeEnd = ToInteger(end);
2876 var final;
2877 if (relativeEnd < 0)
2878 final = max((len + relativeEnd), 0);
2879 else
2880 final = min(relativeEnd, len);
2881 while (k < final) {
2882 var pk = String(k);
2883 o[pk] = value;
2884 k += 1;
2885 }
2886 return o;
2887 });
2888
2889 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2890
2891 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2892 define(
2893 Array.prototype, 'find',
2894 function find(predicate) {
2895 var o = ToObject(this);
2896 var lenValue = o.length;
2897 var len = ToInteger(lenValue);
2898 if (!IsCallable(predicate)) throw TypeError();
2899 var t = arguments.length > 1 ? arguments[1] : undefined;
2900 var k = 0;
2901 while (k < len) {
2902 var pk = String(k);
2903 var kPresent = HasProperty(o, pk);
2904 if (kPresent) {
2905 var kValue = o[pk];
2906 var testResult = predicate.call(t, kValue, k, o);
2907 if (Boolean(testResult)) {
2908 return kValue;
2909 }
2910 }
2911 ++k;
2912 }
2913 return undefined;
2914 });
2915
2916 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2917 define(
2918 Array.prototype, 'findIndex',
2919 function findIndex(predicate) {
2920 var o = ToObject(this);
2921 var lenValue = o.length;
2922 var len = ToLength(lenValue);
2923 if (!IsCallable(predicate)) throw TypeError();
2924 var t = arguments.length > 1 ? arguments[1] : undefined;
2925 var k = 0;
2926 while (k < len) {
2927 var pk = String(k);
2928 var kPresent = HasProperty(o, pk);
2929 if (kPresent) {
2930 var kValue = o[pk];
2931 var testResult = predicate.call(t, kValue, k, o);
2932 if (Boolean(testResult)) {
2933 return k;
2934 }
2935 }
2936 ++k;
2937 }
2938 return -1;
2939 });
2940
2941 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2942 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2943 // 22.1.3.12 Array.prototype.join (separator)
2944
2945 // 22.1.3.13 Array.prototype.keys ( )
2946 define(
2947 Array.prototype, 'keys',
2948 function keys() {
2949 return CreateArrayIterator(this, 'key');
2950 }, !nativeArrayIteratorMethods);
2951
2952 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2953 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2954 // 22.1.3.16 Array.prototype.pop ( )
2955 // 22.1.3.17 Array.prototype.push ( ...items )
2956 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2957 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2958 // 22.1.3.20 Array.prototype.reverse ( )
2959 // 22.1.3.21 Array.prototype.shift ( )
2960 // 22.1.3.22 Array.prototype.slice (start, end)
2961 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2962 // 22.1.3.24 Array.prototype.sort (comparefn)
2963 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2964 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2965 // 22.1.3.27 Array.prototype.toString ( )
2966 // 22.1.3.28 Array.prototype.unshift ( ...items )
2967
2968 // 22.1.3.29 Array.prototype.values ( )
2969 define(
2970 Array.prototype, 'values',
2971 function values() {
2972 return CreateArrayIterator(this, 'value');
2973 }, !nativeArrayIteratorMethods);
2974
2975 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2976 define(
2977 Array.prototype, $$iterator,
2978 Array.prototype.values
2979 );
2980
2981 // 22.1.3.31 Array.prototype [ @@unscopables ]
2982 // 22.1.4 Properties of Array Instances
2983 // 22.1.4.1 length
2984
2985 // 22.1.5 Array Iterator Objects
2986 function ArrayIterator() {}
2987
2988 // 22.1.5.1 CreateArrayIterator Abstract Operation
2989 function CreateArrayIterator(array, kind) {
2990 var o = ToObject(array);
2991 var iterator = new ArrayIterator;
2992 set_internal(iterator, '[[IteratedObject]]', o);
2993 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2994 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2995 return iterator;
2996 }
2997
2998 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2999 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
3000 ArrayIterator.prototype = $ArrayIteratorPrototype$;
3001
3002 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
3003 define(
3004 $ArrayIteratorPrototype$, 'next',
3005 function next() {
3006 var o = strict(this);
3007 if (Type(o) !== 'object') throw TypeError();
3008 var a = o['[[IteratedObject]]'],
3009 index = o['[[ArrayIteratorNextIndex]]'],
3010 itemKind = o['[[ArrayIterationKind]]'],
3011 lenValue = a.length,
3012 len = ToUint32(lenValue),
3013 elementKey,
3014 elementValue;
3015 if (itemKind.indexOf('sparse') !== -1) {
3016 var found = false;
3017 while (!found && index < len) {
3018 elementKey = String(index);
3019 found = HasProperty(a, elementKey);
3020 if (!found) {
3021 index += 1;
3022 }
3023 }
3024 }
3025 if (index >= len) {
3026 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
3027 return CreateIterResultObject(undefined, true);
3028 }
3029 elementKey = index;
3030 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
3031 if (itemKind.indexOf('value') !== -1)
3032 elementValue = a[elementKey];
3033 if (itemKind.indexOf('key+value') !== -1)
3034 return CreateIterResultObject([elementKey, elementValue], false);
3035 if (itemKind.indexOf('key') !== -1)
3036 return CreateIterResultObject(elementKey, false);
3037 if (itemKind === 'value')
3038 return CreateIterResultObject(elementValue, false);
3039 throw Error('Internal error');
3040 });
3041
3042 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
3043 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
3044
3045 // 22.1.5.3 Properties of Array Iterator Instances
3046
3047
3048 // ---------------------------------------
3049 // 22.2 TypedArray Objects
3050 // ---------------------------------------
3051
3052 // See typedarray.js for TypedArray polyfill
3053
3054 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
3055 'Int16Array', 'Uint16Array',
3056 'Int32Array', 'Uint32Array',
3057 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
3058 if (!($TypedArrayName$ in global))
3059 return;
3060 var $TypedArray$ = global[$TypedArrayName$];
3061
3062 // 22.2.1 The %TypedArray% Intrinsic Object
3063 // 22.2.1.1 %TypedArray% ( length )
3064 // 22.2.1.2 %TypedArray% ( typedArray )
3065 // 22.2.1.3 %TypedArray% ( object )
3066 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
3067 // 22.2.1.5 %TypedArray% ( all other argument combinations )
3068 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
3069
3070 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
3071 define(
3072 $TypedArray$, 'from',
3073 function from(source) {
3074 var mapfn = arguments[1];
3075 var thisArg = arguments[2];
3076
3077 var c = strict(this);
3078 if (!IsConstructor(c)) throw TypeError();
3079 if (mapfn === undefined) {
3080 var mapping = false;
3081 } else {
3082 if (IsCallable(mapfn)) throw TypeError();
3083 var t = thisArg;
3084 mapping = true;
3085 }
3086 var usingIterator = GetMethod(source, $$iterator);
3087 if (usingIterator !== undefined) {
3088 var iterator = GetIterator(source, usingIterator);
3089 var values = [];
3090 var next = true;
3091 while (next !== false) {
3092 next = IteratorStep(iterator);
3093 if (next !== false) {
3094 var nextValue = IteratorValue(next);
3095 values.push(nextValue);
3096 }
3097 }
3098 var len = values.length;
3099 var newObj = new c(len);
3100 var k = 0;
3101 while (k < len) {
3102 var kValue = values.shift();
3103 if (mapping) {
3104 var mappedValue = mapfn.call(t, kValue);
3105 } else {
3106 mappedValue = kValue;
3107 }
3108 newObj[k] = mappedValue;
3109 ++k;
3110 }
3111 console.assert(values.length === 0);
3112 return newObj;
3113 }
3114 var arrayLike = ToObject(source);
3115 var lenValue = arrayLike.length;
3116 len = ToLength(lenValue);
3117 newObj = new c(len);
3118 k = 0;
3119 while (k < len) {
3120 kValue = arrayLike[k];
3121 if (mapping) {
3122 mappedValue = mapfn.call(t, kValue, k);
3123 } else {
3124 mappedValue = kValue;
3125 }
3126 newObj[k] = mappedValue;
3127 ++k;
3128 }
3129 return newObj;
3130 });
3131
3132 // 22.2.2.2 %TypedArray%.of ( ...items )
3133 define(
3134 $TypedArray$, 'of',
3135 function of() {
3136 var items = arguments;
3137
3138 var len = items.length;
3139 var c = strict(this);
3140 var newObj = new c(len);
3141 var k = 0;
3142 while (k < len) {
3143 newObj[k] = items[k];
3144 ++k;
3145 }
3146 return newObj;
3147 });
3148
3149 // 22.2.2.3 %TypedArray%.prototype
3150 // 22.2.2.4 get %TypedArray% [ @@species ]
3151 // 22.2.3 Properties of the %TypedArrayPrototype% Object
3152 // 22.2.3.1 get %TypedArray%.prototype.buffer
3153 // 22.2.3.2 get %TypedArray%.prototype.byteLength
3154 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
3155 // 22.2.3.4 %TypedArray%.prototype.constructor
3156
3157 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
3158 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
3159
3160 // 22.2.3.6 %TypedArray%.prototype.entries ( )
3161 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
3162
3163 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
3164 define($TypedArray$.prototype, 'every', Array.prototype.every);
3165
3166 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
3167 define(
3168 $TypedArray$.prototype, 'fill',
3169 //Array.prototype.fill // Doesn't work in Safari 7
3170 function fill(value/*, start, end*/) {
3171 var start = arguments[1],
3172 end = arguments[2];
3173
3174 var o = ToObject(this);
3175 var lenVal = o.length;
3176 var len = ToLength(lenVal);
3177 len = max(len, 0);
3178 var relativeStart = ToInteger(start);
3179 var k;
3180 if (relativeStart < 0) k = max((len + relativeStart), 0);
3181 else k = min(relativeStart, len);
3182 var relativeEnd;
3183 if (end === undefined) relativeEnd = len;
3184 else relativeEnd = ToInteger(end);
3185 var final;
3186 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
3187 else final = min(relativeEnd, len);
3188 while (k < final) {
3189 var pk = String(k);
3190 o[pk] = value;
3191 k += 1;
3192 }
3193 return o;
3194 });
3195
3196 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
3197 define(
3198 $TypedArray$.prototype, 'filter',
3199 function filter(callbackfn) {
3200 var thisArg = arguments[1];
3201
3202 var o = ToObject(this);
3203 var lenVal = o.length;
3204 var len = ToLength(lenVal);
3205 if (!IsCallable(callbackfn)) throw TypeError();
3206 var t = thisArg;
3207 var c = o.constructor;
3208 var kept = [];
3209 var k = 0;
3210 var captured = 0;
3211 while (k < len) {
3212 var kValue = o[k];
3213 var selected = callbackfn.call(t, kValue, k, o);
3214 if (selected) {
3215 kept.push(kValue);
3216 ++captured;
3217 }
3218 ++k;
3219 }
3220 var a = new c(captured);
3221 var n = 0;
3222 for (var i = 0; i < kept.length; ++i) {
3223 var e = kept[i];
3224 a[n] = e;
3225 ++n;
3226 }
3227 return a;
3228 });
3229
3230 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3231 define($TypedArray$.prototype, 'find', Array.prototype.find);
3232
3233 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3234 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3235
3236 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3237 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3238
3239 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3240 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3241
3242 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3243 define($TypedArray$.prototype, 'join', Array.prototype.join);
3244
3245 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3246 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3247
3248 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3249 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3250
3251 // 22.2.3.17 get %TypedArray%.prototype.length
3252
3253 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3254 define(
3255 $TypedArray$.prototype, 'map',
3256 function map(callbackfn) {
3257 var thisArg = arguments[1];
3258
3259 var o = ToObject(this);
3260 var lenValue = o.length;
3261 var len = ToLength(lenValue);
3262 if (!IsCallable(callbackfn)) throw TypeError();
3263 var t = thisArg;
3264 var a = undefined;
3265 var c = o.constructor;
3266 if (IsConstructor(c))
3267 a = new c(len);
3268 if (a === undefined)
3269 a = new Array(len);
3270 var k = 0;
3271 while (k < len) {
3272 var kPresent = HasProperty(o, k);
3273 if (kPresent) {
3274 var kValue = o[k];
3275 var mappedValue = callbackfn.call(t, kValue, k, o);
3276 a[k] = mappedValue;
3277 }
3278 ++k;
3279 }
3280 return a;
3281 });
3282
3283 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3284 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3285
3286 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3287 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3288
3289 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3290 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3291
3292 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3293 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3294 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3295
3296 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3297 define(
3298 $TypedArray$.prototype, 'slice',
3299 function slice(start, end) {
3300 var o = ToObject(this);
3301 var lenVal = o.length;
3302 var len = ToLength(lenVal);
3303 var relativeStart = ToInteger(start);
3304 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3305 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3306 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3307 var count = final - k;
3308 var c = o.constructor;
3309 if (IsConstructor(c)) {
3310 var a = new c(count);
3311 } else {
3312 throw TypeError();
3313 }
3314 var n = 0;
3315 while (k < final) {
3316 var kValue = o[k];
3317 a[n] = kValue;
3318 ++k;
3319 ++n;
3320 }
3321 return a;
3322 });
3323
3324 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3325 define($TypedArray$.prototype, 'some', Array.prototype.some);
3326
3327 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3328 define(
3329 $TypedArray$.prototype, 'sort',
3330 function sort() {
3331 var comparefn = arguments[0];
3332
3333 function sortCompare(x, y) {
3334 console.assert(Type(x) === 'number' && Type(y) === 'number');
3335 if (x !== x && y !== y) return +0;
3336 if (x !== x) return 1;
3337 if (y !== y) return -1;
3338 if (comparefn !== undefined) {
3339 return comparefn(x, y);
3340 }
3341 if (x < y) return -1;
3342 if (x > y) return 1;
3343 return +0;
3344 }
3345 return Array.prototype.sort.call(this, sortCompare);
3346 });
3347
3348 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3349 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3350 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3351
3352 // 22.2.3.29 %TypedArray%.prototype.values ( )
3353 define($TypedArray$.prototype, 'values', Array.prototype.values);
3354
3355 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3356 define(
3357 $TypedArray$.prototype, $$iterator,
3358 $TypedArray$.prototype.values
3359 );
3360
3361 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3362 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3363
3364 // 22.2.4 The TypedArray Constructors
3365 // 22.2.4.1TypedArray( ... argumentsList)
3366 // 22.2.5 Properties of the TypedArray Constructors
3367 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3368 // 22.2.5.2 TypedArray.prototype
3369 // 22.2.6 Properties of TypedArray Prototype Objects
3370 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3371 // 22.2.6.2 TypedArray.prototype.constructor
3372 // 22.2.7 Properties of TypedArray Instances
3373 });
3374
3375 // ---------------------------------------
3376 // 23 Keyed Collection
3377 // ---------------------------------------
3378
3379 // ---------------------------------------
3380 // 23.1 Map Objects
3381 // ---------------------------------------
3382
3383 (function() {
3384 // 23.1.1 The Map Constructor
3385
3386 // 23.1.1.1 Map ( [ iterable ] )
3387 /** @constructor */
3388 function Map(/*iterable*/) {
3389 var map = strict(this);
3390 var iterable = arguments[0];
3391
3392 if (Type(map) !== 'object') throw TypeError();
3393 if ('[[MapData]]' in map) throw TypeError();
3394
3395 if (iterable !== undefined) {
3396 var adder = map['set'];
3397 if (!IsCallable(adder)) throw TypeError();
3398 var iter = GetIterator(ToObject(iterable));
3399 }
3400 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3401 if (iter === undefined) return map;
3402 while (true) {
3403 var next = IteratorStep(iter);
3404 if (next === false)
3405 return map;
3406 var nextItem = IteratorValue(next);
3407 if (Type(nextItem) !== 'object') throw TypeError();
3408 var k = nextItem[0];
3409 var v = nextItem[1];
3410 adder.call(map, k, v);
3411 }
3412
3413 return map;
3414 }
3415
3416 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3417 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3418 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3419 (new global.Map([['a', 1]]).size !== 1))
3420 global.Map = Map;
3421
3422
3423 function MapDataIndexOf(mapData, key) {
3424 var i;
3425 if (key === key) return mapData.keys.indexOf(key);
3426 // Slow case for NaN
3427 for (i = 0; i < mapData.keys.length; i += 1)
3428 if (SameValueZero(mapData.keys[i], key)) return i;
3429 return -1;
3430 }
3431
3432 // 23.1.1.2 new Map ( ... argumentsList )
3433 // 23.1.2 Properties of the Map Constructor
3434 // 23.1.2.1 Map.prototype
3435 var $MapPrototype$ = {};
3436 Map.prototype = $MapPrototype$;
3437
3438 // 23.1.2.2 get Map [ @@species ]
3439
3440 // 23.1.3 Properties of the Map Prototype Object
3441 // 23.1.3.1 Map.prototype.clear ()
3442 define(
3443 Map.prototype, 'clear',
3444 function clear() {
3445 var m = strict(this);
3446 if (Type(m) !== 'object') throw TypeError();
3447 if (!('[[MapData]]' in m)) throw TypeError();
3448 if (m['[[MapData]]'] === undefined) throw TypeError();
3449 var entries = m['[[MapData]]'];
3450 entries.keys.length = 0;
3451 entries.values.length = 0;
3452 return undefined;
3453 });
3454
3455 // 23.1.3.2 Map.prototype.constructor
3456
3457 // 23.1.3.3 Map.prototype.delete ( key )
3458 define(
3459 Map.prototype, 'delete',
3460 function delete_(key) {
3461 var m = strict(this);
3462 if (Type(m) !== 'object') throw TypeError();
3463 if (!('[[MapData]]' in m)) throw TypeError();
3464 if (m['[[MapData]]'] === undefined) throw TypeError();
3465 var entries = m['[[MapData]]'];
3466 var i = MapDataIndexOf(entries, key);
3467 if (i < 0) return false;
3468 entries.keys[i] = empty;
3469 entries.values[i] = empty;
3470 return true;
3471 });
3472
3473 // 23.1.3.4 Map.prototype.entries ( )
3474 define(
3475 Map.prototype, 'entries',
3476 function entries() {
3477 var m = strict(this);
3478 if (Type(m) !== 'object') throw TypeError();
3479 return CreateMapIterator(m, 'key+value');
3480 });
3481
3482 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3483 define(
3484 Map.prototype, 'forEach',
3485 function forEach(callbackfn /*, thisArg*/) {
3486 var thisArg = arguments[1];
3487
3488 var m = strict(this);
3489 if (Type(m) !== 'object') throw TypeError();
3490 if (!('[[MapData]]' in m)) throw TypeError();
3491 if (m['[[MapData]]'] === undefined) throw TypeError();
3492 var entries = m['[[MapData]]'];
3493
3494 if (!IsCallable(callbackfn)) {
3495 throw TypeError('First argument to forEach is not callable.');
3496 }
3497 for (var i = 0; i < entries.keys.length; ++i) {
3498 if (entries.keys[i] !== empty) {
3499 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3500 }
3501 }
3502 return undefined;
3503 });
3504
3505 // 23.1.3.6 Map.prototype.get ( key )
3506 define(
3507 Map.prototype, 'get',
3508 function get(key) {
3509 var m = strict(this);
3510 if (Type(m) !== 'object') throw TypeError();
3511 if (!('[[MapData]]' in m)) throw TypeError();
3512 if (m['[[MapData]]'] === undefined) throw TypeError();
3513 var entries = m['[[MapData]]'];
3514 var i = MapDataIndexOf(entries, key);
3515 if (i >= 0) return entries.values[i];
3516 return undefined;
3517 });
3518
3519 // 23.1.3.7 Map.prototype.has ( key )
3520 define(
3521 Map.prototype, 'has',
3522 function has(key) {
3523 var m = strict(this);
3524 if (Type(m) !== 'object') throw TypeError();
3525 if (!('[[MapData]]' in m)) throw TypeError();
3526 if (m['[[MapData]]'] === undefined) throw TypeError();
3527 var entries = m['[[MapData]]'];
3528 if (MapDataIndexOf(entries, key) >= 0) return true;
3529 return false;
3530 });
3531
3532 // 23.1.3.8 Map.prototype.keys ( )
3533 define(
3534 Map.prototype, 'keys',
3535 function keys() {
3536 var m = strict(this);
3537 if (Type(m) !== 'object') throw TypeError();
3538 return CreateMapIterator(m, 'key');
3539 });
3540
3541 // 23.1.3.9 Map.prototype.set ( key , value )
3542 define(
3543 Map.prototype, 'set',
3544 function set(key, value) {
3545 var m = strict(this);
3546 if (Type(m) !== 'object') throw TypeError();
3547 if (!('[[MapData]]' in m)) throw TypeError();
3548 if (m['[[MapData]]'] === undefined) throw TypeError();
3549 var entries = m['[[MapData]]'];
3550 var i = MapDataIndexOf(entries, key);
3551 if (i < 0) i = entries.keys.length;
3552 if (SameValue(key, -0)) key = 0;
3553 entries.keys[i] = key;
3554 entries.values[i] = value;
3555 return m;
3556 });
3557
3558 // 23.1.3.10 get Map.prototype.size
3559 Object.defineProperty(
3560 Map.prototype, 'size', {
3561 get: function() {
3562 var m = strict(this);
3563 if (Type(m) !== 'object') throw TypeError();
3564 if (!('[[MapData]]' in m)) throw TypeError();
3565 if (m['[[MapData]]'] === undefined) throw TypeError();
3566 var entries = m['[[MapData]]'];
3567 var count = 0;
3568 for (var i = 0; i < entries.keys.length; ++i) {
3569 if (entries.keys[i] !== empty)
3570 count = count + 1;
3571 }
3572 return count;
3573 }
3574 });
3575
3576 // 23.1.3.11 Map.prototype.values ( )
3577 define(
3578 Map.prototype, 'values',
3579 function values() {
3580 var m = strict(this);
3581 if (Type(m) !== 'object') throw TypeError();
3582 return CreateMapIterator(m, 'value');
3583 });
3584
3585 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3586 define(
3587 Map.prototype, $$iterator,
3588 function() {
3589 var m = strict(this);
3590 if (Type(m) !== 'object') throw TypeError();
3591 return CreateMapIterator(m, 'key+value');
3592 });
3593
3594 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3595 define(global.Map.prototype, $$toStringTag, 'Map');
3596
3597 // 23.1.4 Properties of Map Instances
3598 // 23.1.5 Map Iterator Objects
3599
3600 /** @constructor */
3601 function MapIterator() {}
3602
3603 // 23.1.5.1 CreateMapIterator Abstract Operation
3604 function CreateMapIterator(map, kind) {
3605 if (Type(map) !== 'object') throw TypeError();
3606 if (!('[[MapData]]' in map)) throw TypeError();
3607 if (map['[[MapData]]'] === undefined) throw TypeError();
3608 var iterator = new MapIterator;
3609 set_internal(iterator, '[[Map]]', map);
3610 set_internal(iterator, '[[MapNextIndex]]', 0);
3611 set_internal(iterator, '[[MapIterationKind]]', kind);
3612 return iterator;
3613 }
3614
3615 // 23.1.5.2 The %MapIteratorPrototype% Object
3616 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3617 MapIterator.prototype = $MapIteratorPrototype$;
3618
3619 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3620 define(
3621 $MapIteratorPrototype$, 'next',
3622 function next() {
3623 var o = strict(this);
3624 if (Type(o) !== 'object') throw TypeError();
3625 var m = o['[[Map]]'],
3626 index = o['[[MapNextIndex]]'],
3627 itemKind = o['[[MapIterationKind]]'],
3628 entries = m['[[MapData]]'];
3629 while (index < entries.keys.length) {
3630 var e = {key: entries.keys[index], value: entries.values[index]};
3631 index = index += 1;
3632 set_internal(o, '[[MapNextIndex]]', index);
3633 if (e.key !== empty) {
3634 if (itemKind === 'key') {
3635 return CreateIterResultObject(e.key, false);
3636 } else if (itemKind === 'value') {
3637 return CreateIterResultObject(e.value, false);
3638 } else {
3639 return CreateIterResultObject([e.key, e.value], false);
3640 }
3641 }
3642 }
3643 return CreateIterResultObject(undefined, true);
3644 });
3645
3646 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3647 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3648
3649 // 23.1.5.3 Properties of Map Iterator Instances
3650 }());
3651
3652 // ---------------------------------------
3653 // 23.2 Set Objects
3654 // ---------------------------------------
3655
3656 (function() {
3657 // 23.2.1 The Set Constructor
3658 // 23.2.1.1 Set ( [ iterable ] )
3659
3660 /** @constructor */
3661 function Set(/*iterable*/) {
3662 var set = strict(this);
3663 var iterable = arguments[0];
3664
3665 if (Type(set) !== 'object') throw TypeError();
3666 if ('[[SetData]]' in set) throw TypeError();
3667
3668 if (iterable !== undefined) {
3669 var adder = set['add'];
3670 if (!IsCallable(adder)) throw TypeError();
3671 var iter = GetIterator(ToObject(iterable));
3672 }
3673 set_internal(set, '[[SetData]]', []);
3674 if (iter === undefined) return set;
3675 while (true) {
3676 var next = IteratorStep(iter);
3677 if (next === false)
3678 return set;
3679 var nextValue = IteratorValue(next);
3680 adder.call(set, nextValue);
3681 }
3682
3683 return set;
3684 }
3685
3686 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3687 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3688 (new global.Set([1]).size !== 1))
3689 global.Set = Set;
3690
3691 function SetDataIndexOf(setData, key) {
3692 var i;
3693 if (key === key)
3694 return setData.indexOf(key);
3695 // Slow case for NaN
3696 for (i = 0; i < setData.length; i += 1)
3697 if (SameValueZero(setData[i], key)) return i;
3698 return -1;
3699 }
3700
3701 // 23.2.1.2 new Set ( ...argumentsList )
3702 // 23.2.2 Properties of the Set Constructor
3703
3704 // 23.2.2.1 Set.prototype
3705 var $SetPrototype$ = {};
3706 Set.prototype = $SetPrototype$;
3707
3708 // 23.2.2.2 get Set [ @@species ]
3709 // 23.2.3 Properties of the Set Prototype Object
3710
3711 // 23.2.3.1 Set.prototype.add (value )
3712 define(
3713 Set.prototype, 'add',
3714 function add(value) {
3715 var s = strict(this);
3716 if (Type(s) !== 'object') throw TypeError();
3717 if (!('[[SetData]]' in s)) throw TypeError();
3718 if (s['[[SetData]]'] === undefined) throw TypeError();
3719 if (SameValue(value, -0)) value = 0;
3720 var entries = s['[[SetData]]'];
3721 var i = SetDataIndexOf(entries, value);
3722 if (i < 0) i = s['[[SetData]]'].length;
3723 s['[[SetData]]'][i] = value;
3724
3725 return s;
3726 });
3727
3728 // 23.2.3.2 Set.prototype.clear ()
3729 define(
3730 Set.prototype, 'clear',
3731 function clear() {
3732 var s = strict(this);
3733 if (Type(s) !== 'object') throw TypeError();
3734 if (!('[[SetData]]' in s)) throw TypeError();
3735 if (s['[[SetData]]'] === undefined) throw TypeError();
3736 var entries = s['[[SetData]]'];
3737 entries.length = 0;
3738 return undefined;
3739 });
3740
3741 // 23.2.3.3 Set.prototype.constructor
3742 // 23.2.3.4 Set.prototype.delete ( value )
3743 define(
3744 Set.prototype, 'delete',
3745 function delete_(value) {
3746 var s = strict(this);
3747 if (Type(s) !== 'object') throw TypeError();
3748 if (!('[[SetData]]' in s)) throw TypeError();
3749 if (s['[[SetData]]'] === undefined) throw TypeError();
3750 var entries = s['[[SetData]]'];
3751 var i = SetDataIndexOf(entries, value);
3752 if (i < 0) return false;
3753 entries[i] = empty;
3754 return true;
3755 });
3756
3757 // 23.2.3.5 Set.prototype.entries ( )
3758 define(
3759 Set.prototype, 'entries',
3760 function entries() {
3761 var s = strict(this);
3762 if (Type(s) !== 'object') throw TypeError();
3763 return CreateSetIterator(s, 'key+value');
3764 });
3765
3766 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3767 define(
3768 Set.prototype, 'forEach',
3769 function forEach(callbackfn/*, thisArg*/) {
3770 var thisArg = arguments[1];
3771
3772 var s = strict(this);
3773 if (Type(s) !== 'object') throw TypeError();
3774 if (!('[[SetData]]' in s)) throw TypeError();
3775 if (s['[[SetData]]'] === undefined) throw TypeError();
3776 var entries = s['[[SetData]]'];
3777
3778 if (!IsCallable(callbackfn)) {
3779 throw TypeError('First argument to forEach is not callable.');
3780 }
3781 for (var i = 0; i < entries.length; ++i) {
3782 if (entries[i] !== empty) {
3783 callbackfn.call(thisArg, entries[i], entries[i], s);
3784 }
3785 }
3786 });
3787
3788 // 23.2.3.7 Set.prototype.has ( value )
3789 define(
3790 Set.prototype, 'has',
3791 function has(key) {
3792 var s = strict(this);
3793 if (Type(s) !== 'object') throw TypeError();
3794 if (!('[[SetData]]' in s)) throw TypeError();
3795 if (s['[[SetData]]'] === undefined) throw TypeError();
3796 var entries = s['[[SetData]]'];
3797 return SetDataIndexOf(entries, key) !== -1;
3798 });
3799
3800 // 23.2.3.8 Set.prototype.keys ( )
3801 // See Set.prototype.values
3802
3803 // 23.2.3.9 get Set.prototype.size
3804 Object.defineProperty(
3805 Set.prototype, 'size', {
3806 get: function() {
3807 var s = strict(this);
3808 if (Type(s) !== 'object') throw TypeError();
3809 if (!('[[SetData]]' in s)) throw TypeError();
3810 if (s['[[SetData]]'] === undefined) throw TypeError();
3811 var entries = s['[[SetData]]'];
3812 var count = 0;
3813 for (var i = 0; i < entries.length; ++i) {
3814 if (entries[i] !== empty)
3815 count = count + 1;
3816 }
3817 return count;
3818 }
3819 });
3820
3821 // 23.2.3.10 Set.prototype.values ( )
3822 define(
3823 Set.prototype, 'values',
3824 function values() {
3825 var s = strict(this);
3826 if (Type(s) !== 'object') throw TypeError();
3827 return CreateSetIterator(s, 'value');
3828 });
3829 // NOTE: function name is still 'values':
3830 Set.prototype.keys = Set.prototype.values;
3831
3832 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3833 define(
3834 Set.prototype, $$iterator,
3835 function() {
3836 var s = strict(this);
3837 if (Type(s) !== 'object') throw TypeError();
3838 return CreateSetIterator(s);
3839 });
3840
3841 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3842 define(global.Set.prototype, $$toStringTag, 'Set');
3843
3844 // 23.2.4 Properties of Set Instances
3845 // 23.2.5 Set Iterator Objects
3846 /** @constructor */
3847 function SetIterator() {}
3848
3849 // 23.2.5.1 CreateSetIterator Abstract Operation
3850 function CreateSetIterator(set, kind) {
3851 if (Type(set) !== 'object') throw TypeError();
3852 if (!('[[SetData]]' in set)) throw TypeError();
3853 if (set['[[SetData]]'] === undefined) throw TypeError();
3854 var iterator = new SetIterator;
3855 set_internal(iterator, '[[IteratedSet]]', set);
3856 set_internal(iterator, '[[SetNextIndex]]', 0);
3857 set_internal(iterator, '[[SetIterationKind]]', kind);
3858 return iterator;
3859 }
3860
3861 // 23.2.5.2 The %SetIteratorPrototype% Object
3862 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3863 SetIterator.prototype = $SetIteratorPrototype$;
3864
3865 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3866 define(
3867 $SetIteratorPrototype$, 'next',
3868 function next() {
3869 var o = strict(this);
3870 if (Type(o) !== 'object') throw TypeError();
3871 var s = o['[[IteratedSet]]'],
3872 index = o['[[SetNextIndex]]'],
3873 itemKind = o['[[SetIterationKind]]'],
3874 entries = s['[[SetData]]'];
3875 while (index < entries.length) {
3876 var e = entries[index];
3877 index = index += 1;
3878 set_internal(o, '[[SetNextIndex]]', index);
3879 if (e !== empty) {
3880 if (itemKind === 'key+value')
3881 return CreateIterResultObject([e, e], false);
3882 return CreateIterResultObject(e, false);
3883 }
3884 }
3885 return CreateIterResultObject(undefined, true);
3886 });
3887
3888 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3889 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3890
3891 // 23.2.5.3 Properties of Set Iterator Instances
3892
3893 }());
3894
3895 // ---------------------------------------
3896 // 23.3 WeakMap Objects
3897 // ---------------------------------------
3898
3899 (function() {
3900 // 23.3.1 The WeakMap Constructor
3901 // 23.3.1.1 WeakMap ( [ iterable ] )
3902 /** @constructor */
3903 function WeakMap(/*iterable*/) {
3904 var map = strict(this);
3905 var iterable = arguments[0];
3906
3907 if (Type(map) !== 'object') throw TypeError();
3908 if ('[[WeakMapData]]' in map) throw TypeError();
3909
3910 if (iterable !== undefined) {
3911 var adder = map['set'];
3912 if (!IsCallable(adder)) throw TypeError();
3913 var iter = GetIterator(ToObject(iterable));
3914 }
3915 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3916 if (iter === undefined) return map;
3917 while (true) {
3918 var next = IteratorStep(iter);
3919 if (next === false)
3920 return map;
3921 var nextValue = IteratorValue(next);
3922 if (Type(nextValue) !== 'object') throw TypeError();
3923 var k = nextValue[0];
3924 var v = nextValue[1];
3925 adder.call(map, k, v);
3926 }
3927
3928 return map;
3929 }
3930
3931 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3932 global.WeakMap = WeakMap;
3933
3934 // 23.3.2 Properties of the WeakMap Constructor
3935 // 23.3.2.1 WeakMap.prototype
3936 var $WeakMapPrototype$ = {};
3937 WeakMap.prototype = $WeakMapPrototype$;
3938
3939
3940
3941 // 23.3.2.2 WeakMap[ @@create ] ( )
3942 // 23.3.3 Properties of the WeakMap Prototype Object
3943
3944 // 23.3.3.1 WeakMap.prototype.constructor
3945
3946 // 23.3.3.2 WeakMap.prototype.delete ( key )
3947 define(
3948 WeakMap.prototype, 'delete',
3949 function delete_(key) {
3950 var M = strict(this);
3951 if (Type(M) !== 'object') throw TypeError();
3952 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3953 if (Type(key) !== 'object') throw TypeError('Expected object');
3954 return M['[[WeakMapData]]'].remove(key);
3955 });
3956
3957 // 23.3.3.3 WeakMap.prototype.get ( key )
3958 define(
3959 WeakMap.prototype, 'get',
3960 function get(key, defaultValue) {
3961 var M = strict(this);
3962 if (Type(M) !== 'object') throw TypeError();
3963 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3964 if (Type(key) !== 'object') throw TypeError('Expected object');
3965 return M['[[WeakMapData]]'].get(key, defaultValue);
3966 });
3967
3968 // 23.3.3.4 WeakMap.prototype.has ( key )
3969 define(
3970 WeakMap.prototype, 'has',
3971 function has(key) {
3972 var M = strict(this);
3973 if (Type(M) !== 'object') throw TypeError();
3974 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3975 if (Type(key) !== 'object') throw TypeError('Expected object');
3976 return M['[[WeakMapData]]'].has(key);
3977 });
3978
3979 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3980 define(
3981 WeakMap.prototype, 'set',
3982 function set(key, value) {
3983 var M = strict(this);
3984 if (Type(M) !== 'object') throw TypeError();
3985 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3986 if (Type(key) !== 'object') throw TypeError('Expected object');
3987 M['[[WeakMapData]]'].set(key, value);
3988 return M;
3989 });
3990
3991 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3992 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3993
3994 // 23.3.4 Properties of WeakMap Instances
3995
3996 // Polyfills for incomplete native implementations:
3997 (function() {
3998 var wm = new global.WeakMap();
3999 var orig = global.WeakMap.prototype.set;
4000 define(global.WeakMap.prototype, 'set', function set() {
4001 orig.apply(this, arguments);
4002 return this;
4003 }, wm.set({}, 0) !== wm);
4004 }());
4005 }());
4006
4007 // ---------------------------------------
4008 // 23.4 WeakSet Objects
4009 // ---------------------------------------
4010
4011 (function() {
4012 // 23.4.1 The WeakSet Constructor
4013 // 23.4.1.1 WeakSet ( [ iterable ] )
4014 /** @constructor */
4015 function WeakSet(/*iterable*/) {
4016 var set = strict(this);
4017 var iterable = arguments[0];
4018
4019 if (Type(set) !== 'object') throw TypeError();
4020 if ('[[WeakSetData]]' in set) throw TypeError();
4021
4022 if (iterable !== undefined) {
4023 var adder = set['add'];
4024 if (!IsCallable(adder)) throw TypeError();
4025 var iter = GetIterator(ToObject(iterable));
4026 }
4027 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
4028 if (iter === undefined) return set;
4029 while (true) {
4030 var next = IteratorStep(iter);
4031 if (next === false)
4032 return set;
4033 var nextValue = IteratorValue(next);
4034 adder.call(set, nextValue);
4035 }
4036
4037 return set;
4038 }
4039
4040 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4041 global.WeakSet = WeakSet;
4042
4043 // 23.4.2 Properties of the WeakSet Constructor
4044 // 23.4.2.1 WeakSet.prototype
4045 var $WeakSetPrototype$ = {};
4046 WeakSet.prototype = $WeakSetPrototype$;
4047
4048 // 23.4.3 Properties of the WeakSet Prototype Object
4049 // 23.4.3.1 WeakSet.prototype.add (value )
4050 define(
4051 WeakSet.prototype, 'add',
4052 function add(value) {
4053 var S = strict(this);
4054 if (Type(S) !== 'object') throw TypeError();
4055 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
4056 if (Type(value) !== 'object') throw TypeError('Expected object');
4057 S['[[WeakSetData]]'].set(value, true);
4058 return S;
4059 });
4060
4061 // 23.4.3.2 WeakSet.prototype.constructor
4062 // 23.4.3.3 WeakSet.prototype.delete ( value )
4063 define(
4064 WeakSet.prototype, 'delete',
4065 function delete_(value) {
4066 var S = strict(this);
4067 if (Type(S) !== 'object') throw TypeError();
4068 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
4069 if (Type(value) !== 'object') throw TypeError('Expected object');
4070 return S['[[WeakSetData]]'].remove(value);
4071 });
4072
4073 // 23.4.3.4 WeakSet.prototype.has ( value )
4074 define(
4075 WeakSet.prototype, 'has',
4076 function has(key) {
4077 var S = strict(this);
4078 if (Type(S) !== 'object') throw TypeError();
4079 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
4080 if (Type(key) !== 'object') throw TypeError('Expected object');
4081 return S['[[WeakSetData]]'].has(key);
4082 });
4083
4084 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
4085 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
4086
4087 // 23.4.4 Properties of WeakSet Instances
4088
4089 // Polyfills for incomplete native implementations:
4090 (function() {
4091 var ws = new global.WeakSet();
4092 var orig = global.WeakSet.prototype.add;
4093 define(global.WeakSet.prototype, 'add', function add() {
4094 orig.apply(this, arguments);
4095 return this;
4096 }, ws.add({}) !== ws);
4097 }());
4098 }());
4099
4100 // ---------------------------------------
4101 // 24 Structured Data
4102 // ---------------------------------------
4103
4104 // ---------------------------------------
4105 // 24.1 ArrayBuffer Objects
4106 // ---------------------------------------
4107
4108 // See typedarray.js for TypedArray polyfill
4109
4110 (function() {
4111 if (!('ArrayBuffer' in global))
4112 return;
4113
4114 // 24.1.1 Abstract Operations For ArrayBuffer Objects
4115 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
4116 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
4117 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
4118 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
4119 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
4120 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
4121 // 24.1.2 The ArrayBuffer Constructor
4122 // 24.1.2.1 ArrayBuffer( length )
4123 // 24.1.3 Properties of the ArrayBuffer Constructor
4124
4125 // 24.1.3.1 ArrayBuffer.isView ( arg )
4126 define(
4127 ArrayBuffer, 'isView',
4128 function isView(arg) {
4129 if (Type(arg) !== 'object') return false;
4130 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
4131 return false;
4132 });
4133
4134 // 24.1.3.2 ArrayBuffer.prototype
4135 // 24.1.3.3 get ArrayBuffer [ @@species ]
4136 // 24.1.4 Properties of the ArrayBuffer Prototype Object
4137 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
4138 // 24.1.4.2 ArrayBuffer.prototype.constructor
4139 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
4140
4141 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
4142 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
4143
4144 // 24.1.5 Properties of the ArrayBuffer Instances
4145 }());
4146
4147 // ---------------------------------------
4148 // 24.2 DataView Objects
4149 // ---------------------------------------
4150
4151 // See typedarray.js for TypedArray polyfill
4152
4153 (function() {
4154 if (!('DataView' in global))
4155 return;
4156
4157 // 24.2.1 Abstract Operations For DataView Objects
4158 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
4159 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
4160 // 24.2.2 The DataView Constructor
4161 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
4162 // 24.2.3 Properties of the DataView Constructor
4163 // 24.2.3.1 DataView.prototype
4164 // 24.2.4 Properties of the DataView Prototype Object
4165 // 24.2.4.1 get DataView.prototype.buffer
4166 // 24.2.4.2 get DataView.prototype.byteLength
4167 // 24.2.4.3 get DataView.prototype.byteOffset
4168 // 24.2.4.4 DataView.prototype.constructor
4169 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
4170 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
4171 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
4172 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
4173 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
4174 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
4175 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
4176 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
4177 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
4178 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
4179 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
4180 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
4181 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
4182 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
4183 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
4184 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
4185
4186 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
4187 define(DataView.prototype, $$toStringTag, 'DataView');
4188
4189 // 24.2.5 Properties of DataView Instances
4190 }());
4191
4192 // ---------------------------------------
4193 // 24.3 The JSON Object
4194 // ---------------------------------------
4195
4196 // 24.3.1 JSON.parse ( text [ , reviver ] )
4197 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
4198 // 24.3.3 JSON [ @@toStringTag ]
4199 define(JSON, $$toStringTag, 'JSON');
4200
4201 // ---------------------------------------
4202 // 25.1 Iteration
4203 // ---------------------------------------
4204
4205 // 25.1.1 Common Iteration Interfaces
4206 // 25.1.1.1 The Iterable Interface
4207 // 25.1.1.2 The Iterator Interface
4208 // 25.1.1.3 The IteratorResult Interface
4209
4210 // 25.1.2 The %IteratorPrototype% Object
4211 // Defined earlier, so other prototypes can reference it.
4212 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
4213 define($IteratorPrototype$, $$iterator, function() {
4214 return this;
4215 });
4216
4217
4218 // ---------------------------------------
4219 // 25.4 Promise Objects
4220 // ---------------------------------------
4221
4222 (function() {
4223 // 25.4 Promise Objects
4224
4225 // 25.4.1 Promise Abstract Operations
4226
4227 // 25.4.1.1 PromiseCapability Records
4228 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4229
4230 function IfAbruptRejectPromise(value, capability) {
4231 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4232 return capability['[[Promise]]'];
4233 }
4234
4235 // 25.4.1.2 PromiseReaction Records
4236
4237 // 25.4.1.3 CreateResolvingFunctions ( promise )
4238
4239 function CreateResolvingFunctions(promise) {
4240 var alreadyResolved = {'[[value]]': false};
4241 var resolve = PromiseResolveFunction();
4242 set_internal(resolve, '[[Promise]]', promise);
4243 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4244 var reject = PromiseRejectFunction();
4245 set_internal(reject, '[[Promise]]', promise);
4246 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4247 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4248 }
4249
4250 // 25.4.1.3.1 Promise Reject Functions
4251
4252 function PromiseRejectFunction() {
4253 var F = function(reason) {
4254 console.assert(Type(F['[[Promise]]']) === 'object');
4255 var promise = F['[[Promise]]'];
4256 var alreadyResolved = F['[[AlreadyResolved]]'];
4257 if (alreadyResolved['[[value]]']) return undefined;
4258 set_internal(alreadyResolved, '[[value]]', true);
4259 return RejectPromise(promise, reason);
4260 };
4261 return F;
4262 }
4263
4264 // 25.4.1.3.2 Promise Resolve Functions
4265
4266 function PromiseResolveFunction() {
4267 var F = function(resolution) {
4268 console.assert(Type(F['[[Promise]]']) === 'object');
4269 var promise = F['[[Promise]]'];
4270 var alreadyResolved = F['[[AlreadyResolved]]'];
4271 if (alreadyResolved['[[value]]']) return undefined;
4272 set_internal(alreadyResolved, '[[value]]', true);
4273
4274 if (SameValue(resolution, promise)) {
4275 var selfResolutionError = TypeError();
4276 return RejectPromise(promise, selfResolutionError);
4277 }
4278 if (Type(resolution) !== 'object')
4279 return FulfillPromise(promise, resolution);
4280 try {
4281 var then = resolution['then'];
4282 } catch(then) {
4283 return RejectPromise(promise, then);
4284 }
4285 if (!IsCallable(then))
4286 return FulfillPromise(promise, resolution);
4287 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4288 return undefined;
4289 };
4290 return F;
4291 }
4292
4293 // 25.4.1.4 FulfillPromise ( promise, value )
4294
4295 function FulfillPromise(promise, value) {
4296 console.assert(promise['[[PromiseState]]'] === 'pending');
4297 var reactions = promise['[[PromiseFulfillReactions]]'];
4298 set_internal(promise, '[[PromiseResult]]', value);
4299 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4300 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4301 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4302 return TriggerPromiseReactions(reactions, value);
4303 }
4304
4305 // 25.4.1.5 NewPromiseCapability ( C )
4306
4307 function NewPromiseCapability(c) {
4308 // To keep Promise hermetic, this doesn't look much like the spec.
4309 return CreatePromiseCapabilityRecord(undefined, c);
4310 }
4311
4312 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4313
4314 function CreatePromiseCapabilityRecord(promise, constructor) {
4315 // To keep Promise hermetic, this doesn't look much like the spec.
4316 console.assert(IsConstructor(constructor));
4317 var promiseCapability = {};
4318 set_internal(promiseCapability, '[[Promise]]', promise);
4319 set_internal(promiseCapability, '[[Resolve]]', undefined);
4320 set_internal(promiseCapability, '[[Reject]]', undefined);
4321 var executor = GetCapabilitiesExecutor();
4322 set_internal(executor, '[[Capability]]', promiseCapability);
4323
4324 // NOTE: Differs from spec; object is constructed here
4325 var constructorResult = promise = new constructor(executor);
4326 set_internal(promiseCapability, '[[Promise]]', promise);
4327
4328 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4329 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4330 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4331 return promiseCapability;
4332 }
4333
4334 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4335
4336 function GetCapabilitiesExecutor() {
4337 var F = function(resolve, reject) {
4338 console.assert(F['[[Capability]]']);
4339 var promiseCapability = F['[[Capability]]'];
4340 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4341 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4342 set_internal(promiseCapability, '[[Resolve]]', resolve);
4343 set_internal(promiseCapability, '[[Reject]]', reject);
4344 return undefined;
4345 };
4346 return F;
4347 }
4348
4349 // 25.4.1.6 IsPromise ( x )
4350
4351 function IsPromise(x) {
4352 if (Type(x) !== 'object') return false;
4353 if (!('[[PromiseState]]' in x)) return false;
4354 if (x['[[PromiseState]]'] === undefined) return false;
4355 return true;
4356 }
4357
4358 // 25.4.1.7 RejectPromise ( promise, reason )
4359
4360 function RejectPromise(promise, reason) {
4361 console.assert(promise['[[PromiseState]]'] === 'pending');
4362 var reactions = promise['[[PromiseRejectReactions]]'];
4363 set_internal(promise, '[[PromiseResult]]', reason);
4364 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4365 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4366 set_internal(promise, '[[PromiseState]]', 'rejected');
4367 return TriggerPromiseReactions(reactions, reason);
4368 }
4369
4370 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4371
4372 function TriggerPromiseReactions(reactions, argument) {
4373 for (var i = 0, len = reactions.length; i < len; ++i)
4374 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4375 return undefined;
4376 }
4377
4378 // 25.4.2 Promise Jobs
4379
4380 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4381
4382 function PromiseReactionJob(reaction, argument) {
4383 var promiseCapability = reaction['[[Capabilities]]'];
4384 var handler = reaction['[[Handler]]'];
4385 var handlerResult, status;
4386 try {
4387 if (handler === 'Identity') handlerResult = argument;
4388 else if (handler === 'Thrower') throw argument;
4389 else handlerResult = handler.call(undefined, argument);
4390 } catch (handlerResult) {
4391 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4392 NextJob(status); return;
4393 }
4394 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4395 NextJob(status);
4396 }
4397
4398 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4399
4400 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4401 // SPEC BUG: promise vs. promiseToResolve
4402 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4403 try {
4404 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4405 resolvingFunctions['[[Reject]]']);
4406 } catch (thenCallResult) {
4407 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4408 NextJob(status); return;
4409 }
4410 NextJob(thenCallResult);
4411 }
4412
4413 // 25.4.3 The Promise Constructor
4414
4415 // 25.4.3.1 Promise ( executor )
4416
4417 function Promise(executor) {
4418 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4419 Object.defineProperty(this, '[[PromiseState]]', config);
4420 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4421 Object.defineProperty(this, '[[PromiseResult]]', config);
4422 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4423 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4424
4425 var promise = this;
4426 if (Type(promise) !== 'object') throw new TypeError();
4427 if (!('[[PromiseState]]' in promise)) throw TypeError();
4428 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4429 if (!IsCallable(executor)) throw TypeError();
4430
4431 set_internal(promise, '[[PromiseConstructor]]', Promise);
4432
4433 return InitializePromise(promise, executor);
4434 }
4435
4436 // 25.4.3.1.1 InitializePromise ( promise, executor )
4437
4438 function InitializePromise(promise, executor) {
4439 console.assert('[[PromiseState]]' in promise);
4440 console.assert(IsCallable(executor));
4441 set_internal(promise, '[[PromiseState]]', 'pending');
4442 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4443 set_internal(promise, '[[PromiseRejectReactions]]', []);
4444 var resolvingFunctions = CreateResolvingFunctions(promise);
4445 try {
4446 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4447 resolvingFunctions['[[Reject]]']);
4448 } catch (completion) {
4449 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4450 }
4451 return promise;
4452 }
4453
4454 // 25.4.4 Properties of the Promise Constructor
4455 // 25.4.4.1 Promise.all ( iterable )
4456
4457 define(Promise, 'all', function all(iterable) {
4458 var c = strict(this);
4459 var promiseCapability = NewPromiseCapability(c);
4460 try {
4461 var iterator = GetIterator(iterable);
4462 } catch (value) {
4463 promiseCapability['[[Reject]]'].call(undefined, value);
4464 return promiseCapability['[[Promise]]'];
4465 }
4466 var values = [];
4467 var remainingElementsCount = { value: 1 };
4468 var index = 0;
4469 while (true) {
4470 try {
4471 var next = IteratorStep(iterator);
4472 } catch (value) {
4473 promiseCapability['[[Reject]]'].call(undefined, value);
4474 return promiseCapability['[[Promise]]'];
4475 }
4476 if (!next) {
4477 remainingElementsCount.value -= 1;
4478 if (remainingElementsCount.value === 0) {
4479 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4480
4481
4482 }
4483 return promiseCapability['[[Promise]]'];
4484 }
4485 try {
4486 var nextValue = IteratorValue(next);
4487 } catch (value) {
4488 promiseCapability['[[Reject]]'].call(undefined, value);
4489 return promiseCapability['[[Promise]]'];
4490 }
4491 try {
4492 var nextPromise = c.resolve(nextValue);
4493 } catch (value) {
4494 promiseCapability['[[Reject]]'].call(undefined, value);
4495 return promiseCapability['[[Promise]]'];
4496 }
4497 var resolveElement = PromiseAllResolveElementFunction();
4498 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4499 set_internal(resolveElement, '[[Index]]', index);
4500 set_internal(resolveElement, '[[Values]]', values);
4501 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4502 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4503 remainingElementsCount.value += 1;
4504 try {
4505 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4506 } catch (value) {
4507 promiseCapability['[[Reject]]'].call(undefined, value);
4508 return promiseCapability['[[Promise]]'];
4509 }
4510 index += 1;
4511 }
4512 });
4513
4514 // 25.4.4.1.1 Promise.all Resolve Element Functions
4515
4516 function PromiseAllResolveElementFunction() {
4517 var F = function(x) {
4518 var alreadyCalled = F['[[AlreadyCalled]]'];
4519 if (alreadyCalled.value) return undefined;
4520 alreadyCalled.value = true;
4521 var index = F['[[Index]]'];
4522 var values = F['[[Values]]'];
4523 var promiseCapability = F['[[Capabilities]]'];
4524 var remainingElementsCount = F['[[RemainingElements]]'];
4525 try {
4526 values[index] = x;
4527 } catch (result) {
4528 promiseCapability['[[Reject]]'].call(undefined, result);
4529 return promiseCapability['[[Promise]]'];
4530 }
4531 remainingElementsCount.value -= 1;
4532 if (remainingElementsCount.value === 0)
4533 return promiseCapability['[[Resolve]]'].call(undefined, values);
4534 return undefined;
4535 };
4536 return F;
4537 }
4538
4539 // 25.4.4.2 Promise.prototype
4540
4541 Promise.prototype = {};
4542
4543 // 25.4.4.3 Promise.race ( iterable )
4544
4545 define(Promise, 'race', function race(iterable) {
4546 var c = strict(this);
4547 var promiseCapability = NewPromiseCapability(c);
4548 try {
4549 var iterator = GetIterator(iterable);
4550 } catch (value) {
4551 promiseCapability['[[Reject]]'].call(undefined, value);
4552 return promiseCapability['[[Promise]]'];
4553 }
4554 while (true) {
4555 try {
4556 var next = IteratorStep(iterator);
4557 } catch (value) {
4558 promiseCapability['[[Reject]]'].call(undefined, value);
4559 return promiseCapability['[[Promise]]'];
4560 }
4561 if (!next) return promiseCapability['[[Promise]]'];
4562 try {
4563 var nextValue = IteratorValue(next);
4564 } catch (value) {
4565 promiseCapability['[[Reject]]'].call(undefined, value);
4566 return promiseCapability['[[Promise]]'];
4567 }
4568 try {
4569 var nextPromise = c.resolve(nextValue);
4570 } catch (value) {
4571 promiseCapability['[[Reject]]'].call(undefined, value);
4572 return promiseCapability['[[Promise]]'];
4573 }
4574 try {
4575 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4576 } catch (value) {
4577 promiseCapability['[[Reject]]'].call(undefined, value);
4578 return promiseCapability['[[Promise]]'];
4579 }
4580 }
4581 });
4582
4583 // 25.4.4.4 Promise.reject ( r )
4584
4585 define(Promise, 'reject', function reject(r) {
4586 var c = strict(this);
4587 var promiseCapability = NewPromiseCapability(c);
4588 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4589 return promiseCapability['[[Promise]]'];
4590 });
4591
4592 // 25.4.4.5 Promise.resolve ( x )
4593
4594 define(Promise, 'resolve', function resolve(x) {
4595 var c = strict(this);
4596 if (IsPromise(x)) {
4597 var constructor = x['[[PromiseConstructor]]'];
4598 if (SameValue(constructor, c)) return x;
4599 }
4600 var promiseCapability = NewPromiseCapability(c);
4601 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4602 return promiseCapability['[[Promise]]'];
4603 });
4604
4605 // 25.4.4.6 Promise [ @@create ] ( )
4606 // 25.4.4.6.1 AllocatePromise ( constructor )
4607 // 25.4.5 Properties of the Promise Prototype Object
4608 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4609
4610 define(Promise.prototype, 'catch', function catch_(onRejected) {
4611 var promise = this;
4612 return promise.then(undefined, onRejected);
4613 });
4614
4615 // 25.4.5.2 Promise.prototype.constructor
4616
4617 Promise.prototype.constructor = Promise;
4618
4619 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4620
4621 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4622 var promise = this;
4623 if (!IsPromise(promise)) throw TypeError();
4624 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4625 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4626 var c = promise.constructor;
4627 var promiseCapability = NewPromiseCapability(c);
4628 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4629 '[[Handler]]': onFulfilled };
4630 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4631 '[[Handler]]': onRejected };
4632 if (promise['[[PromiseState]]'] === 'pending') {
4633 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4634 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4635 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4636 var value = promise['[[PromiseResult]]'];
4637 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4638 } else if (promise['[[PromiseState]]'] === 'rejected') {
4639 var reason = promise['[[PromiseResult]]'];
4640 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4641 }
4642 return promiseCapability['[[Promise]]'];
4643 });
4644
4645 // 25.4.6 Properties of Promise Instances
4646
4647 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4648 global.Promise = Promise;
4649
4650 // Patch early Promise.cast vs. Promise.resolve implementations
4651 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4652 }());
4653
4654 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4655 define(Promise.prototype, $$toStringTag, 'Promise');
4656
4657 // ---------------------------------------
4658 // 26 Reflection
4659 // ---------------------------------------
4660
4661 (function() {
4662 // 26.1 The Reflect Object
4663 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4664 global.Reflect = {};
4665
4666 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4667 define(
4668 Reflect, 'apply',
4669 function apply(target, thisArgument, argumentsList) {
4670 if (!IsCallable(target)) throw TypeError();
4671 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4672 });
4673
4674 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4675 define(
4676 Reflect, 'construct',
4677 function construct(target, argumentsList) {
4678 return __cons(target, argumentsList);
4679 });
4680
4681 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4682 define(
4683 Reflect, 'defineProperty',
4684 function defineProperty(target, propertyKey, attributes) {
4685 try {
4686 Object.defineProperty(target, propertyKey, attributes);
4687 return true;
4688 } catch (_) {
4689 return false;
4690 }
4691 });
4692
4693 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4694 define(
4695 Reflect, 'deleteProperty',
4696 function deleteProperty(target,name) {
4697 try {
4698 delete target[name];
4699 return !HasOwnProperty(target, name);
4700 } catch (_) {
4701 return false;
4702 }
4703 });
4704
4705 // 26.1.5 Reflect.enumerate ( target )
4706 define(
4707 Reflect, 'enumerate',
4708 function enumerate(target) {
4709 target = ToObject(target);
4710 var iterator = Enumerate(target);
4711 return iterator;
4712 });
4713
4714 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4715 define(
4716 Reflect, 'get',
4717 function get(target, name, receiver) {
4718 target = ToObject(target);
4719 name = String(name);
4720 receiver = (receiver === undefined) ? target : ToObject(receiver);
4721 var desc = getPropertyDescriptor(target, name);
4722 if (desc && 'get' in desc)
4723 return Function.prototype.call.call(desc['get'], receiver);
4724 return target[name];
4725 });
4726
4727 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4728 define(
4729 Reflect, 'getOwnPropertyDescriptor',
4730 Object.getOwnPropertyDescriptor);
4731
4732 // 26.1.8 Reflect.getPrototypeOf ( target )
4733 define(
4734 Reflect, 'getPrototypeOf',
4735 Object.getPrototypeOf);
4736
4737 // 26.1.9 Reflect.has ( target, propertyKey )
4738 define(
4739 Reflect, 'has',
4740 function has(target,name) {
4741 return String(name) in ToObject(target);
4742 });
4743
4744 // 26.1.10 Reflect.isExtensible (target)
4745 define(
4746 Reflect, 'isExtensible',
4747 Object.isExtensible);
4748
4749 // 26.1.11 Reflect.ownKeys ( target )
4750 define(
4751 Reflect, 'ownKeys',
4752 function ownKeys(target) {
4753 var obj = ToObject(target);
4754 return Object.getOwnPropertyNames(obj);
4755 });
4756
4757 // 26.1.12 Reflect.preventExtensions ( target )
4758 define(
4759 Reflect, 'preventExtensions',
4760 function preventExtensions(target) {
4761 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4762 });
4763
4764 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4765 define(
4766 Reflect, 'set',
4767 function set(target, name, value, receiver) {
4768 target = ToObject(target);
4769 name = String(name);
4770 receiver = (receiver === undefined) ? target : ToObject(receiver);
4771 var desc = getPropertyDescriptor(target, name);
4772 try {
4773 if (desc && 'set' in desc)
4774 Function.prototype.call.call(desc['set'], receiver, value);
4775 else
4776 target[name] = value;
4777 return true;
4778 } catch (_) {
4779 return false;
4780 }
4781 });
4782
4783 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4784 define(
4785 Reflect, 'setPrototypeOf',
4786 function setPrototypeOf(target, proto) {
4787 try {
4788 target.__proto__ = proto;
4789 return Reflect.getPrototypeOf(target) === proto;
4790 } catch(_) {
4791 return false;
4792 }
4793 });
4794
4795 }());
4796
4797 // ---------------------------------------
4798 // 26.2 Proxy Objects
4799 // ---------------------------------------
4800
4801 // Not polyfillable.
4802
4803 }(self));
4804
4805 // This helper is defined outside the main scope so that the use of
4806 // 'eval' does not taint the scope for minifiers.
4807 function __cons(t, a) {
4808 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4809 }
4810 </script>
4811 <script>(function (root) {
4812 "use strict";
4813
4814 /***** unorm.js *****/
4815
4816 /*
4817 * UnicodeNormalizer 1.0.0
4818 * Copyright (c) 2008 Matsuza
4819 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
4820 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
4821 * $Rev: 13309 $
4822 */
4823
4824 var DEFAULT_FEATURE = [null, 0, {}];
4825 var CACHE_THRESHOLD = 10;
4826 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
4827 var NCount = VCount * TCount; // 588
4828 var SCount = LCount * NCount; // 11172
4829
4830 var UChar = function(cp, feature){
4831 this.codepoint = cp;
4832 this.feature = feature;
4833 };
4834
4835 // Strategies
4836 var cache = {};
4837 var cacheCounter = [];
4838 for (var i = 0; i <= 0xFF; ++i){
4839 cacheCounter[i] = 0;
4840 }
4841
4842 function fromCache(next, cp, needFeature){
4843 var ret = cache[cp];
4844 if(!ret){
4845 ret = next(cp, needFeature);
4846 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
4847 cache[cp] = ret;
4848 }
4849 }
4850 return ret;
4851 }
4852
4853 function fromData(next, cp, needFeature){
4854 var hash = cp & 0xFF00;
4855 var dunit = UChar.udata[hash] || {};
4856 var f = dunit[cp];
4857 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
4858 }
4859 function fromCpOnly(next, cp, needFeature){
4860 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
4861 }
4862 function fromRuleBasedJamo(next, cp, needFeature){
4863 var j;
4864 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
4865 return next(cp, needFeature);
4866 }
4867 if(LBase <= cp && cp < LBase + LCount){
4868 var c = {};
4869 var base = (cp - LBase) * VCount;
4870 for (j = 0; j < VCount; ++j){
4871 c[VBase + j] = SBase + TCount * (j + base);
4872 }
4873 return new UChar(cp, [,,c]);
4874 }
4875
4876 var SIndex = cp - SBase;
4877 var TIndex = SIndex % TCount;
4878 var feature = [];
4879 if(TIndex !== 0){
4880 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
4881 } else {
4882 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
4883 feature[2] = {};
4884 for (j = 1; j < TCount; ++j){
4885 feature[2][TBase + j] = cp + j;
4886 }
4887 }
4888 return new UChar(cp, feature);
4889 }
4890 function fromCpFilter(next, cp, needFeature){
4891 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
4892 }
4893
4894 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
4895
4896 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
4897 return function (cp, needFeature) {
4898 return strategy(next, cp, needFeature);
4899 };
4900 }, null);
4901
4902 UChar.isHighSurrogate = function(cp){
4903 return cp >= 0xD800 && cp <= 0xDBFF;
4904 };
4905 UChar.isLowSurrogate = function(cp){
4906 return cp >= 0xDC00 && cp <= 0xDFFF;
4907 };
4908
4909 UChar.prototype.prepFeature = function(){
4910 if(!this.feature){
4911 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
4912 }
4913 };
4914
4915 UChar.prototype.toString = function(){
4916 if(this.codepoint < 0x10000){
4917 return String.fromCharCode(this.codepoint);
4918 } else {
4919 var x = this.codepoint - 0x10000;
4920 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
4921 }
4922 };
4923
4924 UChar.prototype.getDecomp = function(){
4925 this.prepFeature();
4926 return this.feature[0] || null;
4927 };
4928
4929 UChar.prototype.isCompatibility = function(){
4930 this.prepFeature();
4931 return !!this.feature[1] && (this.feature[1] & (1 << 8));
4932 };
4933 UChar.prototype.isExclude = function(){
4934 this.prepFeature();
4935 return !!this.feature[1] && (this.feature[1] & (1 << 9));
4936 };
4937 UChar.prototype.getCanonicalClass = function(){
4938 this.prepFeature();
4939 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
4940 };
4941 UChar.prototype.getComposite = function(following){
4942 this.prepFeature();
4943 if(!this.feature[2]){
4944 return null;
4945 }
4946 var cp = this.feature[2][following.codepoint];
4947 return cp ? UChar.fromCharCode(cp) : null;
4948 };
4949
4950 var UCharIterator = function(str){
4951 this.str = str;
4952 this.cursor = 0;
4953 };
4954 UCharIterator.prototype.next = function(){
4955 if(!!this.str && this.cursor < this.str.length){
4956 var cp = this.str.charCodeAt(this.cursor++);
4957 var d;
4958 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
4959 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
4960 ++this.cursor;
4961 }
4962 return UChar.fromCharCode(cp);
4963 } else {
4964 this.str = null;
4965 return null;
4966 }
4967 };
4968
4969 var RecursDecompIterator = function(it, cano){
4970 this.it = it;
4971 this.canonical = cano;
4972 this.resBuf = [];
4973 };
4974
4975 RecursDecompIterator.prototype.next = function(){
4976 function recursiveDecomp(cano, uchar){
4977 var decomp = uchar.getDecomp();
4978 if(!!decomp && !(cano && uchar.isCompatibility())){
4979 var ret = [];
4980 for(var i = 0; i < decomp.length; ++i){
4981 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
4982 ret = ret.concat(a);
4983 }
4984 return ret;
4985 } else {
4986 return [uchar];
4987 }
4988 }
4989 if(this.resBuf.length === 0){
4990 var uchar = this.it.next();
4991 if(!uchar){
4992 return null;
4993 }
4994 this.resBuf = recursiveDecomp(this.canonical, uchar);
4995 }
4996 return this.resBuf.shift();
4997 };
4998
4999 var DecompIterator = function(it){
5000 this.it = it;
5001 this.resBuf = [];
5002 };
5003
5004 DecompIterator.prototype.next = function(){
5005 var cc;
5006 if(this.resBuf.length === 0){
5007 do{
5008 var uchar = this.it.next();
5009 if(!uchar){
5010 break;
5011 }
5012 cc = uchar.getCanonicalClass();
5013 var inspt = this.resBuf.length;
5014 if(cc !== 0){
5015 for(; inspt > 0; --inspt){
5016 var uchar2 = this.resBuf[inspt - 1];
5017 var cc2 = uchar2.getCanonicalClass();
5018 if(cc2 <= cc){
5019 break;
5020 }
5021 }
5022 }
5023 this.resBuf.splice(inspt, 0, uchar);
5024 } while(cc !== 0);
5025 }
5026 return this.resBuf.shift();
5027 };
5028
5029 var CompIterator = function(it){
5030 this.it = it;
5031 this.procBuf = [];
5032 this.resBuf = [];
5033 this.lastClass = null;
5034 };
5035
5036 CompIterator.prototype.next = function(){
5037 while(this.resBuf.length === 0){
5038 var uchar = this.it.next();
5039 if(!uchar){
5040 this.resBuf = this.procBuf;
5041 this.procBuf = [];
5042 break;
5043 }
5044 if(this.procBuf.length === 0){
5045 this.lastClass = uchar.getCanonicalClass();
5046 this.procBuf.push(uchar);
5047 } else {
5048 var starter = this.procBuf[0];
5049 var composite = starter.getComposite(uchar);
5050 var cc = uchar.getCanonicalClass();
5051 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
5052 this.procBuf[0] = composite;
5053 } else {
5054 if(cc === 0){
5055 this.resBuf = this.procBuf;
5056 this.procBuf = [];
5057 }
5058 this.lastClass = cc;
5059 this.procBuf.push(uchar);
5060 }
5061 }
5062 }
5063 return this.resBuf.shift();
5064 };
5065
5066 var createIterator = function(mode, str){
5067 switch(mode){
5068 case "NFD":
5069 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
5070 case "NFKD":
5071 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
5072 case "NFC":
5073 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
5074 case "NFKC":
5075 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
5076 }
5077 throw mode + " is invalid";
5078 };
5079 var normalize = function(mode, str){
5080 var it = createIterator(mode, str);
5081 var ret = "";
5082 var uchar;
5083 while(!!(uchar = it.next())){
5084 ret += uchar.toString();
5085 }
5086 return ret;
5087 };
5088
5089 /* API functions */
5090 function nfd(str){
5091 return normalize("NFD", str);
5092 }
5093
5094 function nfkd(str){
5095 return normalize("NFKD", str);
5096 }
5097
5098 function nfc(str){
5099 return normalize("NFC", str);
5100 }
5101
5102 function nfkc(str){
5103 return normalize("NFKC", str);
5104 }
5105
5106 /* Unicode data */
5107 UChar.udata={
5108 0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
5109 256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
5110 512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
5111 768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
5112 1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
5113 1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
5114 1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
5115 1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
5116 2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
5117 2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
5118 2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
5119 2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
5120 3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
5121 3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
5122 3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
5123 3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
5124 4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
5125 4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
5126 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
5127 4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
5128 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
5129 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
5130 5632:{71231:[,9],71350:[,9],71351:[,7]},
5131 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
5132 6144:{6313:[,228]},
5133 6400:{6457:[,222],6458:[,230],6459:[,220]},
5134 6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
5135 6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
5136 7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
5137 7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
5138 7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
5139 7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
5140 8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
5141 8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
5142 8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
5143 8960:{9001:[[12296]],9002:[[12297]]},
5144 9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
5145 10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
5146 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
5147 11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
5148 11776:{11935:[[27597],256],12019:[[40863],256]},
5149 12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
5150 12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
5151 12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
5152 12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
5153 13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
5154 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
5155 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
5156 42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
5157 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
5158 43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
5159 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
5160 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
5161 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
5162 48128:{113822:[,1]},
5163 53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
5164 53760:{119362:[,230],119363:[,230],119364:[,230]},
5165 54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
5166 54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
5167 54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
5168 55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
5169 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
5170 60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
5171 61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
5172 61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
5173 63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
5174 63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
5175 64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
5176 64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
5177 64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
5178 64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
5179 65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
5180 65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
5181
5182 };
5183
5184 /***** Module to export */
5185 var unorm = {
5186 nfc: nfc,
5187 nfd: nfd,
5188 nfkc: nfkc,
5189 nfkd: nfkd
5190 };
5191
5192 /*globals module:true,define:true*/
5193
5194 // CommonJS
5195 if (typeof module === "object") {
5196 module.exports = unorm;
5197
5198 // AMD
5199 } else if (typeof define === "function" && define.amd) {
5200 define("unorm", function () {
5201 return unorm;
5202 });
5203
5204 // Global
5205 } else {
5206 root.unorm = unorm;
5207 }
5208
5209 /***** Export as shim for String::normalize method *****/
5210 /*
5211 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
5212
5213 21.1.3.12 String.prototype.normalize(form="NFC")
5214 When the normalize method is called with one argument form, the following steps are taken:
5215
5216 1. Let O be CheckObjectCoercible(this value).
5217 2. Let S be ToString(O).
5218 3. ReturnIfAbrupt(S).
5219 4. If form is not provided or undefined let form be "NFC".
5220 5. Let f be ToString(form).
5221 6. ReturnIfAbrupt(f).
5222 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
5223 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.
5224 9. Return ns.
5225
5226 The length property of the normalize method is 0.
5227
5228 *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.
5229 */
5230 unorm.shimApplied = false;
5231
5232 if (!String.prototype.normalize) {
5233 String.prototype.normalize = function(form) {
5234 var str = "" + this;
5235 form = form === undefined ? "NFC" : form;
5236
5237 if (form === "NFC") {
5238 return unorm.nfc(str);
5239 } else if (form === "NFD") {
5240 return unorm.nfd(str);
5241 } else if (form === "NFKC") {
5242 return unorm.nfkc(str);
5243 } else if (form === "NFKD") {
5244 return unorm.nfkd(str);
5245 } else {
5246 throw new RangeError("Invalid normalization form: " + form);
5247 }
5248 };
5249
5250 unorm.shimApplied = true;
5251 }
5252 }(this));
5253 </script>
5254 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
5255 !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)
5256 },_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))
5257 },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});
5258 </script>
5259 <script>/*!
5260 * Bootstrap v3.2.0 (http://getbootstrap.com)
5261 * Copyright 2011-2014 Twitter, Inc.
5262 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5263 */
5264 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
5265 <script>(function() {
5266 'use strict';
5267
5268 /**
5269 * Extend an Object with another Object's properties.
5270 *
5271 * The source objects are specified as additional arguments.
5272 *
5273 * @param dst Object the object to extend.
5274 *
5275 * @return Object the final object.
5276 */
5277 var _extend = function(dst) {
5278 var sources = Array.prototype.slice.call(arguments, 1);
5279 for (var i=0; i<sources.length; ++i) {
5280 var src = sources[i];
5281 for (var p in src) {
5282 if (src.hasOwnProperty(p)) dst[p] = src[p];
5283 }
5284 }
5285 return dst;
5286 };
5287
5288
5289 /**
5290 * Defer execution of given function.
5291 * @param {Function} func
5292 */
5293 var _defer = function(func) {
5294 if (typeof setImmediate === 'function') {
5295 return setImmediate(func);
5296 } else {
5297 return setTimeout(func, 0);
5298 }
5299 };
5300
5301 /**
5302 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
5303 */
5304 var Levenshtein = {
5305 /**
5306 * Calculate levenshtein distance of the two strings.
5307 *
5308 * @param str1 String the first string.
5309 * @param str2 String the second string.
5310 * @return Integer the levenshtein distance (0 and above).
5311 */
5312 get: function(str1, str2) {
5313 // base cases
5314 if (str1 === str2) return 0;
5315 if (str1.length === 0) return str2.length;
5316 if (str2.length === 0) return str1.length;
5317
5318 // two rows
5319 var prevRow = new Array(str2.length + 1),
5320 curCol, nextCol, i, j, tmp;
5321
5322 // initialise previous row
5323 for (i=0; i<prevRow.length; ++i) {
5324 prevRow[i] = i;
5325 }
5326
5327 // calculate current row distance from previous row
5328 for (i=0; i<str1.length; ++i) {
5329 nextCol = i + 1;
5330
5331 for (j=0; j<str2.length; ++j) {
5332 curCol = nextCol;
5333
5334 // substution
5335 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
5336 // insertion
5337 tmp = curCol + 1;
5338 if (nextCol > tmp) {
5339 nextCol = tmp;
5340 }
5341 // deletion
5342 tmp = prevRow[j + 1] + 1;
5343 if (nextCol > tmp) {
5344 nextCol = tmp;
5345 }
5346
5347 // copy current col value into previous (in preparation for next iteration)
5348 prevRow[j] = curCol;
5349 }
5350
5351 // copy last col value into previous (in preparation for next iteration)
5352 prevRow[j] = nextCol;
5353 }
5354
5355 return nextCol;
5356 },
5357
5358 /**
5359 * Asynchronously calculate levenshtein distance of the two strings.
5360 *
5361 * @param str1 String the first string.
5362 * @param str2 String the second string.
5363 * @param cb Function callback function with signature: function(Error err, int distance)
5364 * @param [options] Object additional options.
5365 * @param [options.progress] Function progress callback with signature: function(percentComplete)
5366 */
5367 getAsync: function(str1, str2, cb, options) {
5368 options = _extend({}, {
5369 progress: null
5370 }, options);
5371
5372 // base cases
5373 if (str1 === str2) return cb(null, 0);
5374 if (str1.length === 0) return cb(null, str2.length);
5375 if (str2.length === 0) return cb(null, str1.length);
5376
5377 // two rows
5378 var prevRow = new Array(str2.length + 1),
5379 curCol, nextCol,
5380 i, j, tmp,
5381 startTime, currentTime;
5382
5383 // initialise previous row
5384 for (i=0; i<prevRow.length; ++i) {
5385 prevRow[i] = i;
5386 }
5387
5388 nextCol = 1;
5389 i = 0;
5390 j = -1;
5391
5392 var __calculate = function() {
5393 // reset timer
5394 startTime = new Date().valueOf();
5395 currentTime = startTime;
5396
5397 // keep going until one second has elapsed
5398 while (currentTime - startTime < 1000) {
5399 // reached end of current row?
5400 if (str2.length <= (++j)) {
5401 // copy current into previous (in preparation for next iteration)
5402 prevRow[j] = nextCol;
5403
5404 // if already done all chars
5405 if (str1.length <= (++i)) {
5406 return cb(null, nextCol);
5407 }
5408 // else if we have more left to do
5409 else {
5410 nextCol = i + 1;
5411 j = 0;
5412 }
5413 }
5414
5415 // calculation
5416 curCol = nextCol;
5417
5418 // substution
5419 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
5420 // insertion
5421 tmp = curCol + 1;
5422 if (nextCol > tmp) {
5423 nextCol = tmp;
5424 }
5425 // deletion
5426 tmp = prevRow[j + 1] + 1;
5427 if (nextCol > tmp) {
5428 nextCol = tmp;
5429 }
5430
5431 // copy current into previous (in preparation for next iteration)
5432 prevRow[j] = curCol;
5433
5434 // get current time
5435 currentTime = new Date().valueOf();
5436 }
5437
5438 // send a progress update?
5439 if (null !== options.progress) {
5440 try {
5441 options.progress.call(null, (i * 100.0/ str1.length));
5442 } catch (err) {
5443 return cb('Progress callback: ' + err.toString());
5444 }
5445 }
5446
5447 // next iteration
5448 _defer(__calculate);
5449 };
5450
5451 __calculate();
5452 }
5453
5454 };
5455
5456 // amd
5457 if (typeof define !== "undefined" && define !== null && define.amd) {
5458 define(function() {
5459 return Levenshtein;
5460 });
5461 }
5462 // commonjs
5463 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
5464 module.exports = Levenshtein;
5465 }
5466 // web worker
5467 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
5468 self.Levenshtein = Levenshtein;
5469 }
5470 // browser main thread
5471 else if (typeof window !== "undefined" && window !== null) {
5472 window.Levenshtein = Levenshtein;
5473 }
5474 }());
5475
5476 </script>
5477 <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},
5478 write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
5479 for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
5480 7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
5481 0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
5482 setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
5483 j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
5484 b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
5485 c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
5486 0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
5487 (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,
5488 78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
5489 j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
5490 a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
5491 a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
5492 2)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
5493 LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
5494 this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
5495 [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,
5496 116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
5497 43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
5498 3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
5499 55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
5500 45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
5501 (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,
5502 correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
5503 j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
5504 d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
5505 </script>
5506 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
5507 // (public) Constructor
5508 function BigInteger(a, b, c) {
5509 if (!(this instanceof BigInteger))
5510 return new BigInteger(a, b, c)
5511
5512 if (a != null) {
5513 if ("number" == typeof a) this.fromNumber(a, b, c)
5514 else if (b == null && "string" != typeof a) this.fromString(a, 256)
5515 else this.fromString(a, b)
5516 }
5517 }
5518
5519 var proto = BigInteger.prototype
5520
5521 // duck-typed isBigInteger
5522 proto.__bigi = require('../package.json').version
5523 BigInteger.isBigInteger = function (obj, check_ver) {
5524 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
5525 }
5526
5527 // Bits per digit
5528 var dbits
5529
5530 // am: Compute w_j += (x*this_i), propagate carries,
5531 // c is initial carry, returns final carry.
5532 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
5533 // We need to select the fastest one that works in this environment.
5534
5535 // am1: use a single mult and divide to get the high bits,
5536 // max digit bits should be 26 because
5537 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
5538 function am1(i, x, w, j, c, n) {
5539 while (--n >= 0) {
5540 var v = x * this[i++] + w[j] + c
5541 c = Math.floor(v / 0x4000000)
5542 w[j++] = v & 0x3ffffff
5543 }
5544 return c
5545 }
5546 // am2 avoids a big mult-and-extract completely.
5547 // Max digit bits should be <= 30 because we do bitwise ops
5548 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
5549 function am2(i, x, w, j, c, n) {
5550 var xl = x & 0x7fff,
5551 xh = x >> 15
5552 while (--n >= 0) {
5553 var l = this[i] & 0x7fff
5554 var h = this[i++] >> 15
5555 var m = xh * l + h * xl
5556 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
5557 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
5558 w[j++] = l & 0x3fffffff
5559 }
5560 return c
5561 }
5562 // Alternately, set max digit bits to 28 since some
5563 // browsers slow down when dealing with 32-bit numbers.
5564 function am3(i, x, w, j, c, n) {
5565 var xl = x & 0x3fff,
5566 xh = x >> 14
5567 while (--n >= 0) {
5568 var l = this[i] & 0x3fff
5569 var h = this[i++] >> 14
5570 var m = xh * l + h * xl
5571 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
5572 c = (l >> 28) + (m >> 14) + xh * h
5573 w[j++] = l & 0xfffffff
5574 }
5575 return c
5576 }
5577
5578 // wtf?
5579 BigInteger.prototype.am = am1
5580 dbits = 26
5581
5582 BigInteger.prototype.DB = dbits
5583 BigInteger.prototype.DM = ((1 << dbits) - 1)
5584 var DV = BigInteger.prototype.DV = (1 << dbits)
5585
5586 var BI_FP = 52
5587 BigInteger.prototype.FV = Math.pow(2, BI_FP)
5588 BigInteger.prototype.F1 = BI_FP - dbits
5589 BigInteger.prototype.F2 = 2 * dbits - BI_FP
5590
5591 // Digit conversions
5592 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
5593 var BI_RC = new Array()
5594 var rr, vv
5595 rr = "0".charCodeAt(0)
5596 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
5597 rr = "a".charCodeAt(0)
5598 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5599 rr = "A".charCodeAt(0)
5600 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5601
5602 function int2char(n) {
5603 return BI_RM.charAt(n)
5604 }
5605
5606 function intAt(s, i) {
5607 var c = BI_RC[s.charCodeAt(i)]
5608 return (c == null) ? -1 : c
5609 }
5610
5611 // (protected) copy this to r
5612 function bnpCopyTo(r) {
5613 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
5614 r.t = this.t
5615 r.s = this.s
5616 }
5617
5618 // (protected) set from integer value x, -DV <= x < DV
5619 function bnpFromInt(x) {
5620 this.t = 1
5621 this.s = (x < 0) ? -1 : 0
5622 if (x > 0) this[0] = x
5623 else if (x < -1) this[0] = x + DV
5624 else this.t = 0
5625 }
5626
5627 // return bigint initialized to value
5628 function nbv(i) {
5629 var r = new BigInteger()
5630 r.fromInt(i)
5631 return r
5632 }
5633
5634 // (protected) set from string and radix
5635 function bnpFromString(s, b) {
5636 var self = this
5637
5638 var k
5639 if (b == 16) k = 4
5640 else if (b == 8) k = 3
5641 else if (b == 256) k = 8; // byte array
5642 else if (b == 2) k = 1
5643 else if (b == 32) k = 5
5644 else if (b == 4) k = 2
5645 else {
5646 self.fromRadix(s, b)
5647 return
5648 }
5649 self.t = 0
5650 self.s = 0
5651 var i = s.length,
5652 mi = false,
5653 sh = 0
5654 while (--i >= 0) {
5655 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
5656 if (x < 0) {
5657 if (s.charAt(i) == "-") mi = true
5658 continue
5659 }
5660 mi = false
5661 if (sh == 0)
5662 self[self.t++] = x
5663 else if (sh + k > self.DB) {
5664 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
5665 self[self.t++] = (x >> (self.DB - sh))
5666 } else
5667 self[self.t - 1] |= x << sh
5668 sh += k
5669 if (sh >= self.DB) sh -= self.DB
5670 }
5671 if (k == 8 && (s[0] & 0x80) != 0) {
5672 self.s = -1
5673 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
5674 }
5675 self.clamp()
5676 if (mi) BigInteger.ZERO.subTo(self, self)
5677 }
5678
5679 // (protected) clamp off excess high words
5680 function bnpClamp() {
5681 var c = this.s & this.DM
5682 while (this.t > 0 && this[this.t - 1] == c)--this.t
5683 }
5684
5685 // (public) return string representation in given radix
5686 function bnToString(b) {
5687 var self = this
5688 if (self.s < 0) return "-" + self.negate()
5689 .toString(b)
5690 var k
5691 if (b == 16) k = 4
5692 else if (b == 8) k = 3
5693 else if (b == 2) k = 1
5694 else if (b == 32) k = 5
5695 else if (b == 4) k = 2
5696 else return self.toRadix(b)
5697 var km = (1 << k) - 1,
5698 d, m = false,
5699 r = "",
5700 i = self.t
5701 var p = self.DB - (i * self.DB) % k
5702 if (i-- > 0) {
5703 if (p < self.DB && (d = self[i] >> p) > 0) {
5704 m = true
5705 r = int2char(d)
5706 }
5707 while (i >= 0) {
5708 if (p < k) {
5709 d = (self[i] & ((1 << p) - 1)) << (k - p)
5710 d |= self[--i] >> (p += self.DB - k)
5711 } else {
5712 d = (self[i] >> (p -= k)) & km
5713 if (p <= 0) {
5714 p += self.DB
5715 --i
5716 }
5717 }
5718 if (d > 0) m = true
5719 if (m) r += int2char(d)
5720 }
5721 }
5722 return m ? r : "0"
5723 }
5724
5725 // (public) -this
5726 function bnNegate() {
5727 var r = new BigInteger()
5728 BigInteger.ZERO.subTo(this, r)
5729 return r
5730 }
5731
5732 // (public) |this|
5733 function bnAbs() {
5734 return (this.s < 0) ? this.negate() : this
5735 }
5736
5737 // (public) return + if this > a, - if this < a, 0 if equal
5738 function bnCompareTo(a) {
5739 var r = this.s - a.s
5740 if (r != 0) return r
5741 var i = this.t
5742 r = i - a.t
5743 if (r != 0) return (this.s < 0) ? -r : r
5744 while (--i >= 0)
5745 if ((r = this[i] - a[i]) != 0) return r
5746 return 0
5747 }
5748
5749 // returns bit length of the integer x
5750 function nbits(x) {
5751 var r = 1,
5752 t
5753 if ((t = x >>> 16) != 0) {
5754 x = t
5755 r += 16
5756 }
5757 if ((t = x >> 8) != 0) {
5758 x = t
5759 r += 8
5760 }
5761 if ((t = x >> 4) != 0) {
5762 x = t
5763 r += 4
5764 }
5765 if ((t = x >> 2) != 0) {
5766 x = t
5767 r += 2
5768 }
5769 if ((t = x >> 1) != 0) {
5770 x = t
5771 r += 1
5772 }
5773 return r
5774 }
5775
5776 // (public) return the number of bits in "this"
5777 function bnBitLength() {
5778 if (this.t <= 0) return 0
5779 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
5780 }
5781
5782 // (public) return the number of bytes in "this"
5783 function bnByteLength() {
5784 return this.bitLength() >> 3
5785 }
5786
5787 // (protected) r = this << n*DB
5788 function bnpDLShiftTo(n, r) {
5789 var i
5790 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
5791 for (i = n - 1; i >= 0; --i) r[i] = 0
5792 r.t = this.t + n
5793 r.s = this.s
5794 }
5795
5796 // (protected) r = this >> n*DB
5797 function bnpDRShiftTo(n, r) {
5798 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
5799 r.t = Math.max(this.t - n, 0)
5800 r.s = this.s
5801 }
5802
5803 // (protected) r = this << n
5804 function bnpLShiftTo(n, r) {
5805 var self = this
5806 var bs = n % self.DB
5807 var cbs = self.DB - bs
5808 var bm = (1 << cbs) - 1
5809 var ds = Math.floor(n / self.DB),
5810 c = (self.s << bs) & self.DM,
5811 i
5812 for (i = self.t - 1; i >= 0; --i) {
5813 r[i + ds + 1] = (self[i] >> cbs) | c
5814 c = (self[i] & bm) << bs
5815 }
5816 for (i = ds - 1; i >= 0; --i) r[i] = 0
5817 r[ds] = c
5818 r.t = self.t + ds + 1
5819 r.s = self.s
5820 r.clamp()
5821 }
5822
5823 // (protected) r = this >> n
5824 function bnpRShiftTo(n, r) {
5825 var self = this
5826 r.s = self.s
5827 var ds = Math.floor(n / self.DB)
5828 if (ds >= self.t) {
5829 r.t = 0
5830 return
5831 }
5832 var bs = n % self.DB
5833 var cbs = self.DB - bs
5834 var bm = (1 << bs) - 1
5835 r[0] = self[ds] >> bs
5836 for (var i = ds + 1; i < self.t; ++i) {
5837 r[i - ds - 1] |= (self[i] & bm) << cbs
5838 r[i - ds] = self[i] >> bs
5839 }
5840 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
5841 r.t = self.t - ds
5842 r.clamp()
5843 }
5844
5845 // (protected) r = this - a
5846 function bnpSubTo(a, r) {
5847 var self = this
5848 var i = 0,
5849 c = 0,
5850 m = Math.min(a.t, self.t)
5851 while (i < m) {
5852 c += self[i] - a[i]
5853 r[i++] = c & self.DM
5854 c >>= self.DB
5855 }
5856 if (a.t < self.t) {
5857 c -= a.s
5858 while (i < self.t) {
5859 c += self[i]
5860 r[i++] = c & self.DM
5861 c >>= self.DB
5862 }
5863 c += self.s
5864 } else {
5865 c += self.s
5866 while (i < a.t) {
5867 c -= a[i]
5868 r[i++] = c & self.DM
5869 c >>= self.DB
5870 }
5871 c -= a.s
5872 }
5873 r.s = (c < 0) ? -1 : 0
5874 if (c < -1) r[i++] = self.DV + c
5875 else if (c > 0) r[i++] = c
5876 r.t = i
5877 r.clamp()
5878 }
5879
5880 // (protected) r = this * a, r != this,a (HAC 14.12)
5881 // "this" should be the larger one if appropriate.
5882 function bnpMultiplyTo(a, r) {
5883 var x = this.abs(),
5884 y = a.abs()
5885 var i = x.t
5886 r.t = i + y.t
5887 while (--i >= 0) r[i] = 0
5888 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
5889 r.s = 0
5890 r.clamp()
5891 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
5892 }
5893
5894 // (protected) r = this^2, r != this (HAC 14.16)
5895 function bnpSquareTo(r) {
5896 var x = this.abs()
5897 var i = r.t = 2 * x.t
5898 while (--i >= 0) r[i] = 0
5899 for (i = 0; i < x.t - 1; ++i) {
5900 var c = x.am(i, x[i], r, 2 * i, 0, 1)
5901 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
5902 r[i + x.t] -= x.DV
5903 r[i + x.t + 1] = 1
5904 }
5905 }
5906 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
5907 r.s = 0
5908 r.clamp()
5909 }
5910
5911 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
5912 // r != q, this != m. q or r may be null.
5913 function bnpDivRemTo(m, q, r) {
5914 var self = this
5915 var pm = m.abs()
5916 if (pm.t <= 0) return
5917 var pt = self.abs()
5918 if (pt.t < pm.t) {
5919 if (q != null) q.fromInt(0)
5920 if (r != null) self.copyTo(r)
5921 return
5922 }
5923 if (r == null) r = new BigInteger()
5924 var y = new BigInteger(),
5925 ts = self.s,
5926 ms = m.s
5927 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
5928 if (nsh > 0) {
5929 pm.lShiftTo(nsh, y)
5930 pt.lShiftTo(nsh, r)
5931 } else {
5932 pm.copyTo(y)
5933 pt.copyTo(r)
5934 }
5935 var ys = y.t
5936 var y0 = y[ys - 1]
5937 if (y0 == 0) return
5938 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
5939 var d1 = self.FV / yt,
5940 d2 = (1 << self.F1) / yt,
5941 e = 1 << self.F2
5942 var i = r.t,
5943 j = i - ys,
5944 t = (q == null) ? new BigInteger() : q
5945 y.dlShiftTo(j, t)
5946 if (r.compareTo(t) >= 0) {
5947 r[r.t++] = 1
5948 r.subTo(t, r)
5949 }
5950 BigInteger.ONE.dlShiftTo(ys, t)
5951 t.subTo(y, y); // "negative" y so we can replace sub with am later
5952 while (y.t < ys) y[y.t++] = 0
5953 while (--j >= 0) {
5954 // Estimate quotient digit
5955 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
5956 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
5957 y.dlShiftTo(j, t)
5958 r.subTo(t, r)
5959 while (r[i] < --qd) r.subTo(t, r)
5960 }
5961 }
5962 if (q != null) {
5963 r.drShiftTo(ys, q)
5964 if (ts != ms) BigInteger.ZERO.subTo(q, q)
5965 }
5966 r.t = ys
5967 r.clamp()
5968 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
5969 if (ts < 0) BigInteger.ZERO.subTo(r, r)
5970 }
5971
5972 // (public) this mod a
5973 function bnMod(a) {
5974 var r = new BigInteger()
5975 this.abs()
5976 .divRemTo(a, null, r)
5977 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
5978 return r
5979 }
5980
5981 // Modular reduction using "classic" algorithm
5982 function Classic(m) {
5983 this.m = m
5984 }
5985
5986 function cConvert(x) {
5987 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
5988 else return x
5989 }
5990
5991 function cRevert(x) {
5992 return x
5993 }
5994
5995 function cReduce(x) {
5996 x.divRemTo(this.m, null, x)
5997 }
5998
5999 function cMulTo(x, y, r) {
6000 x.multiplyTo(y, r)
6001 this.reduce(r)
6002 }
6003
6004 function cSqrTo(x, r) {
6005 x.squareTo(r)
6006 this.reduce(r)
6007 }
6008
6009 Classic.prototype.convert = cConvert
6010 Classic.prototype.revert = cRevert
6011 Classic.prototype.reduce = cReduce
6012 Classic.prototype.mulTo = cMulTo
6013 Classic.prototype.sqrTo = cSqrTo
6014
6015 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
6016 // justification:
6017 // xy == 1 (mod m)
6018 // xy = 1+km
6019 // xy(2-xy) = (1+km)(1-km)
6020 // x[y(2-xy)] = 1-k^2m^2
6021 // x[y(2-xy)] == 1 (mod m^2)
6022 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
6023 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
6024 // JS multiply "overflows" differently from C/C++, so care is needed here.
6025 function bnpInvDigit() {
6026 if (this.t < 1) return 0
6027 var x = this[0]
6028 if ((x & 1) == 0) return 0
6029 var y = x & 3; // y == 1/x mod 2^2
6030 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
6031 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
6032 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
6033 // last step - calculate inverse mod DV directly
6034 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
6035 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
6036 // we really want the negative inverse, and -DV < y < DV
6037 return (y > 0) ? this.DV - y : -y
6038 }
6039
6040 // Montgomery reduction
6041 function Montgomery(m) {
6042 this.m = m
6043 this.mp = m.invDigit()
6044 this.mpl = this.mp & 0x7fff
6045 this.mph = this.mp >> 15
6046 this.um = (1 << (m.DB - 15)) - 1
6047 this.mt2 = 2 * m.t
6048 }
6049
6050 // xR mod m
6051 function montConvert(x) {
6052 var r = new BigInteger()
6053 x.abs()
6054 .dlShiftTo(this.m.t, r)
6055 r.divRemTo(this.m, null, r)
6056 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
6057 return r
6058 }
6059
6060 // x/R mod m
6061 function montRevert(x) {
6062 var r = new BigInteger()
6063 x.copyTo(r)
6064 this.reduce(r)
6065 return r
6066 }
6067
6068 // x = x/R mod m (HAC 14.32)
6069 function montReduce(x) {
6070 while (x.t <= this.mt2) // pad x so am has enough room later
6071 x[x.t++] = 0
6072 for (var i = 0; i < this.m.t; ++i) {
6073 // faster way of calculating u0 = x[i]*mp mod DV
6074 var j = x[i] & 0x7fff
6075 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
6076 // use am to combine the multiply-shift-add into one call
6077 j = i + this.m.t
6078 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
6079 // propagate carry
6080 while (x[j] >= x.DV) {
6081 x[j] -= x.DV
6082 x[++j]++
6083 }
6084 }
6085 x.clamp()
6086 x.drShiftTo(this.m.t, x)
6087 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
6088 }
6089
6090 // r = "x^2/R mod m"; x != r
6091 function montSqrTo(x, r) {
6092 x.squareTo(r)
6093 this.reduce(r)
6094 }
6095
6096 // r = "xy/R mod m"; x,y != r
6097 function montMulTo(x, y, r) {
6098 x.multiplyTo(y, r)
6099 this.reduce(r)
6100 }
6101
6102 Montgomery.prototype.convert = montConvert
6103 Montgomery.prototype.revert = montRevert
6104 Montgomery.prototype.reduce = montReduce
6105 Montgomery.prototype.mulTo = montMulTo
6106 Montgomery.prototype.sqrTo = montSqrTo
6107
6108 // (protected) true iff this is even
6109 function bnpIsEven() {
6110 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
6111 }
6112
6113 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
6114 function bnpExp(e, z) {
6115 if (e > 0xffffffff || e < 1) return BigInteger.ONE
6116 var r = new BigInteger(),
6117 r2 = new BigInteger(),
6118 g = z.convert(this),
6119 i = nbits(e) - 1
6120 g.copyTo(r)
6121 while (--i >= 0) {
6122 z.sqrTo(r, r2)
6123 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
6124 else {
6125 var t = r
6126 r = r2
6127 r2 = t
6128 }
6129 }
6130 return z.revert(r)
6131 }
6132
6133 // (public) this^e % m, 0 <= e < 2^32
6134 function bnModPowInt(e, m) {
6135 var z
6136 if (e < 256 || m.isEven()) z = new Classic(m)
6137 else z = new Montgomery(m)
6138 return this.exp(e, z)
6139 }
6140
6141 // protected
6142 proto.copyTo = bnpCopyTo
6143 proto.fromInt = bnpFromInt
6144 proto.fromString = bnpFromString
6145 proto.clamp = bnpClamp
6146 proto.dlShiftTo = bnpDLShiftTo
6147 proto.drShiftTo = bnpDRShiftTo
6148 proto.lShiftTo = bnpLShiftTo
6149 proto.rShiftTo = bnpRShiftTo
6150 proto.subTo = bnpSubTo
6151 proto.multiplyTo = bnpMultiplyTo
6152 proto.squareTo = bnpSquareTo
6153 proto.divRemTo = bnpDivRemTo
6154 proto.invDigit = bnpInvDigit
6155 proto.isEven = bnpIsEven
6156 proto.exp = bnpExp
6157
6158 // public
6159 proto.toString = bnToString
6160 proto.negate = bnNegate
6161 proto.abs = bnAbs
6162 proto.compareTo = bnCompareTo
6163 proto.bitLength = bnBitLength
6164 proto.byteLength = bnByteLength
6165 proto.mod = bnMod
6166 proto.modPowInt = bnModPowInt
6167
6168 // (public)
6169 function bnClone() {
6170 var r = new BigInteger()
6171 this.copyTo(r)
6172 return r
6173 }
6174
6175 // (public) return value as integer
6176 function bnIntValue() {
6177 if (this.s < 0) {
6178 if (this.t == 1) return this[0] - this.DV
6179 else if (this.t == 0) return -1
6180 } else if (this.t == 1) return this[0]
6181 else if (this.t == 0) return 0
6182 // assumes 16 < DB < 32
6183 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
6184 }
6185
6186 // (public) return value as byte
6187 function bnByteValue() {
6188 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
6189 }
6190
6191 // (public) return value as short (assumes DB>=16)
6192 function bnShortValue() {
6193 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
6194 }
6195
6196 // (protected) return x s.t. r^x < DV
6197 function bnpChunkSize(r) {
6198 return Math.floor(Math.LN2 * this.DB / Math.log(r))
6199 }
6200
6201 // (public) 0 if this == 0, 1 if this > 0
6202 function bnSigNum() {
6203 if (this.s < 0) return -1
6204 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
6205 else return 1
6206 }
6207
6208 // (protected) convert to radix string
6209 function bnpToRadix(b) {
6210 if (b == null) b = 10
6211 if (this.signum() == 0 || b < 2 || b > 36) return "0"
6212 var cs = this.chunkSize(b)
6213 var a = Math.pow(b, cs)
6214 var d = nbv(a),
6215 y = new BigInteger(),
6216 z = new BigInteger(),
6217 r = ""
6218 this.divRemTo(d, y, z)
6219 while (y.signum() > 0) {
6220 r = (a + z.intValue())
6221 .toString(b)
6222 .substr(1) + r
6223 y.divRemTo(d, y, z)
6224 }
6225 return z.intValue()
6226 .toString(b) + r
6227 }
6228
6229 // (protected) convert from radix string
6230 function bnpFromRadix(s, b) {
6231 var self = this
6232 self.fromInt(0)
6233 if (b == null) b = 10
6234 var cs = self.chunkSize(b)
6235 var d = Math.pow(b, cs),
6236 mi = false,
6237 j = 0,
6238 w = 0
6239 for (var i = 0; i < s.length; ++i) {
6240 var x = intAt(s, i)
6241 if (x < 0) {
6242 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
6243 continue
6244 }
6245 w = b * w + x
6246 if (++j >= cs) {
6247 self.dMultiply(d)
6248 self.dAddOffset(w, 0)
6249 j = 0
6250 w = 0
6251 }
6252 }
6253 if (j > 0) {
6254 self.dMultiply(Math.pow(b, j))
6255 self.dAddOffset(w, 0)
6256 }
6257 if (mi) BigInteger.ZERO.subTo(self, self)
6258 }
6259
6260 // (protected) alternate constructor
6261 function bnpFromNumber(a, b, c) {
6262 var self = this
6263 if ("number" == typeof b) {
6264 // new BigInteger(int,int,RNG)
6265 if (a < 2) self.fromInt(1)
6266 else {
6267 self.fromNumber(a, c)
6268 if (!self.testBit(a - 1)) // force MSB set
6269 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
6270 if (self.isEven()) self.dAddOffset(1, 0); // force odd
6271 while (!self.isProbablePrime(b)) {
6272 self.dAddOffset(2, 0)
6273 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
6274 }
6275 }
6276 } else {
6277 // new BigInteger(int,RNG)
6278 var x = new Array(),
6279 t = a & 7
6280 x.length = (a >> 3) + 1
6281 b.nextBytes(x)
6282 if (t > 0) x[0] &= ((1 << t) - 1)
6283 else x[0] = 0
6284 self.fromString(x, 256)
6285 }
6286 }
6287
6288 // (public) convert to bigendian byte array
6289 function bnToByteArray() {
6290 var self = this
6291 var i = self.t,
6292 r = new Array()
6293 r[0] = self.s
6294 var p = self.DB - (i * self.DB) % 8,
6295 d, k = 0
6296 if (i-- > 0) {
6297 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
6298 r[k++] = d | (self.s << (self.DB - p))
6299 while (i >= 0) {
6300 if (p < 8) {
6301 d = (self[i] & ((1 << p) - 1)) << (8 - p)
6302 d |= self[--i] >> (p += self.DB - 8)
6303 } else {
6304 d = (self[i] >> (p -= 8)) & 0xff
6305 if (p <= 0) {
6306 p += self.DB
6307 --i
6308 }
6309 }
6310 if ((d & 0x80) != 0) d |= -256
6311 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
6312 if (k > 0 || d != self.s) r[k++] = d
6313 }
6314 }
6315 return r
6316 }
6317
6318 function bnEquals(a) {
6319 return (this.compareTo(a) == 0)
6320 }
6321
6322 function bnMin(a) {
6323 return (this.compareTo(a) < 0) ? this : a
6324 }
6325
6326 function bnMax(a) {
6327 return (this.compareTo(a) > 0) ? this : a
6328 }
6329
6330 // (protected) r = this op a (bitwise)
6331 function bnpBitwiseTo(a, op, r) {
6332 var self = this
6333 var i, f, m = Math.min(a.t, self.t)
6334 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
6335 if (a.t < self.t) {
6336 f = a.s & self.DM
6337 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
6338 r.t = self.t
6339 } else {
6340 f = self.s & self.DM
6341 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
6342 r.t = a.t
6343 }
6344 r.s = op(self.s, a.s)
6345 r.clamp()
6346 }
6347
6348 // (public) this & a
6349 function op_and(x, y) {
6350 return x & y
6351 }
6352
6353 function bnAnd(a) {
6354 var r = new BigInteger()
6355 this.bitwiseTo(a, op_and, r)
6356 return r
6357 }
6358
6359 // (public) this | a
6360 function op_or(x, y) {
6361 return x | y
6362 }
6363
6364 function bnOr(a) {
6365 var r = new BigInteger()
6366 this.bitwiseTo(a, op_or, r)
6367 return r
6368 }
6369
6370 // (public) this ^ a
6371 function op_xor(x, y) {
6372 return x ^ y
6373 }
6374
6375 function bnXor(a) {
6376 var r = new BigInteger()
6377 this.bitwiseTo(a, op_xor, r)
6378 return r
6379 }
6380
6381 // (public) this & ~a
6382 function op_andnot(x, y) {
6383 return x & ~y
6384 }
6385
6386 function bnAndNot(a) {
6387 var r = new BigInteger()
6388 this.bitwiseTo(a, op_andnot, r)
6389 return r
6390 }
6391
6392 // (public) ~this
6393 function bnNot() {
6394 var r = new BigInteger()
6395 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
6396 r.t = this.t
6397 r.s = ~this.s
6398 return r
6399 }
6400
6401 // (public) this << n
6402 function bnShiftLeft(n) {
6403 var r = new BigInteger()
6404 if (n < 0) this.rShiftTo(-n, r)
6405 else this.lShiftTo(n, r)
6406 return r
6407 }
6408
6409 // (public) this >> n
6410 function bnShiftRight(n) {
6411 var r = new BigInteger()
6412 if (n < 0) this.lShiftTo(-n, r)
6413 else this.rShiftTo(n, r)
6414 return r
6415 }
6416
6417 // return index of lowest 1-bit in x, x < 2^31
6418 function lbit(x) {
6419 if (x == 0) return -1
6420 var r = 0
6421 if ((x & 0xffff) == 0) {
6422 x >>= 16
6423 r += 16
6424 }
6425 if ((x & 0xff) == 0) {
6426 x >>= 8
6427 r += 8
6428 }
6429 if ((x & 0xf) == 0) {
6430 x >>= 4
6431 r += 4
6432 }
6433 if ((x & 3) == 0) {
6434 x >>= 2
6435 r += 2
6436 }
6437 if ((x & 1) == 0)++r
6438 return r
6439 }
6440
6441 // (public) returns index of lowest 1-bit (or -1 if none)
6442 function bnGetLowestSetBit() {
6443 for (var i = 0; i < this.t; ++i)
6444 if (this[i] != 0) return i * this.DB + lbit(this[i])
6445 if (this.s < 0) return this.t * this.DB
6446 return -1
6447 }
6448
6449 // return number of 1 bits in x
6450 function cbit(x) {
6451 var r = 0
6452 while (x != 0) {
6453 x &= x - 1
6454 ++r
6455 }
6456 return r
6457 }
6458
6459 // (public) return number of set bits
6460 function bnBitCount() {
6461 var r = 0,
6462 x = this.s & this.DM
6463 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
6464 return r
6465 }
6466
6467 // (public) true iff nth bit is set
6468 function bnTestBit(n) {
6469 var j = Math.floor(n / this.DB)
6470 if (j >= this.t) return (this.s != 0)
6471 return ((this[j] & (1 << (n % this.DB))) != 0)
6472 }
6473
6474 // (protected) this op (1<<n)
6475 function bnpChangeBit(n, op) {
6476 var r = BigInteger.ONE.shiftLeft(n)
6477 this.bitwiseTo(r, op, r)
6478 return r
6479 }
6480
6481 // (public) this | (1<<n)
6482 function bnSetBit(n) {
6483 return this.changeBit(n, op_or)
6484 }
6485
6486 // (public) this & ~(1<<n)
6487 function bnClearBit(n) {
6488 return this.changeBit(n, op_andnot)
6489 }
6490
6491 // (public) this ^ (1<<n)
6492 function bnFlipBit(n) {
6493 return this.changeBit(n, op_xor)
6494 }
6495
6496 // (protected) r = this + a
6497 function bnpAddTo(a, r) {
6498 var self = this
6499
6500 var i = 0,
6501 c = 0,
6502 m = Math.min(a.t, self.t)
6503 while (i < m) {
6504 c += self[i] + a[i]
6505 r[i++] = c & self.DM
6506 c >>= self.DB
6507 }
6508 if (a.t < self.t) {
6509 c += a.s
6510 while (i < self.t) {
6511 c += self[i]
6512 r[i++] = c & self.DM
6513 c >>= self.DB
6514 }
6515 c += self.s
6516 } else {
6517 c += self.s
6518 while (i < a.t) {
6519 c += a[i]
6520 r[i++] = c & self.DM
6521 c >>= self.DB
6522 }
6523 c += a.s
6524 }
6525 r.s = (c < 0) ? -1 : 0
6526 if (c > 0) r[i++] = c
6527 else if (c < -1) r[i++] = self.DV + c
6528 r.t = i
6529 r.clamp()
6530 }
6531
6532 // (public) this + a
6533 function bnAdd(a) {
6534 var r = new BigInteger()
6535 this.addTo(a, r)
6536 return r
6537 }
6538
6539 // (public) this - a
6540 function bnSubtract(a) {
6541 var r = new BigInteger()
6542 this.subTo(a, r)
6543 return r
6544 }
6545
6546 // (public) this * a
6547 function bnMultiply(a) {
6548 var r = new BigInteger()
6549 this.multiplyTo(a, r)
6550 return r
6551 }
6552
6553 // (public) this^2
6554 function bnSquare() {
6555 var r = new BigInteger()
6556 this.squareTo(r)
6557 return r
6558 }
6559
6560 // (public) this / a
6561 function bnDivide(a) {
6562 var r = new BigInteger()
6563 this.divRemTo(a, r, null)
6564 return r
6565 }
6566
6567 // (public) this % a
6568 function bnRemainder(a) {
6569 var r = new BigInteger()
6570 this.divRemTo(a, null, r)
6571 return r
6572 }
6573
6574 // (public) [this/a,this%a]
6575 function bnDivideAndRemainder(a) {
6576 var q = new BigInteger(),
6577 r = new BigInteger()
6578 this.divRemTo(a, q, r)
6579 return new Array(q, r)
6580 }
6581
6582 // (protected) this *= n, this >= 0, 1 < n < DV
6583 function bnpDMultiply(n) {
6584 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
6585 ++this.t
6586 this.clamp()
6587 }
6588
6589 // (protected) this += n << w words, this >= 0
6590 function bnpDAddOffset(n, w) {
6591 if (n == 0) return
6592 while (this.t <= w) this[this.t++] = 0
6593 this[w] += n
6594 while (this[w] >= this.DV) {
6595 this[w] -= this.DV
6596 if (++w >= this.t) this[this.t++] = 0
6597 ++this[w]
6598 }
6599 }
6600
6601 // A "null" reducer
6602 function NullExp() {}
6603
6604 function nNop(x) {
6605 return x
6606 }
6607
6608 function nMulTo(x, y, r) {
6609 x.multiplyTo(y, r)
6610 }
6611
6612 function nSqrTo(x, r) {
6613 x.squareTo(r)
6614 }
6615
6616 NullExp.prototype.convert = nNop
6617 NullExp.prototype.revert = nNop
6618 NullExp.prototype.mulTo = nMulTo
6619 NullExp.prototype.sqrTo = nSqrTo
6620
6621 // (public) this^e
6622 function bnPow(e) {
6623 return this.exp(e, new NullExp())
6624 }
6625
6626 // (protected) r = lower n words of "this * a", a.t <= n
6627 // "this" should be the larger one if appropriate.
6628 function bnpMultiplyLowerTo(a, n, r) {
6629 var i = Math.min(this.t + a.t, n)
6630 r.s = 0; // assumes a,this >= 0
6631 r.t = i
6632 while (i > 0) r[--i] = 0
6633 var j
6634 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
6635 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
6636 r.clamp()
6637 }
6638
6639 // (protected) r = "this * a" without lower n words, n > 0
6640 // "this" should be the larger one if appropriate.
6641 function bnpMultiplyUpperTo(a, n, r) {
6642 --n
6643 var i = r.t = this.t + a.t - n
6644 r.s = 0; // assumes a,this >= 0
6645 while (--i >= 0) r[i] = 0
6646 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
6647 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
6648 r.clamp()
6649 r.drShiftTo(1, r)
6650 }
6651
6652 // Barrett modular reduction
6653 function Barrett(m) {
6654 // setup Barrett
6655 this.r2 = new BigInteger()
6656 this.q3 = new BigInteger()
6657 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
6658 this.mu = this.r2.divide(m)
6659 this.m = m
6660 }
6661
6662 function barrettConvert(x) {
6663 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
6664 else if (x.compareTo(this.m) < 0) return x
6665 else {
6666 var r = new BigInteger()
6667 x.copyTo(r)
6668 this.reduce(r)
6669 return r
6670 }
6671 }
6672
6673 function barrettRevert(x) {
6674 return x
6675 }
6676
6677 // x = x mod m (HAC 14.42)
6678 function barrettReduce(x) {
6679 var self = this
6680 x.drShiftTo(self.m.t - 1, self.r2)
6681 if (x.t > self.m.t + 1) {
6682 x.t = self.m.t + 1
6683 x.clamp()
6684 }
6685 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
6686 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
6687 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
6688 x.subTo(self.r2, x)
6689 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
6690 }
6691
6692 // r = x^2 mod m; x != r
6693 function barrettSqrTo(x, r) {
6694 x.squareTo(r)
6695 this.reduce(r)
6696 }
6697
6698 // r = x*y mod m; x,y != r
6699 function barrettMulTo(x, y, r) {
6700 x.multiplyTo(y, r)
6701 this.reduce(r)
6702 }
6703
6704 Barrett.prototype.convert = barrettConvert
6705 Barrett.prototype.revert = barrettRevert
6706 Barrett.prototype.reduce = barrettReduce
6707 Barrett.prototype.mulTo = barrettMulTo
6708 Barrett.prototype.sqrTo = barrettSqrTo
6709
6710 // (public) this^e % m (HAC 14.85)
6711 function bnModPow(e, m) {
6712 var i = e.bitLength(),
6713 k, r = nbv(1),
6714 z
6715 if (i <= 0) return r
6716 else if (i < 18) k = 1
6717 else if (i < 48) k = 3
6718 else if (i < 144) k = 4
6719 else if (i < 768) k = 5
6720 else k = 6
6721 if (i < 8)
6722 z = new Classic(m)
6723 else if (m.isEven())
6724 z = new Barrett(m)
6725 else
6726 z = new Montgomery(m)
6727
6728 // precomputation
6729 var g = new Array(),
6730 n = 3,
6731 k1 = k - 1,
6732 km = (1 << k) - 1
6733 g[1] = z.convert(this)
6734 if (k > 1) {
6735 var g2 = new BigInteger()
6736 z.sqrTo(g[1], g2)
6737 while (n <= km) {
6738 g[n] = new BigInteger()
6739 z.mulTo(g2, g[n - 2], g[n])
6740 n += 2
6741 }
6742 }
6743
6744 var j = e.t - 1,
6745 w, is1 = true,
6746 r2 = new BigInteger(),
6747 t
6748 i = nbits(e[j]) - 1
6749 while (j >= 0) {
6750 if (i >= k1) w = (e[j] >> (i - k1)) & km
6751 else {
6752 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
6753 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
6754 }
6755
6756 n = k
6757 while ((w & 1) == 0) {
6758 w >>= 1
6759 --n
6760 }
6761 if ((i -= n) < 0) {
6762 i += this.DB
6763 --j
6764 }
6765 if (is1) { // ret == 1, don't bother squaring or multiplying it
6766 g[w].copyTo(r)
6767 is1 = false
6768 } else {
6769 while (n > 1) {
6770 z.sqrTo(r, r2)
6771 z.sqrTo(r2, r)
6772 n -= 2
6773 }
6774 if (n > 0) z.sqrTo(r, r2)
6775 else {
6776 t = r
6777 r = r2
6778 r2 = t
6779 }
6780 z.mulTo(r2, g[w], r)
6781 }
6782
6783 while (j >= 0 && (e[j] & (1 << i)) == 0) {
6784 z.sqrTo(r, r2)
6785 t = r
6786 r = r2
6787 r2 = t
6788 if (--i < 0) {
6789 i = this.DB - 1
6790 --j
6791 }
6792 }
6793 }
6794 return z.revert(r)
6795 }
6796
6797 // (public) gcd(this,a) (HAC 14.54)
6798 function bnGCD(a) {
6799 var x = (this.s < 0) ? this.negate() : this.clone()
6800 var y = (a.s < 0) ? a.negate() : a.clone()
6801 if (x.compareTo(y) < 0) {
6802 var t = x
6803 x = y
6804 y = t
6805 }
6806 var i = x.getLowestSetBit(),
6807 g = y.getLowestSetBit()
6808 if (g < 0) return x
6809 if (i < g) g = i
6810 if (g > 0) {
6811 x.rShiftTo(g, x)
6812 y.rShiftTo(g, y)
6813 }
6814 while (x.signum() > 0) {
6815 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
6816 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
6817 if (x.compareTo(y) >= 0) {
6818 x.subTo(y, x)
6819 x.rShiftTo(1, x)
6820 } else {
6821 y.subTo(x, y)
6822 y.rShiftTo(1, y)
6823 }
6824 }
6825 if (g > 0) y.lShiftTo(g, y)
6826 return y
6827 }
6828
6829 // (protected) this % n, n < 2^26
6830 function bnpModInt(n) {
6831 if (n <= 0) return 0
6832 var d = this.DV % n,
6833 r = (this.s < 0) ? n - 1 : 0
6834 if (this.t > 0)
6835 if (d == 0) r = this[0] % n
6836 else
6837 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
6838 return r
6839 }
6840
6841 // (public) 1/this % m (HAC 14.61)
6842 function bnModInverse(m) {
6843 var ac = m.isEven()
6844 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
6845 var u = m.clone(),
6846 v = this.clone()
6847 var a = nbv(1),
6848 b = nbv(0),
6849 c = nbv(0),
6850 d = nbv(1)
6851 while (u.signum() != 0) {
6852 while (u.isEven()) {
6853 u.rShiftTo(1, u)
6854 if (ac) {
6855 if (!a.isEven() || !b.isEven()) {
6856 a.addTo(this, a)
6857 b.subTo(m, b)
6858 }
6859 a.rShiftTo(1, a)
6860 } else if (!b.isEven()) b.subTo(m, b)
6861 b.rShiftTo(1, b)
6862 }
6863 while (v.isEven()) {
6864 v.rShiftTo(1, v)
6865 if (ac) {
6866 if (!c.isEven() || !d.isEven()) {
6867 c.addTo(this, c)
6868 d.subTo(m, d)
6869 }
6870 c.rShiftTo(1, c)
6871 } else if (!d.isEven()) d.subTo(m, d)
6872 d.rShiftTo(1, d)
6873 }
6874 if (u.compareTo(v) >= 0) {
6875 u.subTo(v, u)
6876 if (ac) a.subTo(c, a)
6877 b.subTo(d, b)
6878 } else {
6879 v.subTo(u, v)
6880 if (ac) c.subTo(a, c)
6881 d.subTo(b, d)
6882 }
6883 }
6884 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
6885 if (d.compareTo(m) >= 0) return d.subtract(m)
6886 if (d.signum() < 0) d.addTo(m, d)
6887 else return d
6888 if (d.signum() < 0) return d.add(m)
6889 else return d
6890 }
6891
6892 var lowprimes = [
6893 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
6894 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
6895 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
6896 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
6897 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
6898 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
6899 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
6900 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
6901 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
6902 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
6903 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
6904 ]
6905
6906 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
6907
6908 // (public) test primality with certainty >= 1-.5^t
6909 function bnIsProbablePrime(t) {
6910 var i, x = this.abs()
6911 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
6912 for (i = 0; i < lowprimes.length; ++i)
6913 if (x[0] == lowprimes[i]) return true
6914 return false
6915 }
6916 if (x.isEven()) return false
6917 i = 1
6918 while (i < lowprimes.length) {
6919 var m = lowprimes[i],
6920 j = i + 1
6921 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
6922 m = x.modInt(m)
6923 while (i < j) if (m % lowprimes[i++] == 0) return false
6924 }
6925 return x.millerRabin(t)
6926 }
6927
6928 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
6929 function bnpMillerRabin(t) {
6930 var n1 = this.subtract(BigInteger.ONE)
6931 var k = n1.getLowestSetBit()
6932 if (k <= 0) return false
6933 var r = n1.shiftRight(k)
6934 t = (t + 1) >> 1
6935 if (t > lowprimes.length) t = lowprimes.length
6936 var a = new BigInteger(null)
6937 var j, bases = []
6938 for (var i = 0; i < t; ++i) {
6939 for (;;) {
6940 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
6941 if (bases.indexOf(j) == -1) break
6942 }
6943 bases.push(j)
6944 a.fromInt(j)
6945 var y = a.modPow(r, this)
6946 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
6947 var j = 1
6948 while (j++ < k && y.compareTo(n1) != 0) {
6949 y = y.modPowInt(2, this)
6950 if (y.compareTo(BigInteger.ONE) == 0) return false
6951 }
6952 if (y.compareTo(n1) != 0) return false
6953 }
6954 }
6955 return true
6956 }
6957
6958 // protected
6959 proto.chunkSize = bnpChunkSize
6960 proto.toRadix = bnpToRadix
6961 proto.fromRadix = bnpFromRadix
6962 proto.fromNumber = bnpFromNumber
6963 proto.bitwiseTo = bnpBitwiseTo
6964 proto.changeBit = bnpChangeBit
6965 proto.addTo = bnpAddTo
6966 proto.dMultiply = bnpDMultiply
6967 proto.dAddOffset = bnpDAddOffset
6968 proto.multiplyLowerTo = bnpMultiplyLowerTo
6969 proto.multiplyUpperTo = bnpMultiplyUpperTo
6970 proto.modInt = bnpModInt
6971 proto.millerRabin = bnpMillerRabin
6972
6973 // public
6974 proto.clone = bnClone
6975 proto.intValue = bnIntValue
6976 proto.byteValue = bnByteValue
6977 proto.shortValue = bnShortValue
6978 proto.signum = bnSigNum
6979 proto.toByteArray = bnToByteArray
6980 proto.equals = bnEquals
6981 proto.min = bnMin
6982 proto.max = bnMax
6983 proto.and = bnAnd
6984 proto.or = bnOr
6985 proto.xor = bnXor
6986 proto.andNot = bnAndNot
6987 proto.not = bnNot
6988 proto.shiftLeft = bnShiftLeft
6989 proto.shiftRight = bnShiftRight
6990 proto.getLowestSetBit = bnGetLowestSetBit
6991 proto.bitCount = bnBitCount
6992 proto.testBit = bnTestBit
6993 proto.setBit = bnSetBit
6994 proto.clearBit = bnClearBit
6995 proto.flipBit = bnFlipBit
6996 proto.add = bnAdd
6997 proto.subtract = bnSubtract
6998 proto.multiply = bnMultiply
6999 proto.divide = bnDivide
7000 proto.remainder = bnRemainder
7001 proto.divideAndRemainder = bnDivideAndRemainder
7002 proto.modPow = bnModPow
7003 proto.modInverse = bnModInverse
7004 proto.pow = bnPow
7005 proto.gcd = bnGCD
7006 proto.isProbablePrime = bnIsProbablePrime
7007
7008 // JSBN-specific extension
7009 proto.square = bnSquare
7010
7011 // constants
7012 BigInteger.ZERO = nbv(0)
7013 BigInteger.ONE = nbv(1)
7014 BigInteger.valueOf = nbv
7015
7016 module.exports = BigInteger
7017
7018 },{"../package.json":4}],2:[function(require,module,exports){
7019 (function (Buffer){
7020 // FIXME: Kind of a weird way to throw exceptions, consider removing
7021 var assert = require('assert')
7022 var BigInteger = require('./bigi')
7023
7024 /**
7025 * Turns a byte array into a big integer.
7026 *
7027 * This function will interpret a byte array as a big integer in big
7028 * endian notation.
7029 */
7030 BigInteger.fromByteArrayUnsigned = function(byteArray) {
7031 // BigInteger expects a DER integer conformant byte array
7032 if (byteArray[0] & 0x80) {
7033 return new BigInteger([0].concat(byteArray))
7034 }
7035
7036 return new BigInteger(byteArray)
7037 }
7038
7039 /**
7040 * Returns a byte array representation of the big integer.
7041 *
7042 * This returns the absolute of the contained value in big endian
7043 * form. A value of zero results in an empty array.
7044 */
7045 BigInteger.prototype.toByteArrayUnsigned = function() {
7046 var byteArray = this.toByteArray()
7047 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
7048 }
7049
7050 BigInteger.fromDERInteger = function(byteArray) {
7051 return new BigInteger(byteArray)
7052 }
7053
7054 /*
7055 * Converts BigInteger to a DER integer representation.
7056 *
7057 * The format for this value uses the most significant bit as a sign
7058 * bit. If the most significant bit is already set and the integer is
7059 * positive, a 0x00 is prepended.
7060 *
7061 * Examples:
7062 *
7063 * 0 => 0x00
7064 * 1 => 0x01
7065 * -1 => 0xff
7066 * 127 => 0x7f
7067 * -127 => 0x81
7068 * 128 => 0x0080
7069 * -128 => 0x80
7070 * 255 => 0x00ff
7071 * -255 => 0xff01
7072 * 16300 => 0x3fac
7073 * -16300 => 0xc054
7074 * 62300 => 0x00f35c
7075 * -62300 => 0xff0ca4
7076 */
7077 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
7078
7079 BigInteger.fromBuffer = function(buffer) {
7080 // BigInteger expects a DER integer conformant byte array
7081 if (buffer[0] & 0x80) {
7082 var byteArray = Array.prototype.slice.call(buffer)
7083
7084 return new BigInteger([0].concat(byteArray))
7085 }
7086
7087 return new BigInteger(buffer)
7088 }
7089
7090 BigInteger.fromHex = function(hex) {
7091 if (hex === '') return BigInteger.ZERO
7092
7093 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
7094 assert.equal(hex.length % 2, 0, 'Incomplete hex')
7095 return new BigInteger(hex, 16)
7096 }
7097
7098 BigInteger.prototype.toBuffer = function(size) {
7099 var byteArray = this.toByteArrayUnsigned()
7100 var zeros = []
7101
7102 var padding = size - byteArray.length
7103 while (zeros.length < padding) zeros.push(0)
7104
7105 return new Buffer(zeros.concat(byteArray))
7106 }
7107
7108 BigInteger.prototype.toHex = function(size) {
7109 return this.toBuffer(size).toString('hex')
7110 }
7111
7112 }).call(this,require("buffer").Buffer)
7113 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
7114 var BigInteger = require('./bigi')
7115
7116 //addons
7117 require('./convert')
7118
7119 module.exports = BigInteger
7120 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
7121 module.exports={
7122 "name": "bigi",
7123 "version": "1.4.0",
7124 "description": "Big integers.",
7125 "keywords": [
7126 "cryptography",
7127 "math",
7128 "bitcoin",
7129 "arbitrary",
7130 "precision",
7131 "arithmetic",
7132 "big",
7133 "integer",
7134 "int",
7135 "number",
7136 "biginteger",
7137 "bigint",
7138 "bignumber",
7139 "decimal",
7140 "float"
7141 ],
7142 "devDependencies": {
7143 "mocha": "^1.20.1",
7144 "jshint": "^2.5.1",
7145 "coveralls": "^2.10.0",
7146 "istanbul": "^0.2.11"
7147 },
7148 "repository": {
7149 "url": "https://github.com/cryptocoinjs/bigi",
7150 "type": "git"
7151 },
7152 "main": "./lib/index.js",
7153 "scripts": {
7154 "test": "_mocha -- test/*.js",
7155 "jshint": "jshint --config jshint.json lib/*.js ; true",
7156 "unit": "mocha",
7157 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
7158 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
7159 },
7160 "dependencies": {},
7161 "testling": {
7162 "files": "test/*.js",
7163 "harness": "mocha",
7164 "browsers": [
7165 "ie/9..latest",
7166 "firefox/latest",
7167 "chrome/latest",
7168 "safari/6.0..latest",
7169 "iphone/6.0..latest",
7170 "android-browser/4.2..latest"
7171 ]
7172 },
7173 "bugs": {
7174 "url": "https://github.com/cryptocoinjs/bigi/issues"
7175 },
7176 "homepage": "https://github.com/cryptocoinjs/bigi",
7177 "_id": "bigi@1.4.0",
7178 "dist": {
7179 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
7180 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
7181 },
7182 "_from": "bigi@^1.4.0",
7183 "_npmVersion": "1.4.3",
7184 "_npmUser": {
7185 "name": "jp",
7186 "email": "jprichardson@gmail.com"
7187 },
7188 "maintainers": [
7189 {
7190 "name": "jp",
7191 "email": "jprichardson@gmail.com"
7192 },
7193 {
7194 "name": "midnightlightning",
7195 "email": "boydb@midnightdesign.ws"
7196 },
7197 {
7198 "name": "sidazhang",
7199 "email": "sidazhang89@gmail.com"
7200 },
7201 {
7202 "name": "nadav",
7203 "email": "npm@shesek.info"
7204 }
7205 ],
7206 "directories": {},
7207 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
7208 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
7209 }
7210
7211 },{}],5:[function(require,module,exports){
7212 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7213 //
7214 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7215 //
7216 // Originally from narwhal.js (http://narwhaljs.org)
7217 // Copyright (c) 2009 Thomas Robinson <280north.com>
7218 //
7219 // Permission is hereby granted, free of charge, to any person obtaining a copy
7220 // of this software and associated documentation files (the 'Software'), to
7221 // deal in the Software without restriction, including without limitation the
7222 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7223 // sell copies of the Software, and to permit persons to whom the Software is
7224 // furnished to do so, subject to the following conditions:
7225 //
7226 // The above copyright notice and this permission notice shall be included in
7227 // all copies or substantial portions of the Software.
7228 //
7229 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7230 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7231 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7232 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7233 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7234 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
7235
7236 // when used in node, this will actually load the util module we depend on
7237 // versus loading the builtin util module as happens otherwise
7238 // this is a bug in node module loading as far as I am concerned
7239 var util = require('util/');
7240
7241 var pSlice = Array.prototype.slice;
7242 var hasOwn = Object.prototype.hasOwnProperty;
7243
7244 // 1. The assert module provides functions that throw
7245 // AssertionError's when particular conditions are not met. The
7246 // assert module must conform to the following interface.
7247
7248 var assert = module.exports = ok;
7249
7250 // 2. The AssertionError is defined in assert.
7251 // new assert.AssertionError({ message: message,
7252 // actual: actual,
7253 // expected: expected })
7254
7255 assert.AssertionError = function AssertionError(options) {
7256 this.name = 'AssertionError';
7257 this.actual = options.actual;
7258 this.expected = options.expected;
7259 this.operator = options.operator;
7260 if (options.message) {
7261 this.message = options.message;
7262 this.generatedMessage = false;
7263 } else {
7264 this.message = getMessage(this);
7265 this.generatedMessage = true;
7266 }
7267 var stackStartFunction = options.stackStartFunction || fail;
7268
7269 if (Error.captureStackTrace) {
7270 Error.captureStackTrace(this, stackStartFunction);
7271 }
7272 else {
7273 // non v8 browsers so we can have a stacktrace
7274 var err = new Error();
7275 if (err.stack) {
7276 var out = err.stack;
7277
7278 // try to strip useless frames
7279 var fn_name = stackStartFunction.name;
7280 var idx = out.indexOf('\n' + fn_name);
7281 if (idx >= 0) {
7282 // once we have located the function frame
7283 // we need to strip out everything before it (and its line)
7284 var next_line = out.indexOf('\n', idx + 1);
7285 out = out.substring(next_line + 1);
7286 }
7287
7288 this.stack = out;
7289 }
7290 }
7291 };
7292
7293 // assert.AssertionError instanceof Error
7294 util.inherits(assert.AssertionError, Error);
7295
7296 function replacer(key, value) {
7297 if (util.isUndefined(value)) {
7298 return '' + value;
7299 }
7300 if (util.isNumber(value) && !isFinite(value)) {
7301 return value.toString();
7302 }
7303 if (util.isFunction(value) || util.isRegExp(value)) {
7304 return value.toString();
7305 }
7306 return value;
7307 }
7308
7309 function truncate(s, n) {
7310 if (util.isString(s)) {
7311 return s.length < n ? s : s.slice(0, n);
7312 } else {
7313 return s;
7314 }
7315 }
7316
7317 function getMessage(self) {
7318 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
7319 self.operator + ' ' +
7320 truncate(JSON.stringify(self.expected, replacer), 128);
7321 }
7322
7323 // At present only the three keys mentioned above are used and
7324 // understood by the spec. Implementations or sub modules can pass
7325 // other keys to the AssertionError's constructor - they will be
7326 // ignored.
7327
7328 // 3. All of the following functions must throw an AssertionError
7329 // when a corresponding condition is not met, with a message that
7330 // may be undefined if not provided. All assertion methods provide
7331 // both the actual and expected values to the assertion error for
7332 // display purposes.
7333
7334 function fail(actual, expected, message, operator, stackStartFunction) {
7335 throw new assert.AssertionError({
7336 message: message,
7337 actual: actual,
7338 expected: expected,
7339 operator: operator,
7340 stackStartFunction: stackStartFunction
7341 });
7342 }
7343
7344 // EXTENSION! allows for well behaved errors defined elsewhere.
7345 assert.fail = fail;
7346
7347 // 4. Pure assertion tests whether a value is truthy, as determined
7348 // by !!guard.
7349 // assert.ok(guard, message_opt);
7350 // This statement is equivalent to assert.equal(true, !!guard,
7351 // message_opt);. To test strictly for the value true, use
7352 // assert.strictEqual(true, guard, message_opt);.
7353
7354 function ok(value, message) {
7355 if (!value) fail(value, true, message, '==', assert.ok);
7356 }
7357 assert.ok = ok;
7358
7359 // 5. The equality assertion tests shallow, coercive equality with
7360 // ==.
7361 // assert.equal(actual, expected, message_opt);
7362
7363 assert.equal = function equal(actual, expected, message) {
7364 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7365 };
7366
7367 // 6. The non-equality assertion tests for whether two objects are not equal
7368 // with != assert.notEqual(actual, expected, message_opt);
7369
7370 assert.notEqual = function notEqual(actual, expected, message) {
7371 if (actual == expected) {
7372 fail(actual, expected, message, '!=', assert.notEqual);
7373 }
7374 };
7375
7376 // 7. The equivalence assertion tests a deep equality relation.
7377 // assert.deepEqual(actual, expected, message_opt);
7378
7379 assert.deepEqual = function deepEqual(actual, expected, message) {
7380 if (!_deepEqual(actual, expected)) {
7381 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
7382 }
7383 };
7384
7385 function _deepEqual(actual, expected) {
7386 // 7.1. All identical values are equivalent, as determined by ===.
7387 if (actual === expected) {
7388 return true;
7389
7390 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
7391 if (actual.length != expected.length) return false;
7392
7393 for (var i = 0; i < actual.length; i++) {
7394 if (actual[i] !== expected[i]) return false;
7395 }
7396
7397 return true;
7398
7399 // 7.2. If the expected value is a Date object, the actual value is
7400 // equivalent if it is also a Date object that refers to the same time.
7401 } else if (util.isDate(actual) && util.isDate(expected)) {
7402 return actual.getTime() === expected.getTime();
7403
7404 // 7.3 If the expected value is a RegExp object, the actual value is
7405 // equivalent if it is also a RegExp object with the same source and
7406 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7407 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7408 return actual.source === expected.source &&
7409 actual.global === expected.global &&
7410 actual.multiline === expected.multiline &&
7411 actual.lastIndex === expected.lastIndex &&
7412 actual.ignoreCase === expected.ignoreCase;
7413
7414 // 7.4. Other pairs that do not both pass typeof value == 'object',
7415 // equivalence is determined by ==.
7416 } else if (!util.isObject(actual) && !util.isObject(expected)) {
7417 return actual == expected;
7418
7419 // 7.5 For all other Object pairs, including Array objects, equivalence is
7420 // determined by having the same number of owned properties (as verified
7421 // with Object.prototype.hasOwnProperty.call), the same set of keys
7422 // (although not necessarily the same order), equivalent values for every
7423 // corresponding key, and an identical 'prototype' property. Note: this
7424 // accounts for both named and indexed properties on Arrays.
7425 } else {
7426 return objEquiv(actual, expected);
7427 }
7428 }
7429
7430 function isArguments(object) {
7431 return Object.prototype.toString.call(object) == '[object Arguments]';
7432 }
7433
7434 function objEquiv(a, b) {
7435 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
7436 return false;
7437 // an identical 'prototype' property.
7438 if (a.prototype !== b.prototype) return false;
7439 // if one is a primitive, the other must be same
7440 if (util.isPrimitive(a) || util.isPrimitive(b)) {
7441 return a === b;
7442 }
7443 var aIsArgs = isArguments(a),
7444 bIsArgs = isArguments(b);
7445 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7446 return false;
7447 if (aIsArgs) {
7448 a = pSlice.call(a);
7449 b = pSlice.call(b);
7450 return _deepEqual(a, b);
7451 }
7452 var ka = objectKeys(a),
7453 kb = objectKeys(b),
7454 key, i;
7455 // having the same number of owned properties (keys incorporates
7456 // hasOwnProperty)
7457 if (ka.length != kb.length)
7458 return false;
7459 //the same set of keys (although not necessarily the same order),
7460 ka.sort();
7461 kb.sort();
7462 //~~~cheap key test
7463 for (i = ka.length - 1; i >= 0; i--) {
7464 if (ka[i] != kb[i])
7465 return false;
7466 }
7467 //equivalent values for every corresponding key, and
7468 //~~~possibly expensive deep test
7469 for (i = ka.length - 1; i >= 0; i--) {
7470 key = ka[i];
7471 if (!_deepEqual(a[key], b[key])) return false;
7472 }
7473 return true;
7474 }
7475
7476 // 8. The non-equivalence assertion tests for any deep inequality.
7477 // assert.notDeepEqual(actual, expected, message_opt);
7478
7479 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7480 if (_deepEqual(actual, expected)) {
7481 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7482 }
7483 };
7484
7485 // 9. The strict equality assertion tests strict equality, as determined by ===.
7486 // assert.strictEqual(actual, expected, message_opt);
7487
7488 assert.strictEqual = function strictEqual(actual, expected, message) {
7489 if (actual !== expected) {
7490 fail(actual, expected, message, '===', assert.strictEqual);
7491 }
7492 };
7493
7494 // 10. The strict non-equality assertion tests for strict inequality, as
7495 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7496
7497 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7498 if (actual === expected) {
7499 fail(actual, expected, message, '!==', assert.notStrictEqual);
7500 }
7501 };
7502
7503 function expectedException(actual, expected) {
7504 if (!actual || !expected) {
7505 return false;
7506 }
7507
7508 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7509 return expected.test(actual);
7510 } else if (actual instanceof expected) {
7511 return true;
7512 } else if (expected.call({}, actual) === true) {
7513 return true;
7514 }
7515
7516 return false;
7517 }
7518
7519 function _throws(shouldThrow, block, expected, message) {
7520 var actual;
7521
7522 if (util.isString(expected)) {
7523 message = expected;
7524 expected = null;
7525 }
7526
7527 try {
7528 block();
7529 } catch (e) {
7530 actual = e;
7531 }
7532
7533 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7534 (message ? ' ' + message : '.');
7535
7536 if (shouldThrow && !actual) {
7537 fail(actual, expected, 'Missing expected exception' + message);
7538 }
7539
7540 if (!shouldThrow && expectedException(actual, expected)) {
7541 fail(actual, expected, 'Got unwanted exception' + message);
7542 }
7543
7544 if ((shouldThrow && actual && expected &&
7545 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7546 throw actual;
7547 }
7548 }
7549
7550 // 11. Expected to throw an error:
7551 // assert.throws(block, Error_opt, message_opt);
7552
7553 assert.throws = function(block, /*optional*/error, /*optional*/message) {
7554 _throws.apply(this, [true].concat(pSlice.call(arguments)));
7555 };
7556
7557 // EXTENSION! This is annoying to write outside this module.
7558 assert.doesNotThrow = function(block, /*optional*/message) {
7559 _throws.apply(this, [false].concat(pSlice.call(arguments)));
7560 };
7561
7562 assert.ifError = function(err) { if (err) {throw err;}};
7563
7564 var objectKeys = Object.keys || function (obj) {
7565 var keys = [];
7566 for (var key in obj) {
7567 if (hasOwn.call(obj, key)) keys.push(key);
7568 }
7569 return keys;
7570 };
7571
7572 },{"util/":29}],6:[function(require,module,exports){
7573
7574 },{}],7:[function(require,module,exports){
7575 /*!
7576 * The buffer module from node.js, for the browser.
7577 *
7578 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7579 * @license MIT
7580 */
7581
7582 var base64 = require('base64-js')
7583 var ieee754 = require('ieee754')
7584 var isArray = require('is-array')
7585
7586 exports.Buffer = Buffer
7587 exports.SlowBuffer = SlowBuffer
7588 exports.INSPECT_MAX_BYTES = 50
7589 Buffer.poolSize = 8192 // not used by this implementation
7590
7591 var rootParent = {}
7592
7593 /**
7594 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7595 * === true Use Uint8Array implementation (fastest)
7596 * === false Use Object implementation (most compatible, even IE6)
7597 *
7598 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7599 * Opera 11.6+, iOS 4.2+.
7600 *
7601 * Due to various browser bugs, sometimes the Object implementation will be used even
7602 * when the browser supports typed arrays.
7603 *
7604 * Note:
7605 *
7606 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
7607 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
7608 *
7609 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
7610 * on objects.
7611 *
7612 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
7613 *
7614 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
7615 * incorrect length in some situations.
7616
7617 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
7618 * get the Object implementation, which is slower but behaves correctly.
7619 */
7620 Buffer.TYPED_ARRAY_SUPPORT = (function () {
7621 function Bar () {}
7622 try {
7623 var arr = new Uint8Array(1)
7624 arr.foo = function () { return 42 }
7625 arr.constructor = Bar
7626 return arr.foo() === 42 && // typed array instances can be augmented
7627 arr.constructor === Bar && // constructor can be set
7628 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
7629 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
7630 } catch (e) {
7631 return false
7632 }
7633 })()
7634
7635 function kMaxLength () {
7636 return Buffer.TYPED_ARRAY_SUPPORT
7637 ? 0x7fffffff
7638 : 0x3fffffff
7639 }
7640
7641 /**
7642 * Class: Buffer
7643 * =============
7644 *
7645 * The Buffer constructor returns instances of `Uint8Array` that are augmented
7646 * with function properties for all the node `Buffer` API functions. We use
7647 * `Uint8Array` so that square bracket notation works as expected -- it returns
7648 * a single octet.
7649 *
7650 * By augmenting the instances, we can avoid modifying the `Uint8Array`
7651 * prototype.
7652 */
7653 function Buffer (arg) {
7654 if (!(this instanceof Buffer)) {
7655 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
7656 if (arguments.length > 1) return new Buffer(arg, arguments[1])
7657 return new Buffer(arg)
7658 }
7659
7660 this.length = 0
7661 this.parent = undefined
7662
7663 // Common case.
7664 if (typeof arg === 'number') {
7665 return fromNumber(this, arg)
7666 }
7667
7668 // Slightly less common case.
7669 if (typeof arg === 'string') {
7670 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
7671 }
7672
7673 // Unusual.
7674 return fromObject(this, arg)
7675 }
7676
7677 function fromNumber (that, length) {
7678 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
7679 if (!Buffer.TYPED_ARRAY_SUPPORT) {
7680 for (var i = 0; i < length; i++) {
7681 that[i] = 0
7682 }
7683 }
7684 return that
7685 }
7686
7687 function fromString (that, string, encoding) {
7688 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
7689
7690 // Assumption: byteLength() return value is always < kMaxLength.
7691 var length = byteLength(string, encoding) | 0
7692 that = allocate(that, length)
7693
7694 that.write(string, encoding)
7695 return that
7696 }
7697
7698 function fromObject (that, object) {
7699 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
7700
7701 if (isArray(object)) return fromArray(that, object)
7702
7703 if (object == null) {
7704 throw new TypeError('must start with number, buffer, array or string')
7705 }
7706
7707 if (typeof ArrayBuffer !== 'undefined') {
7708 if (object.buffer instanceof ArrayBuffer) {
7709 return fromTypedArray(that, object)
7710 }
7711 if (object instanceof ArrayBuffer) {
7712 return fromArrayBuffer(that, object)
7713 }
7714 }
7715
7716 if (object.length) return fromArrayLike(that, object)
7717
7718 return fromJsonObject(that, object)
7719 }
7720
7721 function fromBuffer (that, buffer) {
7722 var length = checked(buffer.length) | 0
7723 that = allocate(that, length)
7724 buffer.copy(that, 0, 0, length)
7725 return that
7726 }
7727
7728 function fromArray (that, array) {
7729 var length = checked(array.length) | 0
7730 that = allocate(that, length)
7731 for (var i = 0; i < length; i += 1) {
7732 that[i] = array[i] & 255
7733 }
7734 return that
7735 }
7736
7737 // Duplicate of fromArray() to keep fromArray() monomorphic.
7738 function fromTypedArray (that, array) {
7739 var length = checked(array.length) | 0
7740 that = allocate(that, length)
7741 // Truncating the elements is probably not what people expect from typed
7742 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
7743 // of the old Buffer constructor.
7744 for (var i = 0; i < length; i += 1) {
7745 that[i] = array[i] & 255
7746 }
7747 return that
7748 }
7749
7750 function fromArrayBuffer (that, array) {
7751 if (Buffer.TYPED_ARRAY_SUPPORT) {
7752 // Return an augmented `Uint8Array` instance, for best performance
7753 array.byteLength
7754 that = Buffer._augment(new Uint8Array(array))
7755 } else {
7756 // Fallback: Return an object instance of the Buffer class
7757 that = fromTypedArray(that, new Uint8Array(array))
7758 }
7759 return that
7760 }
7761
7762 function fromArrayLike (that, array) {
7763 var length = checked(array.length) | 0
7764 that = allocate(that, length)
7765 for (var i = 0; i < length; i += 1) {
7766 that[i] = array[i] & 255
7767 }
7768 return that
7769 }
7770
7771 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
7772 // Returns a zero-length buffer for inputs that don't conform to the spec.
7773 function fromJsonObject (that, object) {
7774 var array
7775 var length = 0
7776
7777 if (object.type === 'Buffer' && isArray(object.data)) {
7778 array = object.data
7779 length = checked(array.length) | 0
7780 }
7781 that = allocate(that, length)
7782
7783 for (var i = 0; i < length; i += 1) {
7784 that[i] = array[i] & 255
7785 }
7786 return that
7787 }
7788
7789 function allocate (that, length) {
7790 if (Buffer.TYPED_ARRAY_SUPPORT) {
7791 // Return an augmented `Uint8Array` instance, for best performance
7792 that = Buffer._augment(new Uint8Array(length))
7793 } else {
7794 // Fallback: Return an object instance of the Buffer class
7795 that.length = length
7796 that._isBuffer = true
7797 }
7798
7799 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
7800 if (fromPool) that.parent = rootParent
7801
7802 return that
7803 }
7804
7805 function checked (length) {
7806 // Note: cannot use `length < kMaxLength` here because that fails when
7807 // length is NaN (which is otherwise coerced to zero.)
7808 if (length >= kMaxLength()) {
7809 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
7810 'size: 0x' + kMaxLength().toString(16) + ' bytes')
7811 }
7812 return length | 0
7813 }
7814
7815 function SlowBuffer (subject, encoding) {
7816 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
7817
7818 var buf = new Buffer(subject, encoding)
7819 delete buf.parent
7820 return buf
7821 }
7822
7823 Buffer.isBuffer = function isBuffer (b) {
7824 return !!(b != null && b._isBuffer)
7825 }
7826
7827 Buffer.compare = function compare (a, b) {
7828 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
7829 throw new TypeError('Arguments must be Buffers')
7830 }
7831
7832 if (a === b) return 0
7833
7834 var x = a.length
7835 var y = b.length
7836
7837 var i = 0
7838 var len = Math.min(x, y)
7839 while (i < len) {
7840 if (a[i] !== b[i]) break
7841
7842 ++i
7843 }
7844
7845 if (i !== len) {
7846 x = a[i]
7847 y = b[i]
7848 }
7849
7850 if (x < y) return -1
7851 if (y < x) return 1
7852 return 0
7853 }
7854
7855 Buffer.isEncoding = function isEncoding (encoding) {
7856 switch (String(encoding).toLowerCase()) {
7857 case 'hex':
7858 case 'utf8':
7859 case 'utf-8':
7860 case 'ascii':
7861 case 'binary':
7862 case 'base64':
7863 case 'raw':
7864 case 'ucs2':
7865 case 'ucs-2':
7866 case 'utf16le':
7867 case 'utf-16le':
7868 return true
7869 default:
7870 return false
7871 }
7872 }
7873
7874 Buffer.concat = function concat (list, length) {
7875 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
7876
7877 if (list.length === 0) {
7878 return new Buffer(0)
7879 }
7880
7881 var i
7882 if (length === undefined) {
7883 length = 0
7884 for (i = 0; i < list.length; i++) {
7885 length += list[i].length
7886 }
7887 }
7888
7889 var buf = new Buffer(length)
7890 var pos = 0
7891 for (i = 0; i < list.length; i++) {
7892 var item = list[i]
7893 item.copy(buf, pos)
7894 pos += item.length
7895 }
7896 return buf
7897 }
7898
7899 function byteLength (string, encoding) {
7900 if (typeof string !== 'string') string = '' + string
7901
7902 var len = string.length
7903 if (len === 0) return 0
7904
7905 // Use a for loop to avoid recursion
7906 var loweredCase = false
7907 for (;;) {
7908 switch (encoding) {
7909 case 'ascii':
7910 case 'binary':
7911 // Deprecated
7912 case 'raw':
7913 case 'raws':
7914 return len
7915 case 'utf8':
7916 case 'utf-8':
7917 return utf8ToBytes(string).length
7918 case 'ucs2':
7919 case 'ucs-2':
7920 case 'utf16le':
7921 case 'utf-16le':
7922 return len * 2
7923 case 'hex':
7924 return len >>> 1
7925 case 'base64':
7926 return base64ToBytes(string).length
7927 default:
7928 if (loweredCase) return utf8ToBytes(string).length // assume utf8
7929 encoding = ('' + encoding).toLowerCase()
7930 loweredCase = true
7931 }
7932 }
7933 }
7934 Buffer.byteLength = byteLength
7935
7936 // pre-set for values that may exist in the future
7937 Buffer.prototype.length = undefined
7938 Buffer.prototype.parent = undefined
7939
7940 function slowToString (encoding, start, end) {
7941 var loweredCase = false
7942
7943 start = start | 0
7944 end = end === undefined || end === Infinity ? this.length : end | 0
7945
7946 if (!encoding) encoding = 'utf8'
7947 if (start < 0) start = 0
7948 if (end > this.length) end = this.length
7949 if (end <= start) return ''
7950
7951 while (true) {
7952 switch (encoding) {
7953 case 'hex':
7954 return hexSlice(this, start, end)
7955
7956 case 'utf8':
7957 case 'utf-8':
7958 return utf8Slice(this, start, end)
7959
7960 case 'ascii':
7961 return asciiSlice(this, start, end)
7962
7963 case 'binary':
7964 return binarySlice(this, start, end)
7965
7966 case 'base64':
7967 return base64Slice(this, start, end)
7968
7969 case 'ucs2':
7970 case 'ucs-2':
7971 case 'utf16le':
7972 case 'utf-16le':
7973 return utf16leSlice(this, start, end)
7974
7975 default:
7976 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7977 encoding = (encoding + '').toLowerCase()
7978 loweredCase = true
7979 }
7980 }
7981 }
7982
7983 Buffer.prototype.toString = function toString () {
7984 var length = this.length | 0
7985 if (length === 0) return ''
7986 if (arguments.length === 0) return utf8Slice(this, 0, length)
7987 return slowToString.apply(this, arguments)
7988 }
7989
7990 Buffer.prototype.equals = function equals (b) {
7991 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7992 if (this === b) return true
7993 return Buffer.compare(this, b) === 0
7994 }
7995
7996 Buffer.prototype.inspect = function inspect () {
7997 var str = ''
7998 var max = exports.INSPECT_MAX_BYTES
7999 if (this.length > 0) {
8000 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8001 if (this.length > max) str += ' ... '
8002 }
8003 return '<Buffer ' + str + '>'
8004 }
8005
8006 Buffer.prototype.compare = function compare (b) {
8007 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8008 if (this === b) return 0
8009 return Buffer.compare(this, b)
8010 }
8011
8012 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
8013 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
8014 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
8015 byteOffset >>= 0
8016
8017 if (this.length === 0) return -1
8018 if (byteOffset >= this.length) return -1
8019
8020 // Negative offsets start from the end of the buffer
8021 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
8022
8023 if (typeof val === 'string') {
8024 if (val.length === 0) return -1 // special case: looking for empty string always fails
8025 return String.prototype.indexOf.call(this, val, byteOffset)
8026 }
8027 if (Buffer.isBuffer(val)) {
8028 return arrayIndexOf(this, val, byteOffset)
8029 }
8030 if (typeof val === 'number') {
8031 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
8032 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
8033 }
8034 return arrayIndexOf(this, [ val ], byteOffset)
8035 }
8036
8037 function arrayIndexOf (arr, val, byteOffset) {
8038 var foundIndex = -1
8039 for (var i = 0; byteOffset + i < arr.length; i++) {
8040 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
8041 if (foundIndex === -1) foundIndex = i
8042 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
8043 } else {
8044 foundIndex = -1
8045 }
8046 }
8047 return -1
8048 }
8049
8050 throw new TypeError('val must be string, number or Buffer')
8051 }
8052
8053 // `get` is deprecated
8054 Buffer.prototype.get = function get (offset) {
8055 console.log('.get() is deprecated. Access using array indexes instead.')
8056 return this.readUInt8(offset)
8057 }
8058
8059 // `set` is deprecated
8060 Buffer.prototype.set = function set (v, offset) {
8061 console.log('.set() is deprecated. Access using array indexes instead.')
8062 return this.writeUInt8(v, offset)
8063 }
8064
8065 function hexWrite (buf, string, offset, length) {
8066 offset = Number(offset) || 0
8067 var remaining = buf.length - offset
8068 if (!length) {
8069 length = remaining
8070 } else {
8071 length = Number(length)
8072 if (length > remaining) {
8073 length = remaining
8074 }
8075 }
8076
8077 // must be an even number of digits
8078 var strLen = string.length
8079 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
8080
8081 if (length > strLen / 2) {
8082 length = strLen / 2
8083 }
8084 for (var i = 0; i < length; i++) {
8085 var parsed = parseInt(string.substr(i * 2, 2), 16)
8086 if (isNaN(parsed)) throw new Error('Invalid hex string')
8087 buf[offset + i] = parsed
8088 }
8089 return i
8090 }
8091
8092 function utf8Write (buf, string, offset, length) {
8093 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8094 }
8095
8096 function asciiWrite (buf, string, offset, length) {
8097 return blitBuffer(asciiToBytes(string), buf, offset, length)
8098 }
8099
8100 function binaryWrite (buf, string, offset, length) {
8101 return asciiWrite(buf, string, offset, length)
8102 }
8103
8104 function base64Write (buf, string, offset, length) {
8105 return blitBuffer(base64ToBytes(string), buf, offset, length)
8106 }
8107
8108 function ucs2Write (buf, string, offset, length) {
8109 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8110 }
8111
8112 Buffer.prototype.write = function write (string, offset, length, encoding) {
8113 // Buffer#write(string)
8114 if (offset === undefined) {
8115 encoding = 'utf8'
8116 length = this.length
8117 offset = 0
8118 // Buffer#write(string, encoding)
8119 } else if (length === undefined && typeof offset === 'string') {
8120 encoding = offset
8121 length = this.length
8122 offset = 0
8123 // Buffer#write(string, offset[, length][, encoding])
8124 } else if (isFinite(offset)) {
8125 offset = offset | 0
8126 if (isFinite(length)) {
8127 length = length | 0
8128 if (encoding === undefined) encoding = 'utf8'
8129 } else {
8130 encoding = length
8131 length = undefined
8132 }
8133 // legacy write(string, encoding, offset, length) - remove in v0.13
8134 } else {
8135 var swap = encoding
8136 encoding = offset
8137 offset = length | 0
8138 length = swap
8139 }
8140
8141 var remaining = this.length - offset
8142 if (length === undefined || length > remaining) length = remaining
8143
8144 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8145 throw new RangeError('attempt to write outside buffer bounds')
8146 }
8147
8148 if (!encoding) encoding = 'utf8'
8149
8150 var loweredCase = false
8151 for (;;) {
8152 switch (encoding) {
8153 case 'hex':
8154 return hexWrite(this, string, offset, length)
8155
8156 case 'utf8':
8157 case 'utf-8':
8158 return utf8Write(this, string, offset, length)
8159
8160 case 'ascii':
8161 return asciiWrite(this, string, offset, length)
8162
8163 case 'binary':
8164 return binaryWrite(this, string, offset, length)
8165
8166 case 'base64':
8167 // Warning: maxLength not taken into account in base64Write
8168 return base64Write(this, string, offset, length)
8169
8170 case 'ucs2':
8171 case 'ucs-2':
8172 case 'utf16le':
8173 case 'utf-16le':
8174 return ucs2Write(this, string, offset, length)
8175
8176 default:
8177 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8178 encoding = ('' + encoding).toLowerCase()
8179 loweredCase = true
8180 }
8181 }
8182 }
8183
8184 Buffer.prototype.toJSON = function toJSON () {
8185 return {
8186 type: 'Buffer',
8187 data: Array.prototype.slice.call(this._arr || this, 0)
8188 }
8189 }
8190
8191 function base64Slice (buf, start, end) {
8192 if (start === 0 && end === buf.length) {
8193 return base64.fromByteArray(buf)
8194 } else {
8195 return base64.fromByteArray(buf.slice(start, end))
8196 }
8197 }
8198
8199 function utf8Slice (buf, start, end) {
8200 end = Math.min(buf.length, end)
8201 var firstByte
8202 var secondByte
8203 var thirdByte
8204 var fourthByte
8205 var bytesPerSequence
8206 var tempCodePoint
8207 var codePoint
8208 var res = []
8209 var i = start
8210
8211 for (; i < end; i += bytesPerSequence) {
8212 firstByte = buf[i]
8213 codePoint = 0xFFFD
8214
8215 if (firstByte > 0xEF) {
8216 bytesPerSequence = 4
8217 } else if (firstByte > 0xDF) {
8218 bytesPerSequence = 3
8219 } else if (firstByte > 0xBF) {
8220 bytesPerSequence = 2
8221 } else {
8222 bytesPerSequence = 1
8223 }
8224
8225 if (i + bytesPerSequence <= end) {
8226 switch (bytesPerSequence) {
8227 case 1:
8228 if (firstByte < 0x80) {
8229 codePoint = firstByte
8230 }
8231 break
8232 case 2:
8233 secondByte = buf[i + 1]
8234 if ((secondByte & 0xC0) === 0x80) {
8235 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8236 if (tempCodePoint > 0x7F) {
8237 codePoint = tempCodePoint
8238 }
8239 }
8240 break
8241 case 3:
8242 secondByte = buf[i + 1]
8243 thirdByte = buf[i + 2]
8244 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
8245 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
8246 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
8247 codePoint = tempCodePoint
8248 }
8249 }
8250 break
8251 case 4:
8252 secondByte = buf[i + 1]
8253 thirdByte = buf[i + 2]
8254 fourthByte = buf[i + 3]
8255 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
8256 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
8257 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
8258 codePoint = tempCodePoint
8259 }
8260 }
8261 }
8262 }
8263
8264 if (codePoint === 0xFFFD) {
8265 // we generated an invalid codePoint so make sure to only advance by 1 byte
8266 bytesPerSequence = 1
8267 } else if (codePoint > 0xFFFF) {
8268 // encode to utf16 (surrogate pair dance)
8269 codePoint -= 0x10000
8270 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
8271 codePoint = 0xDC00 | codePoint & 0x3FF
8272 }
8273
8274 res.push(codePoint)
8275 }
8276
8277 return String.fromCharCode.apply(String, res)
8278 }
8279
8280 function asciiSlice (buf, start, end) {
8281 var ret = ''
8282 end = Math.min(buf.length, end)
8283
8284 for (var i = start; i < end; i++) {
8285 ret += String.fromCharCode(buf[i] & 0x7F)
8286 }
8287 return ret
8288 }
8289
8290 function binarySlice (buf, start, end) {
8291 var ret = ''
8292 end = Math.min(buf.length, end)
8293
8294 for (var i = start; i < end; i++) {
8295 ret += String.fromCharCode(buf[i])
8296 }
8297 return ret
8298 }
8299
8300 function hexSlice (buf, start, end) {
8301 var len = buf.length
8302
8303 if (!start || start < 0) start = 0
8304 if (!end || end < 0 || end > len) end = len
8305
8306 var out = ''
8307 for (var i = start; i < end; i++) {
8308 out += toHex(buf[i])
8309 }
8310 return out
8311 }
8312
8313 function utf16leSlice (buf, start, end) {
8314 var bytes = buf.slice(start, end)
8315 var res = ''
8316 for (var i = 0; i < bytes.length; i += 2) {
8317 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
8318 }
8319 return res
8320 }
8321
8322 Buffer.prototype.slice = function slice (start, end) {
8323 var len = this.length
8324 start = ~~start
8325 end = end === undefined ? len : ~~end
8326
8327 if (start < 0) {
8328 start += len
8329 if (start < 0) start = 0
8330 } else if (start > len) {
8331 start = len
8332 }
8333
8334 if (end < 0) {
8335 end += len
8336 if (end < 0) end = 0
8337 } else if (end > len) {
8338 end = len
8339 }
8340
8341 if (end < start) end = start
8342
8343 var newBuf
8344 if (Buffer.TYPED_ARRAY_SUPPORT) {
8345 newBuf = Buffer._augment(this.subarray(start, end))
8346 } else {
8347 var sliceLen = end - start
8348 newBuf = new Buffer(sliceLen, undefined)
8349 for (var i = 0; i < sliceLen; i++) {
8350 newBuf[i] = this[i + start]
8351 }
8352 }
8353
8354 if (newBuf.length) newBuf.parent = this.parent || this
8355
8356 return newBuf
8357 }
8358
8359 /*
8360 * Need to make sure that buffer isn't trying to write out of bounds.
8361 */
8362 function checkOffset (offset, ext, length) {
8363 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8364 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8365 }
8366
8367 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8368 offset = offset | 0
8369 byteLength = byteLength | 0
8370 if (!noAssert) checkOffset(offset, byteLength, this.length)
8371
8372 var val = this[offset]
8373 var mul = 1
8374 var i = 0
8375 while (++i < byteLength && (mul *= 0x100)) {
8376 val += this[offset + i] * mul
8377 }
8378
8379 return val
8380 }
8381
8382 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
8383 offset = offset | 0
8384 byteLength = byteLength | 0
8385 if (!noAssert) {
8386 checkOffset(offset, byteLength, this.length)
8387 }
8388
8389 var val = this[offset + --byteLength]
8390 var mul = 1
8391 while (byteLength > 0 && (mul *= 0x100)) {
8392 val += this[offset + --byteLength] * mul
8393 }
8394
8395 return val
8396 }
8397
8398 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
8399 if (!noAssert) checkOffset(offset, 1, this.length)
8400 return this[offset]
8401 }
8402
8403 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
8404 if (!noAssert) checkOffset(offset, 2, this.length)
8405 return this[offset] | (this[offset + 1] << 8)
8406 }
8407
8408 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
8409 if (!noAssert) checkOffset(offset, 2, this.length)
8410 return (this[offset] << 8) | this[offset + 1]
8411 }
8412
8413 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
8414 if (!noAssert) checkOffset(offset, 4, this.length)
8415
8416 return ((this[offset]) |
8417 (this[offset + 1] << 8) |
8418 (this[offset + 2] << 16)) +
8419 (this[offset + 3] * 0x1000000)
8420 }
8421
8422 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
8423 if (!noAssert) checkOffset(offset, 4, this.length)
8424
8425 return (this[offset] * 0x1000000) +
8426 ((this[offset + 1] << 16) |
8427 (this[offset + 2] << 8) |
8428 this[offset + 3])
8429 }
8430
8431 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
8432 offset = offset | 0
8433 byteLength = byteLength | 0
8434 if (!noAssert) checkOffset(offset, byteLength, this.length)
8435
8436 var val = this[offset]
8437 var mul = 1
8438 var i = 0
8439 while (++i < byteLength && (mul *= 0x100)) {
8440 val += this[offset + i] * mul
8441 }
8442 mul *= 0x80
8443
8444 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8445
8446 return val
8447 }
8448
8449 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
8450 offset = offset | 0
8451 byteLength = byteLength | 0
8452 if (!noAssert) checkOffset(offset, byteLength, this.length)
8453
8454 var i = byteLength
8455 var mul = 1
8456 var val = this[offset + --i]
8457 while (i > 0 && (mul *= 0x100)) {
8458 val += this[offset + --i] * mul
8459 }
8460 mul *= 0x80
8461
8462 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8463
8464 return val
8465 }
8466
8467 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
8468 if (!noAssert) checkOffset(offset, 1, this.length)
8469 if (!(this[offset] & 0x80)) return (this[offset])
8470 return ((0xff - this[offset] + 1) * -1)
8471 }
8472
8473 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
8474 if (!noAssert) checkOffset(offset, 2, this.length)
8475 var val = this[offset] | (this[offset + 1] << 8)
8476 return (val & 0x8000) ? val | 0xFFFF0000 : val
8477 }
8478
8479 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
8480 if (!noAssert) checkOffset(offset, 2, this.length)
8481 var val = this[offset + 1] | (this[offset] << 8)
8482 return (val & 0x8000) ? val | 0xFFFF0000 : val
8483 }
8484
8485 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
8486 if (!noAssert) checkOffset(offset, 4, this.length)
8487
8488 return (this[offset]) |
8489 (this[offset + 1] << 8) |
8490 (this[offset + 2] << 16) |
8491 (this[offset + 3] << 24)
8492 }
8493
8494 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
8495 if (!noAssert) checkOffset(offset, 4, this.length)
8496
8497 return (this[offset] << 24) |
8498 (this[offset + 1] << 16) |
8499 (this[offset + 2] << 8) |
8500 (this[offset + 3])
8501 }
8502
8503 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
8504 if (!noAssert) checkOffset(offset, 4, this.length)
8505 return ieee754.read(this, offset, true, 23, 4)
8506 }
8507
8508 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
8509 if (!noAssert) checkOffset(offset, 4, this.length)
8510 return ieee754.read(this, offset, false, 23, 4)
8511 }
8512
8513 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
8514 if (!noAssert) checkOffset(offset, 8, this.length)
8515 return ieee754.read(this, offset, true, 52, 8)
8516 }
8517
8518 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
8519 if (!noAssert) checkOffset(offset, 8, this.length)
8520 return ieee754.read(this, offset, false, 52, 8)
8521 }
8522
8523 function checkInt (buf, value, offset, ext, max, min) {
8524 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
8525 if (value > max || value < min) throw new RangeError('value is out of bounds')
8526 if (offset + ext > buf.length) throw new RangeError('index out of range')
8527 }
8528
8529 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
8530 value = +value
8531 offset = offset | 0
8532 byteLength = byteLength | 0
8533 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8534
8535 var mul = 1
8536 var i = 0
8537 this[offset] = value & 0xFF
8538 while (++i < byteLength && (mul *= 0x100)) {
8539 this[offset + i] = (value / mul) & 0xFF
8540 }
8541
8542 return offset + byteLength
8543 }
8544
8545 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
8546 value = +value
8547 offset = offset | 0
8548 byteLength = byteLength | 0
8549 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8550
8551 var i = byteLength - 1
8552 var mul = 1
8553 this[offset + i] = value & 0xFF
8554 while (--i >= 0 && (mul *= 0x100)) {
8555 this[offset + i] = (value / mul) & 0xFF
8556 }
8557
8558 return offset + byteLength
8559 }
8560
8561 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
8562 value = +value
8563 offset = offset | 0
8564 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
8565 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8566 this[offset] = value
8567 return offset + 1
8568 }
8569
8570 function objectWriteUInt16 (buf, value, offset, littleEndian) {
8571 if (value < 0) value = 0xffff + value + 1
8572 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
8573 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
8574 (littleEndian ? i : 1 - i) * 8
8575 }
8576 }
8577
8578 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
8579 value = +value
8580 offset = offset | 0
8581 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8582 if (Buffer.TYPED_ARRAY_SUPPORT) {
8583 this[offset] = value
8584 this[offset + 1] = (value >>> 8)
8585 } else {
8586 objectWriteUInt16(this, value, offset, true)
8587 }
8588 return offset + 2
8589 }
8590
8591 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
8592 value = +value
8593 offset = offset | 0
8594 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8595 if (Buffer.TYPED_ARRAY_SUPPORT) {
8596 this[offset] = (value >>> 8)
8597 this[offset + 1] = value
8598 } else {
8599 objectWriteUInt16(this, value, offset, false)
8600 }
8601 return offset + 2
8602 }
8603
8604 function objectWriteUInt32 (buf, value, offset, littleEndian) {
8605 if (value < 0) value = 0xffffffff + value + 1
8606 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
8607 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
8608 }
8609 }
8610
8611 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
8612 value = +value
8613 offset = offset | 0
8614 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8615 if (Buffer.TYPED_ARRAY_SUPPORT) {
8616 this[offset + 3] = (value >>> 24)
8617 this[offset + 2] = (value >>> 16)
8618 this[offset + 1] = (value >>> 8)
8619 this[offset] = value
8620 } else {
8621 objectWriteUInt32(this, value, offset, true)
8622 }
8623 return offset + 4
8624 }
8625
8626 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
8627 value = +value
8628 offset = offset | 0
8629 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8630 if (Buffer.TYPED_ARRAY_SUPPORT) {
8631 this[offset] = (value >>> 24)
8632 this[offset + 1] = (value >>> 16)
8633 this[offset + 2] = (value >>> 8)
8634 this[offset + 3] = value
8635 } else {
8636 objectWriteUInt32(this, value, offset, false)
8637 }
8638 return offset + 4
8639 }
8640
8641 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
8642 value = +value
8643 offset = offset | 0
8644 if (!noAssert) {
8645 var limit = Math.pow(2, 8 * byteLength - 1)
8646
8647 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8648 }
8649
8650 var i = 0
8651 var mul = 1
8652 var sub = value < 0 ? 1 : 0
8653 this[offset] = value & 0xFF
8654 while (++i < byteLength && (mul *= 0x100)) {
8655 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8656 }
8657
8658 return offset + byteLength
8659 }
8660
8661 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
8662 value = +value
8663 offset = offset | 0
8664 if (!noAssert) {
8665 var limit = Math.pow(2, 8 * byteLength - 1)
8666
8667 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8668 }
8669
8670 var i = byteLength - 1
8671 var mul = 1
8672 var sub = value < 0 ? 1 : 0
8673 this[offset + i] = value & 0xFF
8674 while (--i >= 0 && (mul *= 0x100)) {
8675 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8676 }
8677
8678 return offset + byteLength
8679 }
8680
8681 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
8682 value = +value
8683 offset = offset | 0
8684 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
8685 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8686 if (value < 0) value = 0xff + value + 1
8687 this[offset] = value
8688 return offset + 1
8689 }
8690
8691 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
8692 value = +value
8693 offset = offset | 0
8694 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8695 if (Buffer.TYPED_ARRAY_SUPPORT) {
8696 this[offset] = value
8697 this[offset + 1] = (value >>> 8)
8698 } else {
8699 objectWriteUInt16(this, value, offset, true)
8700 }
8701 return offset + 2
8702 }
8703
8704 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
8705 value = +value
8706 offset = offset | 0
8707 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8708 if (Buffer.TYPED_ARRAY_SUPPORT) {
8709 this[offset] = (value >>> 8)
8710 this[offset + 1] = value
8711 } else {
8712 objectWriteUInt16(this, value, offset, false)
8713 }
8714 return offset + 2
8715 }
8716
8717 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
8718 value = +value
8719 offset = offset | 0
8720 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8721 if (Buffer.TYPED_ARRAY_SUPPORT) {
8722 this[offset] = value
8723 this[offset + 1] = (value >>> 8)
8724 this[offset + 2] = (value >>> 16)
8725 this[offset + 3] = (value >>> 24)
8726 } else {
8727 objectWriteUInt32(this, value, offset, true)
8728 }
8729 return offset + 4
8730 }
8731
8732 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
8733 value = +value
8734 offset = offset | 0
8735 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8736 if (value < 0) value = 0xffffffff + value + 1
8737 if (Buffer.TYPED_ARRAY_SUPPORT) {
8738 this[offset] = (value >>> 24)
8739 this[offset + 1] = (value >>> 16)
8740 this[offset + 2] = (value >>> 8)
8741 this[offset + 3] = value
8742 } else {
8743 objectWriteUInt32(this, value, offset, false)
8744 }
8745 return offset + 4
8746 }
8747
8748 function checkIEEE754 (buf, value, offset, ext, max, min) {
8749 if (value > max || value < min) throw new RangeError('value is out of bounds')
8750 if (offset + ext > buf.length) throw new RangeError('index out of range')
8751 if (offset < 0) throw new RangeError('index out of range')
8752 }
8753
8754 function writeFloat (buf, value, offset, littleEndian, noAssert) {
8755 if (!noAssert) {
8756 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8757 }
8758 ieee754.write(buf, value, offset, littleEndian, 23, 4)
8759 return offset + 4
8760 }
8761
8762 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
8763 return writeFloat(this, value, offset, true, noAssert)
8764 }
8765
8766 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
8767 return writeFloat(this, value, offset, false, noAssert)
8768 }
8769
8770 function writeDouble (buf, value, offset, littleEndian, noAssert) {
8771 if (!noAssert) {
8772 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8773 }
8774 ieee754.write(buf, value, offset, littleEndian, 52, 8)
8775 return offset + 8
8776 }
8777
8778 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
8779 return writeDouble(this, value, offset, true, noAssert)
8780 }
8781
8782 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
8783 return writeDouble(this, value, offset, false, noAssert)
8784 }
8785
8786 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
8787 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
8788 if (!start) start = 0
8789 if (!end && end !== 0) end = this.length
8790 if (targetStart >= target.length) targetStart = target.length
8791 if (!targetStart) targetStart = 0
8792 if (end > 0 && end < start) end = start
8793
8794 // Copy 0 bytes; we're done
8795 if (end === start) return 0
8796 if (target.length === 0 || this.length === 0) return 0
8797
8798 // Fatal error conditions
8799 if (targetStart < 0) {
8800 throw new RangeError('targetStart out of bounds')
8801 }
8802 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
8803 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8804
8805 // Are we oob?
8806 if (end > this.length) end = this.length
8807 if (target.length - targetStart < end - start) {
8808 end = target.length - targetStart + start
8809 }
8810
8811 var len = end - start
8812 var i
8813
8814 if (this === target && start < targetStart && targetStart < end) {
8815 // descending copy from end
8816 for (i = len - 1; i >= 0; i--) {
8817 target[i + targetStart] = this[i + start]
8818 }
8819 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
8820 // ascending copy from start
8821 for (i = 0; i < len; i++) {
8822 target[i + targetStart] = this[i + start]
8823 }
8824 } else {
8825 target._set(this.subarray(start, start + len), targetStart)
8826 }
8827
8828 return len
8829 }
8830
8831 // fill(value, start=0, end=buffer.length)
8832 Buffer.prototype.fill = function fill (value, start, end) {
8833 if (!value) value = 0
8834 if (!start) start = 0
8835 if (!end) end = this.length
8836
8837 if (end < start) throw new RangeError('end < start')
8838
8839 // Fill 0 bytes; we're done
8840 if (end === start) return
8841 if (this.length === 0) return
8842
8843 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
8844 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
8845
8846 var i
8847 if (typeof value === 'number') {
8848 for (i = start; i < end; i++) {
8849 this[i] = value
8850 }
8851 } else {
8852 var bytes = utf8ToBytes(value.toString())
8853 var len = bytes.length
8854 for (i = start; i < end; i++) {
8855 this[i] = bytes[i % len]
8856 }
8857 }
8858
8859 return this
8860 }
8861
8862 /**
8863 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
8864 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
8865 */
8866 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
8867 if (typeof Uint8Array !== 'undefined') {
8868 if (Buffer.TYPED_ARRAY_SUPPORT) {
8869 return (new Buffer(this)).buffer
8870 } else {
8871 var buf = new Uint8Array(this.length)
8872 for (var i = 0, len = buf.length; i < len; i += 1) {
8873 buf[i] = this[i]
8874 }
8875 return buf.buffer
8876 }
8877 } else {
8878 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
8879 }
8880 }
8881
8882 // HELPER FUNCTIONS
8883 // ================
8884
8885 var BP = Buffer.prototype
8886
8887 /**
8888 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
8889 */
8890 Buffer._augment = function _augment (arr) {
8891 arr.constructor = Buffer
8892 arr._isBuffer = true
8893
8894 // save reference to original Uint8Array set method before overwriting
8895 arr._set = arr.set
8896
8897 // deprecated
8898 arr.get = BP.get
8899 arr.set = BP.set
8900
8901 arr.write = BP.write
8902 arr.toString = BP.toString
8903 arr.toLocaleString = BP.toString
8904 arr.toJSON = BP.toJSON
8905 arr.equals = BP.equals
8906 arr.compare = BP.compare
8907 arr.indexOf = BP.indexOf
8908 arr.copy = BP.copy
8909 arr.slice = BP.slice
8910 arr.readUIntLE = BP.readUIntLE
8911 arr.readUIntBE = BP.readUIntBE
8912 arr.readUInt8 = BP.readUInt8
8913 arr.readUInt16LE = BP.readUInt16LE
8914 arr.readUInt16BE = BP.readUInt16BE
8915 arr.readUInt32LE = BP.readUInt32LE
8916 arr.readUInt32BE = BP.readUInt32BE
8917 arr.readIntLE = BP.readIntLE
8918 arr.readIntBE = BP.readIntBE
8919 arr.readInt8 = BP.readInt8
8920 arr.readInt16LE = BP.readInt16LE
8921 arr.readInt16BE = BP.readInt16BE
8922 arr.readInt32LE = BP.readInt32LE
8923 arr.readInt32BE = BP.readInt32BE
8924 arr.readFloatLE = BP.readFloatLE
8925 arr.readFloatBE = BP.readFloatBE
8926 arr.readDoubleLE = BP.readDoubleLE
8927 arr.readDoubleBE = BP.readDoubleBE
8928 arr.writeUInt8 = BP.writeUInt8
8929 arr.writeUIntLE = BP.writeUIntLE
8930 arr.writeUIntBE = BP.writeUIntBE
8931 arr.writeUInt16LE = BP.writeUInt16LE
8932 arr.writeUInt16BE = BP.writeUInt16BE
8933 arr.writeUInt32LE = BP.writeUInt32LE
8934 arr.writeUInt32BE = BP.writeUInt32BE
8935 arr.writeIntLE = BP.writeIntLE
8936 arr.writeIntBE = BP.writeIntBE
8937 arr.writeInt8 = BP.writeInt8
8938 arr.writeInt16LE = BP.writeInt16LE
8939 arr.writeInt16BE = BP.writeInt16BE
8940 arr.writeInt32LE = BP.writeInt32LE
8941 arr.writeInt32BE = BP.writeInt32BE
8942 arr.writeFloatLE = BP.writeFloatLE
8943 arr.writeFloatBE = BP.writeFloatBE
8944 arr.writeDoubleLE = BP.writeDoubleLE
8945 arr.writeDoubleBE = BP.writeDoubleBE
8946 arr.fill = BP.fill
8947 arr.inspect = BP.inspect
8948 arr.toArrayBuffer = BP.toArrayBuffer
8949
8950 return arr
8951 }
8952
8953 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
8954
8955 function base64clean (str) {
8956 // Node strips out invalid characters like \n and \t from the string, base64-js does not
8957 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
8958 // Node converts strings with length < 2 to ''
8959 if (str.length < 2) return ''
8960 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
8961 while (str.length % 4 !== 0) {
8962 str = str + '='
8963 }
8964 return str
8965 }
8966
8967 function stringtrim (str) {
8968 if (str.trim) return str.trim()
8969 return str.replace(/^\s+|\s+$/g, '')
8970 }
8971
8972 function toHex (n) {
8973 if (n < 16) return '0' + n.toString(16)
8974 return n.toString(16)
8975 }
8976
8977 function utf8ToBytes (string, units) {
8978 units = units || Infinity
8979 var codePoint
8980 var length = string.length
8981 var leadSurrogate = null
8982 var bytes = []
8983
8984 for (var i = 0; i < length; i++) {
8985 codePoint = string.charCodeAt(i)
8986
8987 // is surrogate component
8988 if (codePoint > 0xD7FF && codePoint < 0xE000) {
8989 // last char was a lead
8990 if (!leadSurrogate) {
8991 // no lead yet
8992 if (codePoint > 0xDBFF) {
8993 // unexpected trail
8994 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8995 continue
8996
8997 } else if (i + 1 === length) {
8998 // unpaired lead
8999 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9000 continue
9001 }
9002
9003 // valid lead
9004 leadSurrogate = codePoint
9005
9006 continue
9007 }
9008
9009 // 2 leads in a row
9010 if (codePoint < 0xDC00) {
9011 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9012 leadSurrogate = codePoint
9013 continue
9014 }
9015
9016 // valid surrogate pair
9017 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
9018
9019 } else if (leadSurrogate) {
9020 // valid bmp char, but last char was a lead
9021 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9022 }
9023
9024 leadSurrogate = null
9025
9026 // encode utf8
9027 if (codePoint < 0x80) {
9028 if ((units -= 1) < 0) break
9029 bytes.push(codePoint)
9030 } else if (codePoint < 0x800) {
9031 if ((units -= 2) < 0) break
9032 bytes.push(
9033 codePoint >> 0x6 | 0xC0,
9034 codePoint & 0x3F | 0x80
9035 )
9036 } else if (codePoint < 0x10000) {
9037 if ((units -= 3) < 0) break
9038 bytes.push(
9039 codePoint >> 0xC | 0xE0,
9040 codePoint >> 0x6 & 0x3F | 0x80,
9041 codePoint & 0x3F | 0x80
9042 )
9043 } else if (codePoint < 0x110000) {
9044 if ((units -= 4) < 0) break
9045 bytes.push(
9046 codePoint >> 0x12 | 0xF0,
9047 codePoint >> 0xC & 0x3F | 0x80,
9048 codePoint >> 0x6 & 0x3F | 0x80,
9049 codePoint & 0x3F | 0x80
9050 )
9051 } else {
9052 throw new Error('Invalid code point')
9053 }
9054 }
9055
9056 return bytes
9057 }
9058
9059 function asciiToBytes (str) {
9060 var byteArray = []
9061 for (var i = 0; i < str.length; i++) {
9062 // Node's code seems to be doing this and not & 0x7F..
9063 byteArray.push(str.charCodeAt(i) & 0xFF)
9064 }
9065 return byteArray
9066 }
9067
9068 function utf16leToBytes (str, units) {
9069 var c, hi, lo
9070 var byteArray = []
9071 for (var i = 0; i < str.length; i++) {
9072 if ((units -= 2) < 0) break
9073
9074 c = str.charCodeAt(i)
9075 hi = c >> 8
9076 lo = c % 256
9077 byteArray.push(lo)
9078 byteArray.push(hi)
9079 }
9080
9081 return byteArray
9082 }
9083
9084 function base64ToBytes (str) {
9085 return base64.toByteArray(base64clean(str))
9086 }
9087
9088 function blitBuffer (src, dst, offset, length) {
9089 for (var i = 0; i < length; i++) {
9090 if ((i + offset >= dst.length) || (i >= src.length)) break
9091 dst[i + offset] = src[i]
9092 }
9093 return i
9094 }
9095
9096 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
9097 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
9098
9099 ;(function (exports) {
9100 'use strict';
9101
9102 var Arr = (typeof Uint8Array !== 'undefined')
9103 ? Uint8Array
9104 : Array
9105
9106 var PLUS = '+'.charCodeAt(0)
9107 var SLASH = '/'.charCodeAt(0)
9108 var NUMBER = '0'.charCodeAt(0)
9109 var LOWER = 'a'.charCodeAt(0)
9110 var UPPER = 'A'.charCodeAt(0)
9111 var PLUS_URL_SAFE = '-'.charCodeAt(0)
9112 var SLASH_URL_SAFE = '_'.charCodeAt(0)
9113
9114 function decode (elt) {
9115 var code = elt.charCodeAt(0)
9116 if (code === PLUS ||
9117 code === PLUS_URL_SAFE)
9118 return 62 // '+'
9119 if (code === SLASH ||
9120 code === SLASH_URL_SAFE)
9121 return 63 // '/'
9122 if (code < NUMBER)
9123 return -1 //no match
9124 if (code < NUMBER + 10)
9125 return code - NUMBER + 26 + 26
9126 if (code < UPPER + 26)
9127 return code - UPPER
9128 if (code < LOWER + 26)
9129 return code - LOWER + 26
9130 }
9131
9132 function b64ToByteArray (b64) {
9133 var i, j, l, tmp, placeHolders, arr
9134
9135 if (b64.length % 4 > 0) {
9136 throw new Error('Invalid string. Length must be a multiple of 4')
9137 }
9138
9139 // the number of equal signs (place holders)
9140 // if there are two placeholders, than the two characters before it
9141 // represent one byte
9142 // if there is only one, then the three characters before it represent 2 bytes
9143 // this is just a cheap hack to not do indexOf twice
9144 var len = b64.length
9145 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
9146
9147 // base64 is 4/3 + up to two characters of the original data
9148 arr = new Arr(b64.length * 3 / 4 - placeHolders)
9149
9150 // if there are placeholders, only get up to the last complete 4 chars
9151 l = placeHolders > 0 ? b64.length - 4 : b64.length
9152
9153 var L = 0
9154
9155 function push (v) {
9156 arr[L++] = v
9157 }
9158
9159 for (i = 0, j = 0; i < l; i += 4, j += 3) {
9160 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
9161 push((tmp & 0xFF0000) >> 16)
9162 push((tmp & 0xFF00) >> 8)
9163 push(tmp & 0xFF)
9164 }
9165
9166 if (placeHolders === 2) {
9167 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
9168 push(tmp & 0xFF)
9169 } else if (placeHolders === 1) {
9170 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
9171 push((tmp >> 8) & 0xFF)
9172 push(tmp & 0xFF)
9173 }
9174
9175 return arr
9176 }
9177
9178 function uint8ToBase64 (uint8) {
9179 var i,
9180 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
9181 output = "",
9182 temp, length
9183
9184 function encode (num) {
9185 return lookup.charAt(num)
9186 }
9187
9188 function tripletToBase64 (num) {
9189 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
9190 }
9191
9192 // go through the array every three bytes, we'll deal with trailing stuff later
9193 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
9194 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
9195 output += tripletToBase64(temp)
9196 }
9197
9198 // pad the end with zeros, but make sure to not forget the extra bytes
9199 switch (extraBytes) {
9200 case 1:
9201 temp = uint8[uint8.length - 1]
9202 output += encode(temp >> 2)
9203 output += encode((temp << 4) & 0x3F)
9204 output += '=='
9205 break
9206 case 2:
9207 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
9208 output += encode(temp >> 10)
9209 output += encode((temp >> 4) & 0x3F)
9210 output += encode((temp << 2) & 0x3F)
9211 output += '='
9212 break
9213 }
9214
9215 return output
9216 }
9217
9218 exports.toByteArray = b64ToByteArray
9219 exports.fromByteArray = uint8ToBase64
9220 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
9221
9222 },{}],9:[function(require,module,exports){
9223 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
9224 var e, m
9225 var eLen = nBytes * 8 - mLen - 1
9226 var eMax = (1 << eLen) - 1
9227 var eBias = eMax >> 1
9228 var nBits = -7
9229 var i = isLE ? (nBytes - 1) : 0
9230 var d = isLE ? -1 : 1
9231 var s = buffer[offset + i]
9232
9233 i += d
9234
9235 e = s & ((1 << (-nBits)) - 1)
9236 s >>= (-nBits)
9237 nBits += eLen
9238 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
9239
9240 m = e & ((1 << (-nBits)) - 1)
9241 e >>= (-nBits)
9242 nBits += mLen
9243 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
9244
9245 if (e === 0) {
9246 e = 1 - eBias
9247 } else if (e === eMax) {
9248 return m ? NaN : ((s ? -1 : 1) * Infinity)
9249 } else {
9250 m = m + Math.pow(2, mLen)
9251 e = e - eBias
9252 }
9253 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
9254 }
9255
9256 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
9257 var e, m, c
9258 var eLen = nBytes * 8 - mLen - 1
9259 var eMax = (1 << eLen) - 1
9260 var eBias = eMax >> 1
9261 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
9262 var i = isLE ? 0 : (nBytes - 1)
9263 var d = isLE ? 1 : -1
9264 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
9265
9266 value = Math.abs(value)
9267
9268 if (isNaN(value) || value === Infinity) {
9269 m = isNaN(value) ? 1 : 0
9270 e = eMax
9271 } else {
9272 e = Math.floor(Math.log(value) / Math.LN2)
9273 if (value * (c = Math.pow(2, -e)) < 1) {
9274 e--
9275 c *= 2
9276 }
9277 if (e + eBias >= 1) {
9278 value += rt / c
9279 } else {
9280 value += rt * Math.pow(2, 1 - eBias)
9281 }
9282 if (value * c >= 2) {
9283 e++
9284 c /= 2
9285 }
9286
9287 if (e + eBias >= eMax) {
9288 m = 0
9289 e = eMax
9290 } else if (e + eBias >= 1) {
9291 m = (value * c - 1) * Math.pow(2, mLen)
9292 e = e + eBias
9293 } else {
9294 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
9295 e = 0
9296 }
9297 }
9298
9299 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
9300
9301 e = (e << mLen) | m
9302 eLen += mLen
9303 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
9304
9305 buffer[offset + i - d] |= s * 128
9306 }
9307
9308 },{}],10:[function(require,module,exports){
9309
9310 /**
9311 * isArray
9312 */
9313
9314 var isArray = Array.isArray;
9315
9316 /**
9317 * toString
9318 */
9319
9320 var str = Object.prototype.toString;
9321
9322 /**
9323 * Whether or not the given `val`
9324 * is an array.
9325 *
9326 * example:
9327 *
9328 * isArray([]);
9329 * // > true
9330 * isArray(arguments);
9331 * // > false
9332 * isArray('');
9333 * // > false
9334 *
9335 * @param {mixed} val
9336 * @return {bool}
9337 */
9338
9339 module.exports = isArray || function (val) {
9340 return !! val && '[object Array]' == str.call(val);
9341 };
9342
9343 },{}],11:[function(require,module,exports){
9344 // Copyright Joyent, Inc. and other Node contributors.
9345 //
9346 // Permission is hereby granted, free of charge, to any person obtaining a
9347 // copy of this software and associated documentation files (the
9348 // "Software"), to deal in the Software without restriction, including
9349 // without limitation the rights to use, copy, modify, merge, publish,
9350 // distribute, sublicense, and/or sell copies of the Software, and to permit
9351 // persons to whom the Software is furnished to do so, subject to the
9352 // following conditions:
9353 //
9354 // The above copyright notice and this permission notice shall be included
9355 // in all copies or substantial portions of the Software.
9356 //
9357 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9358 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9359 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9360 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9361 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9362 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9363 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9364
9365 function EventEmitter() {
9366 this._events = this._events || {};
9367 this._maxListeners = this._maxListeners || undefined;
9368 }
9369 module.exports = EventEmitter;
9370
9371 // Backwards-compat with node 0.10.x
9372 EventEmitter.EventEmitter = EventEmitter;
9373
9374 EventEmitter.prototype._events = undefined;
9375 EventEmitter.prototype._maxListeners = undefined;
9376
9377 // By default EventEmitters will print a warning if more than 10 listeners are
9378 // added to it. This is a useful default which helps finding memory leaks.
9379 EventEmitter.defaultMaxListeners = 10;
9380
9381 // Obviously not all Emitters should be limited to 10. This function allows
9382 // that to be increased. Set to zero for unlimited.
9383 EventEmitter.prototype.setMaxListeners = function(n) {
9384 if (!isNumber(n) || n < 0 || isNaN(n))
9385 throw TypeError('n must be a positive number');
9386 this._maxListeners = n;
9387 return this;
9388 };
9389
9390 EventEmitter.prototype.emit = function(type) {
9391 var er, handler, len, args, i, listeners;
9392
9393 if (!this._events)
9394 this._events = {};
9395
9396 // If there is no 'error' event listener then throw.
9397 if (type === 'error') {
9398 if (!this._events.error ||
9399 (isObject(this._events.error) && !this._events.error.length)) {
9400 er = arguments[1];
9401 if (er instanceof Error) {
9402 throw er; // Unhandled 'error' event
9403 }
9404 throw TypeError('Uncaught, unspecified "error" event.');
9405 }
9406 }
9407
9408 handler = this._events[type];
9409
9410 if (isUndefined(handler))
9411 return false;
9412
9413 if (isFunction(handler)) {
9414 switch (arguments.length) {
9415 // fast cases
9416 case 1:
9417 handler.call(this);
9418 break;
9419 case 2:
9420 handler.call(this, arguments[1]);
9421 break;
9422 case 3:
9423 handler.call(this, arguments[1], arguments[2]);
9424 break;
9425 // slower
9426 default:
9427 len = arguments.length;
9428 args = new Array(len - 1);
9429 for (i = 1; i < len; i++)
9430 args[i - 1] = arguments[i];
9431 handler.apply(this, args);
9432 }
9433 } else if (isObject(handler)) {
9434 len = arguments.length;
9435 args = new Array(len - 1);
9436 for (i = 1; i < len; i++)
9437 args[i - 1] = arguments[i];
9438
9439 listeners = handler.slice();
9440 len = listeners.length;
9441 for (i = 0; i < len; i++)
9442 listeners[i].apply(this, args);
9443 }
9444
9445 return true;
9446 };
9447
9448 EventEmitter.prototype.addListener = function(type, listener) {
9449 var m;
9450
9451 if (!isFunction(listener))
9452 throw TypeError('listener must be a function');
9453
9454 if (!this._events)
9455 this._events = {};
9456
9457 // To avoid recursion in the case that type === "newListener"! Before
9458 // adding it to the listeners, first emit "newListener".
9459 if (this._events.newListener)
9460 this.emit('newListener', type,
9461 isFunction(listener.listener) ?
9462 listener.listener : listener);
9463
9464 if (!this._events[type])
9465 // Optimize the case of one listener. Don't need the extra array object.
9466 this._events[type] = listener;
9467 else if (isObject(this._events[type]))
9468 // If we've already got an array, just append.
9469 this._events[type].push(listener);
9470 else
9471 // Adding the second element, need to change to array.
9472 this._events[type] = [this._events[type], listener];
9473
9474 // Check for listener leak
9475 if (isObject(this._events[type]) && !this._events[type].warned) {
9476 var m;
9477 if (!isUndefined(this._maxListeners)) {
9478 m = this._maxListeners;
9479 } else {
9480 m = EventEmitter.defaultMaxListeners;
9481 }
9482
9483 if (m && m > 0 && this._events[type].length > m) {
9484 this._events[type].warned = true;
9485 console.error('(node) warning: possible EventEmitter memory ' +
9486 'leak detected. %d listeners added. ' +
9487 'Use emitter.setMaxListeners() to increase limit.',
9488 this._events[type].length);
9489 if (typeof console.trace === 'function') {
9490 // not supported in IE 10
9491 console.trace();
9492 }
9493 }
9494 }
9495
9496 return this;
9497 };
9498
9499 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
9500
9501 EventEmitter.prototype.once = function(type, listener) {
9502 if (!isFunction(listener))
9503 throw TypeError('listener must be a function');
9504
9505 var fired = false;
9506
9507 function g() {
9508 this.removeListener(type, g);
9509
9510 if (!fired) {
9511 fired = true;
9512 listener.apply(this, arguments);
9513 }
9514 }
9515
9516 g.listener = listener;
9517 this.on(type, g);
9518
9519 return this;
9520 };
9521
9522 // emits a 'removeListener' event iff the listener was removed
9523 EventEmitter.prototype.removeListener = function(type, listener) {
9524 var list, position, length, i;
9525
9526 if (!isFunction(listener))
9527 throw TypeError('listener must be a function');
9528
9529 if (!this._events || !this._events[type])
9530 return this;
9531
9532 list = this._events[type];
9533 length = list.length;
9534 position = -1;
9535
9536 if (list === listener ||
9537 (isFunction(list.listener) && list.listener === listener)) {
9538 delete this._events[type];
9539 if (this._events.removeListener)
9540 this.emit('removeListener', type, listener);
9541
9542 } else if (isObject(list)) {
9543 for (i = length; i-- > 0;) {
9544 if (list[i] === listener ||
9545 (list[i].listener && list[i].listener === listener)) {
9546 position = i;
9547 break;
9548 }
9549 }
9550
9551 if (position < 0)
9552 return this;
9553
9554 if (list.length === 1) {
9555 list.length = 0;
9556 delete this._events[type];
9557 } else {
9558 list.splice(position, 1);
9559 }
9560
9561 if (this._events.removeListener)
9562 this.emit('removeListener', type, listener);
9563 }
9564
9565 return this;
9566 };
9567
9568 EventEmitter.prototype.removeAllListeners = function(type) {
9569 var key, listeners;
9570
9571 if (!this._events)
9572 return this;
9573
9574 // not listening for removeListener, no need to emit
9575 if (!this._events.removeListener) {
9576 if (arguments.length === 0)
9577 this._events = {};
9578 else if (this._events[type])
9579 delete this._events[type];
9580 return this;
9581 }
9582
9583 // emit removeListener for all listeners on all events
9584 if (arguments.length === 0) {
9585 for (key in this._events) {
9586 if (key === 'removeListener') continue;
9587 this.removeAllListeners(key);
9588 }
9589 this.removeAllListeners('removeListener');
9590 this._events = {};
9591 return this;
9592 }
9593
9594 listeners = this._events[type];
9595
9596 if (isFunction(listeners)) {
9597 this.removeListener(type, listeners);
9598 } else {
9599 // LIFO order
9600 while (listeners.length)
9601 this.removeListener(type, listeners[listeners.length - 1]);
9602 }
9603 delete this._events[type];
9604
9605 return this;
9606 };
9607
9608 EventEmitter.prototype.listeners = function(type) {
9609 var ret;
9610 if (!this._events || !this._events[type])
9611 ret = [];
9612 else if (isFunction(this._events[type]))
9613 ret = [this._events[type]];
9614 else
9615 ret = this._events[type].slice();
9616 return ret;
9617 };
9618
9619 EventEmitter.listenerCount = function(emitter, type) {
9620 var ret;
9621 if (!emitter._events || !emitter._events[type])
9622 ret = 0;
9623 else if (isFunction(emitter._events[type]))
9624 ret = 1;
9625 else
9626 ret = emitter._events[type].length;
9627 return ret;
9628 };
9629
9630 function isFunction(arg) {
9631 return typeof arg === 'function';
9632 }
9633
9634 function isNumber(arg) {
9635 return typeof arg === 'number';
9636 }
9637
9638 function isObject(arg) {
9639 return typeof arg === 'object' && arg !== null;
9640 }
9641
9642 function isUndefined(arg) {
9643 return arg === void 0;
9644 }
9645
9646 },{}],12:[function(require,module,exports){
9647 if (typeof Object.create === 'function') {
9648 // implementation from standard node.js 'util' module
9649 module.exports = function inherits(ctor, superCtor) {
9650 ctor.super_ = superCtor
9651 ctor.prototype = Object.create(superCtor.prototype, {
9652 constructor: {
9653 value: ctor,
9654 enumerable: false,
9655 writable: true,
9656 configurable: true
9657 }
9658 });
9659 };
9660 } else {
9661 // old school shim for old browsers
9662 module.exports = function inherits(ctor, superCtor) {
9663 ctor.super_ = superCtor
9664 var TempCtor = function () {}
9665 TempCtor.prototype = superCtor.prototype
9666 ctor.prototype = new TempCtor()
9667 ctor.prototype.constructor = ctor
9668 }
9669 }
9670
9671 },{}],13:[function(require,module,exports){
9672 module.exports = Array.isArray || function (arr) {
9673 return Object.prototype.toString.call(arr) == '[object Array]';
9674 };
9675
9676 },{}],14:[function(require,module,exports){
9677 // shim for using process in browser
9678
9679 var process = module.exports = {};
9680 var queue = [];
9681 var draining = false;
9682 var currentQueue;
9683 var queueIndex = -1;
9684
9685 function cleanUpNextTick() {
9686 draining = false;
9687 if (currentQueue.length) {
9688 queue = currentQueue.concat(queue);
9689 } else {
9690 queueIndex = -1;
9691 }
9692 if (queue.length) {
9693 drainQueue();
9694 }
9695 }
9696
9697 function drainQueue() {
9698 if (draining) {
9699 return;
9700 }
9701 var timeout = setTimeout(cleanUpNextTick);
9702 draining = true;
9703
9704 var len = queue.length;
9705 while(len) {
9706 currentQueue = queue;
9707 queue = [];
9708 while (++queueIndex < len) {
9709 currentQueue[queueIndex].run();
9710 }
9711 queueIndex = -1;
9712 len = queue.length;
9713 }
9714 currentQueue = null;
9715 draining = false;
9716 clearTimeout(timeout);
9717 }
9718
9719 process.nextTick = function (fun) {
9720 var args = new Array(arguments.length - 1);
9721 if (arguments.length > 1) {
9722 for (var i = 1; i < arguments.length; i++) {
9723 args[i - 1] = arguments[i];
9724 }
9725 }
9726 queue.push(new Item(fun, args));
9727 if (queue.length === 1 && !draining) {
9728 setTimeout(drainQueue, 0);
9729 }
9730 };
9731
9732 // v8 likes predictible objects
9733 function Item(fun, array) {
9734 this.fun = fun;
9735 this.array = array;
9736 }
9737 Item.prototype.run = function () {
9738 this.fun.apply(null, this.array);
9739 };
9740 process.title = 'browser';
9741 process.browser = true;
9742 process.env = {};
9743 process.argv = [];
9744 process.version = ''; // empty string to avoid regexp issues
9745 process.versions = {};
9746
9747 function noop() {}
9748
9749 process.on = noop;
9750 process.addListener = noop;
9751 process.once = noop;
9752 process.off = noop;
9753 process.removeListener = noop;
9754 process.removeAllListeners = noop;
9755 process.emit = noop;
9756
9757 process.binding = function (name) {
9758 throw new Error('process.binding is not supported');
9759 };
9760
9761 // TODO(shtylman)
9762 process.cwd = function () { return '/' };
9763 process.chdir = function (dir) {
9764 throw new Error('process.chdir is not supported');
9765 };
9766 process.umask = function() { return 0; };
9767
9768 },{}],15:[function(require,module,exports){
9769 module.exports = require("./lib/_stream_duplex.js")
9770
9771 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
9772 (function (process){
9773 // Copyright Joyent, Inc. and other Node contributors.
9774 //
9775 // Permission is hereby granted, free of charge, to any person obtaining a
9776 // copy of this software and associated documentation files (the
9777 // "Software"), to deal in the Software without restriction, including
9778 // without limitation the rights to use, copy, modify, merge, publish,
9779 // distribute, sublicense, and/or sell copies of the Software, and to permit
9780 // persons to whom the Software is furnished to do so, subject to the
9781 // following conditions:
9782 //
9783 // The above copyright notice and this permission notice shall be included
9784 // in all copies or substantial portions of the Software.
9785 //
9786 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9787 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9788 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9789 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9790 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9791 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9792 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9793
9794 // a duplex stream is just a stream that is both readable and writable.
9795 // Since JS doesn't have multiple prototypal inheritance, this class
9796 // prototypally inherits from Readable, and then parasitically from
9797 // Writable.
9798
9799 module.exports = Duplex;
9800
9801 /*<replacement>*/
9802 var objectKeys = Object.keys || function (obj) {
9803 var keys = [];
9804 for (var key in obj) keys.push(key);
9805 return keys;
9806 }
9807 /*</replacement>*/
9808
9809
9810 /*<replacement>*/
9811 var util = require('core-util-is');
9812 util.inherits = require('inherits');
9813 /*</replacement>*/
9814
9815 var Readable = require('./_stream_readable');
9816 var Writable = require('./_stream_writable');
9817
9818 util.inherits(Duplex, Readable);
9819
9820 forEach(objectKeys(Writable.prototype), function(method) {
9821 if (!Duplex.prototype[method])
9822 Duplex.prototype[method] = Writable.prototype[method];
9823 });
9824
9825 function Duplex(options) {
9826 if (!(this instanceof Duplex))
9827 return new Duplex(options);
9828
9829 Readable.call(this, options);
9830 Writable.call(this, options);
9831
9832 if (options && options.readable === false)
9833 this.readable = false;
9834
9835 if (options && options.writable === false)
9836 this.writable = false;
9837
9838 this.allowHalfOpen = true;
9839 if (options && options.allowHalfOpen === false)
9840 this.allowHalfOpen = false;
9841
9842 this.once('end', onend);
9843 }
9844
9845 // the no-half-open enforcer
9846 function onend() {
9847 // if we allow half-open state, or if the writable side ended,
9848 // then we're ok.
9849 if (this.allowHalfOpen || this._writableState.ended)
9850 return;
9851
9852 // no more data can be written.
9853 // But allow more writes to happen in this tick.
9854 process.nextTick(this.end.bind(this));
9855 }
9856
9857 function forEach (xs, f) {
9858 for (var i = 0, l = xs.length; i < l; i++) {
9859 f(xs[i], i);
9860 }
9861 }
9862
9863 }).call(this,require('_process'))
9864 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
9865 // Copyright Joyent, Inc. and other Node contributors.
9866 //
9867 // Permission is hereby granted, free of charge, to any person obtaining a
9868 // copy of this software and associated documentation files (the
9869 // "Software"), to deal in the Software without restriction, including
9870 // without limitation the rights to use, copy, modify, merge, publish,
9871 // distribute, sublicense, and/or sell copies of the Software, and to permit
9872 // persons to whom the Software is furnished to do so, subject to the
9873 // following conditions:
9874 //
9875 // The above copyright notice and this permission notice shall be included
9876 // in all copies or substantial portions of the Software.
9877 //
9878 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9879 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9880 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9881 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9882 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9883 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9884 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9885
9886 // a passthrough stream.
9887 // basically just the most minimal sort of Transform stream.
9888 // Every written chunk gets output as-is.
9889
9890 module.exports = PassThrough;
9891
9892 var Transform = require('./_stream_transform');
9893
9894 /*<replacement>*/
9895 var util = require('core-util-is');
9896 util.inherits = require('inherits');
9897 /*</replacement>*/
9898
9899 util.inherits(PassThrough, Transform);
9900
9901 function PassThrough(options) {
9902 if (!(this instanceof PassThrough))
9903 return new PassThrough(options);
9904
9905 Transform.call(this, options);
9906 }
9907
9908 PassThrough.prototype._transform = function(chunk, encoding, cb) {
9909 cb(null, chunk);
9910 };
9911
9912 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
9913 (function (process){
9914 // Copyright Joyent, Inc. and other Node contributors.
9915 //
9916 // Permission is hereby granted, free of charge, to any person obtaining a
9917 // copy of this software and associated documentation files (the
9918 // "Software"), to deal in the Software without restriction, including
9919 // without limitation the rights to use, copy, modify, merge, publish,
9920 // distribute, sublicense, and/or sell copies of the Software, and to permit
9921 // persons to whom the Software is furnished to do so, subject to the
9922 // following conditions:
9923 //
9924 // The above copyright notice and this permission notice shall be included
9925 // in all copies or substantial portions of the Software.
9926 //
9927 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9928 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9929 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9930 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9931 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9932 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9933 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9934
9935 module.exports = Readable;
9936
9937 /*<replacement>*/
9938 var isArray = require('isarray');
9939 /*</replacement>*/
9940
9941
9942 /*<replacement>*/
9943 var Buffer = require('buffer').Buffer;
9944 /*</replacement>*/
9945
9946 Readable.ReadableState = ReadableState;
9947
9948 var EE = require('events').EventEmitter;
9949
9950 /*<replacement>*/
9951 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
9952 return emitter.listeners(type).length;
9953 };
9954 /*</replacement>*/
9955
9956 var Stream = require('stream');
9957
9958 /*<replacement>*/
9959 var util = require('core-util-is');
9960 util.inherits = require('inherits');
9961 /*</replacement>*/
9962
9963 var StringDecoder;
9964
9965
9966 /*<replacement>*/
9967 var debug = require('util');
9968 if (debug && debug.debuglog) {
9969 debug = debug.debuglog('stream');
9970 } else {
9971 debug = function () {};
9972 }
9973 /*</replacement>*/
9974
9975
9976 util.inherits(Readable, Stream);
9977
9978 function ReadableState(options, stream) {
9979 var Duplex = require('./_stream_duplex');
9980
9981 options = options || {};
9982
9983 // the point at which it stops calling _read() to fill the buffer
9984 // Note: 0 is a valid value, means "don't call _read preemptively ever"
9985 var hwm = options.highWaterMark;
9986 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
9987 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
9988
9989 // cast to ints.
9990 this.highWaterMark = ~~this.highWaterMark;
9991
9992 this.buffer = [];
9993 this.length = 0;
9994 this.pipes = null;
9995 this.pipesCount = 0;
9996 this.flowing = null;
9997 this.ended = false;
9998 this.endEmitted = false;
9999 this.reading = false;
10000
10001 // a flag to be able to tell if the onwrite cb is called immediately,
10002 // or on a later tick. We set this to true at first, because any
10003 // actions that shouldn't happen until "later" should generally also
10004 // not happen before the first write call.
10005 this.sync = true;
10006
10007 // whenever we return null, then we set a flag to say
10008 // that we're awaiting a 'readable' event emission.
10009 this.needReadable = false;
10010 this.emittedReadable = false;
10011 this.readableListening = false;
10012
10013
10014 // object stream flag. Used to make read(n) ignore n and to
10015 // make all the buffer merging and length checks go away
10016 this.objectMode = !!options.objectMode;
10017
10018 if (stream instanceof Duplex)
10019 this.objectMode = this.objectMode || !!options.readableObjectMode;
10020
10021 // Crypto is kind of old and crusty. Historically, its default string
10022 // encoding is 'binary' so we have to make this configurable.
10023 // Everything else in the universe uses 'utf8', though.
10024 this.defaultEncoding = options.defaultEncoding || 'utf8';
10025
10026 // when piping, we only care about 'readable' events that happen
10027 // after read()ing all the bytes and not getting any pushback.
10028 this.ranOut = false;
10029
10030 // the number of writers that are awaiting a drain event in .pipe()s
10031 this.awaitDrain = 0;
10032
10033 // if true, a maybeReadMore has been scheduled
10034 this.readingMore = false;
10035
10036 this.decoder = null;
10037 this.encoding = null;
10038 if (options.encoding) {
10039 if (!StringDecoder)
10040 StringDecoder = require('string_decoder/').StringDecoder;
10041 this.decoder = new StringDecoder(options.encoding);
10042 this.encoding = options.encoding;
10043 }
10044 }
10045
10046 function Readable(options) {
10047 var Duplex = require('./_stream_duplex');
10048
10049 if (!(this instanceof Readable))
10050 return new Readable(options);
10051
10052 this._readableState = new ReadableState(options, this);
10053
10054 // legacy
10055 this.readable = true;
10056
10057 Stream.call(this);
10058 }
10059
10060 // Manually shove something into the read() buffer.
10061 // This returns true if the highWaterMark has not been hit yet,
10062 // similar to how Writable.write() returns true if you should
10063 // write() some more.
10064 Readable.prototype.push = function(chunk, encoding) {
10065 var state = this._readableState;
10066
10067 if (util.isString(chunk) && !state.objectMode) {
10068 encoding = encoding || state.defaultEncoding;
10069 if (encoding !== state.encoding) {
10070 chunk = new Buffer(chunk, encoding);
10071 encoding = '';
10072 }
10073 }
10074
10075 return readableAddChunk(this, state, chunk, encoding, false);
10076 };
10077
10078 // Unshift should *always* be something directly out of read()
10079 Readable.prototype.unshift = function(chunk) {
10080 var state = this._readableState;
10081 return readableAddChunk(this, state, chunk, '', true);
10082 };
10083
10084 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
10085 var er = chunkInvalid(state, chunk);
10086 if (er) {
10087 stream.emit('error', er);
10088 } else if (util.isNullOrUndefined(chunk)) {
10089 state.reading = false;
10090 if (!state.ended)
10091 onEofChunk(stream, state);
10092 } else if (state.objectMode || chunk && chunk.length > 0) {
10093 if (state.ended && !addToFront) {
10094 var e = new Error('stream.push() after EOF');
10095 stream.emit('error', e);
10096 } else if (state.endEmitted && addToFront) {
10097 var e = new Error('stream.unshift() after end event');
10098 stream.emit('error', e);
10099 } else {
10100 if (state.decoder && !addToFront && !encoding)
10101 chunk = state.decoder.write(chunk);
10102
10103 if (!addToFront)
10104 state.reading = false;
10105
10106 // if we want the data now, just emit it.
10107 if (state.flowing && state.length === 0 && !state.sync) {
10108 stream.emit('data', chunk);
10109 stream.read(0);
10110 } else {
10111 // update the buffer info.
10112 state.length += state.objectMode ? 1 : chunk.length;
10113 if (addToFront)
10114 state.buffer.unshift(chunk);
10115 else
10116 state.buffer.push(chunk);
10117
10118 if (state.needReadable)
10119 emitReadable(stream);
10120 }
10121
10122 maybeReadMore(stream, state);
10123 }
10124 } else if (!addToFront) {
10125 state.reading = false;
10126 }
10127
10128 return needMoreData(state);
10129 }
10130
10131
10132
10133 // if it's past the high water mark, we can push in some more.
10134 // Also, if we have no data yet, we can stand some
10135 // more bytes. This is to work around cases where hwm=0,
10136 // such as the repl. Also, if the push() triggered a
10137 // readable event, and the user called read(largeNumber) such that
10138 // needReadable was set, then we ought to push more, so that another
10139 // 'readable' event will be triggered.
10140 function needMoreData(state) {
10141 return !state.ended &&
10142 (state.needReadable ||
10143 state.length < state.highWaterMark ||
10144 state.length === 0);
10145 }
10146
10147 // backwards compatibility.
10148 Readable.prototype.setEncoding = function(enc) {
10149 if (!StringDecoder)
10150 StringDecoder = require('string_decoder/').StringDecoder;
10151 this._readableState.decoder = new StringDecoder(enc);
10152 this._readableState.encoding = enc;
10153 return this;
10154 };
10155
10156 // Don't raise the hwm > 128MB
10157 var MAX_HWM = 0x800000;
10158 function roundUpToNextPowerOf2(n) {
10159 if (n >= MAX_HWM) {
10160 n = MAX_HWM;
10161 } else {
10162 // Get the next highest power of 2
10163 n--;
10164 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
10165 n++;
10166 }
10167 return n;
10168 }
10169
10170 function howMuchToRead(n, state) {
10171 if (state.length === 0 && state.ended)
10172 return 0;
10173
10174 if (state.objectMode)
10175 return n === 0 ? 0 : 1;
10176
10177 if (isNaN(n) || util.isNull(n)) {
10178 // only flow one buffer at a time
10179 if (state.flowing && state.buffer.length)
10180 return state.buffer[0].length;
10181 else
10182 return state.length;
10183 }
10184
10185 if (n <= 0)
10186 return 0;
10187
10188 // If we're asking for more than the target buffer level,
10189 // then raise the water mark. Bump up to the next highest
10190 // power of 2, to prevent increasing it excessively in tiny
10191 // amounts.
10192 if (n > state.highWaterMark)
10193 state.highWaterMark = roundUpToNextPowerOf2(n);
10194
10195 // don't have that much. return null, unless we've ended.
10196 if (n > state.length) {
10197 if (!state.ended) {
10198 state.needReadable = true;
10199 return 0;
10200 } else
10201 return state.length;
10202 }
10203
10204 return n;
10205 }
10206
10207 // you can override either this method, or the async _read(n) below.
10208 Readable.prototype.read = function(n) {
10209 debug('read', n);
10210 var state = this._readableState;
10211 var nOrig = n;
10212
10213 if (!util.isNumber(n) || n > 0)
10214 state.emittedReadable = false;
10215
10216 // if we're doing read(0) to trigger a readable event, but we
10217 // already have a bunch of data in the buffer, then just trigger
10218 // the 'readable' event and move on.
10219 if (n === 0 &&
10220 state.needReadable &&
10221 (state.length >= state.highWaterMark || state.ended)) {
10222 debug('read: emitReadable', state.length, state.ended);
10223 if (state.length === 0 && state.ended)
10224 endReadable(this);
10225 else
10226 emitReadable(this);
10227 return null;
10228 }
10229
10230 n = howMuchToRead(n, state);
10231
10232 // if we've ended, and we're now clear, then finish it up.
10233 if (n === 0 && state.ended) {
10234 if (state.length === 0)
10235 endReadable(this);
10236 return null;
10237 }
10238
10239 // All the actual chunk generation logic needs to be
10240 // *below* the call to _read. The reason is that in certain
10241 // synthetic stream cases, such as passthrough streams, _read
10242 // may be a completely synchronous operation which may change
10243 // the state of the read buffer, providing enough data when
10244 // before there was *not* enough.
10245 //
10246 // So, the steps are:
10247 // 1. Figure out what the state of things will be after we do
10248 // a read from the buffer.
10249 //
10250 // 2. If that resulting state will trigger a _read, then call _read.
10251 // Note that this may be asynchronous, or synchronous. Yes, it is
10252 // deeply ugly to write APIs this way, but that still doesn't mean
10253 // that the Readable class should behave improperly, as streams are
10254 // designed to be sync/async agnostic.
10255 // Take note if the _read call is sync or async (ie, if the read call
10256 // has returned yet), so that we know whether or not it's safe to emit
10257 // 'readable' etc.
10258 //
10259 // 3. Actually pull the requested chunks out of the buffer and return.
10260
10261 // if we need a readable event, then we need to do some reading.
10262 var doRead = state.needReadable;
10263 debug('need readable', doRead);
10264
10265 // if we currently have less than the highWaterMark, then also read some
10266 if (state.length === 0 || state.length - n < state.highWaterMark) {
10267 doRead = true;
10268 debug('length less than watermark', doRead);
10269 }
10270
10271 // however, if we've ended, then there's no point, and if we're already
10272 // reading, then it's unnecessary.
10273 if (state.ended || state.reading) {
10274 doRead = false;
10275 debug('reading or ended', doRead);
10276 }
10277
10278 if (doRead) {
10279 debug('do read');
10280 state.reading = true;
10281 state.sync = true;
10282 // if the length is currently zero, then we *need* a readable event.
10283 if (state.length === 0)
10284 state.needReadable = true;
10285 // call internal read method
10286 this._read(state.highWaterMark);
10287 state.sync = false;
10288 }
10289
10290 // If _read pushed data synchronously, then `reading` will be false,
10291 // and we need to re-evaluate how much data we can return to the user.
10292 if (doRead && !state.reading)
10293 n = howMuchToRead(nOrig, state);
10294
10295 var ret;
10296 if (n > 0)
10297 ret = fromList(n, state);
10298 else
10299 ret = null;
10300
10301 if (util.isNull(ret)) {
10302 state.needReadable = true;
10303 n = 0;
10304 }
10305
10306 state.length -= n;
10307
10308 // If we have nothing in the buffer, then we want to know
10309 // as soon as we *do* get something into the buffer.
10310 if (state.length === 0 && !state.ended)
10311 state.needReadable = true;
10312
10313 // If we tried to read() past the EOF, then emit end on the next tick.
10314 if (nOrig !== n && state.ended && state.length === 0)
10315 endReadable(this);
10316
10317 if (!util.isNull(ret))
10318 this.emit('data', ret);
10319
10320 return ret;
10321 };
10322
10323 function chunkInvalid(state, chunk) {
10324 var er = null;
10325 if (!util.isBuffer(chunk) &&
10326 !util.isString(chunk) &&
10327 !util.isNullOrUndefined(chunk) &&
10328 !state.objectMode) {
10329 er = new TypeError('Invalid non-string/buffer chunk');
10330 }
10331 return er;
10332 }
10333
10334
10335 function onEofChunk(stream, state) {
10336 if (state.decoder && !state.ended) {
10337 var chunk = state.decoder.end();
10338 if (chunk && chunk.length) {
10339 state.buffer.push(chunk);
10340 state.length += state.objectMode ? 1 : chunk.length;
10341 }
10342 }
10343 state.ended = true;
10344
10345 // emit 'readable' now to make sure it gets picked up.
10346 emitReadable(stream);
10347 }
10348
10349 // Don't emit readable right away in sync mode, because this can trigger
10350 // another read() call => stack overflow. This way, it might trigger
10351 // a nextTick recursion warning, but that's not so bad.
10352 function emitReadable(stream) {
10353 var state = stream._readableState;
10354 state.needReadable = false;
10355 if (!state.emittedReadable) {
10356 debug('emitReadable', state.flowing);
10357 state.emittedReadable = true;
10358 if (state.sync)
10359 process.nextTick(function() {
10360 emitReadable_(stream);
10361 });
10362 else
10363 emitReadable_(stream);
10364 }
10365 }
10366
10367 function emitReadable_(stream) {
10368 debug('emit readable');
10369 stream.emit('readable');
10370 flow(stream);
10371 }
10372
10373
10374 // at this point, the user has presumably seen the 'readable' event,
10375 // and called read() to consume some data. that may have triggered
10376 // in turn another _read(n) call, in which case reading = true if
10377 // it's in progress.
10378 // However, if we're not ended, or reading, and the length < hwm,
10379 // then go ahead and try to read some more preemptively.
10380 function maybeReadMore(stream, state) {
10381 if (!state.readingMore) {
10382 state.readingMore = true;
10383 process.nextTick(function() {
10384 maybeReadMore_(stream, state);
10385 });
10386 }
10387 }
10388
10389 function maybeReadMore_(stream, state) {
10390 var len = state.length;
10391 while (!state.reading && !state.flowing && !state.ended &&
10392 state.length < state.highWaterMark) {
10393 debug('maybeReadMore read 0');
10394 stream.read(0);
10395 if (len === state.length)
10396 // didn't get any data, stop spinning.
10397 break;
10398 else
10399 len = state.length;
10400 }
10401 state.readingMore = false;
10402 }
10403
10404 // abstract method. to be overridden in specific implementation classes.
10405 // call cb(er, data) where data is <= n in length.
10406 // for virtual (non-string, non-buffer) streams, "length" is somewhat
10407 // arbitrary, and perhaps not very meaningful.
10408 Readable.prototype._read = function(n) {
10409 this.emit('error', new Error('not implemented'));
10410 };
10411
10412 Readable.prototype.pipe = function(dest, pipeOpts) {
10413 var src = this;
10414 var state = this._readableState;
10415
10416 switch (state.pipesCount) {
10417 case 0:
10418 state.pipes = dest;
10419 break;
10420 case 1:
10421 state.pipes = [state.pipes, dest];
10422 break;
10423 default:
10424 state.pipes.push(dest);
10425 break;
10426 }
10427 state.pipesCount += 1;
10428 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
10429
10430 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
10431 dest !== process.stdout &&
10432 dest !== process.stderr;
10433
10434 var endFn = doEnd ? onend : cleanup;
10435 if (state.endEmitted)
10436 process.nextTick(endFn);
10437 else
10438 src.once('end', endFn);
10439
10440 dest.on('unpipe', onunpipe);
10441 function onunpipe(readable) {
10442 debug('onunpipe');
10443 if (readable === src) {
10444 cleanup();
10445 }
10446 }
10447
10448 function onend() {
10449 debug('onend');
10450 dest.end();
10451 }
10452
10453 // when the dest drains, it reduces the awaitDrain counter
10454 // on the source. This would be more elegant with a .once()
10455 // handler in flow(), but adding and removing repeatedly is
10456 // too slow.
10457 var ondrain = pipeOnDrain(src);
10458 dest.on('drain', ondrain);
10459
10460 function cleanup() {
10461 debug('cleanup');
10462 // cleanup event handlers once the pipe is broken
10463 dest.removeListener('close', onclose);
10464 dest.removeListener('finish', onfinish);
10465 dest.removeListener('drain', ondrain);
10466 dest.removeListener('error', onerror);
10467 dest.removeListener('unpipe', onunpipe);
10468 src.removeListener('end', onend);
10469 src.removeListener('end', cleanup);
10470 src.removeListener('data', ondata);
10471
10472 // if the reader is waiting for a drain event from this
10473 // specific writer, then it would cause it to never start
10474 // flowing again.
10475 // So, if this is awaiting a drain, then we just call it now.
10476 // If we don't know, then assume that we are waiting for one.
10477 if (state.awaitDrain &&
10478 (!dest._writableState || dest._writableState.needDrain))
10479 ondrain();
10480 }
10481
10482 src.on('data', ondata);
10483 function ondata(chunk) {
10484 debug('ondata');
10485 var ret = dest.write(chunk);
10486 if (false === ret) {
10487 debug('false write response, pause',
10488 src._readableState.awaitDrain);
10489 src._readableState.awaitDrain++;
10490 src.pause();
10491 }
10492 }
10493
10494 // if the dest has an error, then stop piping into it.
10495 // however, don't suppress the throwing behavior for this.
10496 function onerror(er) {
10497 debug('onerror', er);
10498 unpipe();
10499 dest.removeListener('error', onerror);
10500 if (EE.listenerCount(dest, 'error') === 0)
10501 dest.emit('error', er);
10502 }
10503 // This is a brutally ugly hack to make sure that our error handler
10504 // is attached before any userland ones. NEVER DO THIS.
10505 if (!dest._events || !dest._events.error)
10506 dest.on('error', onerror);
10507 else if (isArray(dest._events.error))
10508 dest._events.error.unshift(onerror);
10509 else
10510 dest._events.error = [onerror, dest._events.error];
10511
10512
10513
10514 // Both close and finish should trigger unpipe, but only once.
10515 function onclose() {
10516 dest.removeListener('finish', onfinish);
10517 unpipe();
10518 }
10519 dest.once('close', onclose);
10520 function onfinish() {
10521 debug('onfinish');
10522 dest.removeListener('close', onclose);
10523 unpipe();
10524 }
10525 dest.once('finish', onfinish);
10526
10527 function unpipe() {
10528 debug('unpipe');
10529 src.unpipe(dest);
10530 }
10531
10532 // tell the dest that it's being piped to
10533 dest.emit('pipe', src);
10534
10535 // start the flow if it hasn't been started already.
10536 if (!state.flowing) {
10537 debug('pipe resume');
10538 src.resume();
10539 }
10540
10541 return dest;
10542 };
10543
10544 function pipeOnDrain(src) {
10545 return function() {
10546 var state = src._readableState;
10547 debug('pipeOnDrain', state.awaitDrain);
10548 if (state.awaitDrain)
10549 state.awaitDrain--;
10550 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
10551 state.flowing = true;
10552 flow(src);
10553 }
10554 };
10555 }
10556
10557
10558 Readable.prototype.unpipe = function(dest) {
10559 var state = this._readableState;
10560
10561 // if we're not piping anywhere, then do nothing.
10562 if (state.pipesCount === 0)
10563 return this;
10564
10565 // just one destination. most common case.
10566 if (state.pipesCount === 1) {
10567 // passed in one, but it's not the right one.
10568 if (dest && dest !== state.pipes)
10569 return this;
10570
10571 if (!dest)
10572 dest = state.pipes;
10573
10574 // got a match.
10575 state.pipes = null;
10576 state.pipesCount = 0;
10577 state.flowing = false;
10578 if (dest)
10579 dest.emit('unpipe', this);
10580 return this;
10581 }
10582
10583 // slow case. multiple pipe destinations.
10584
10585 if (!dest) {
10586 // remove all.
10587 var dests = state.pipes;
10588 var len = state.pipesCount;
10589 state.pipes = null;
10590 state.pipesCount = 0;
10591 state.flowing = false;
10592
10593 for (var i = 0; i < len; i++)
10594 dests[i].emit('unpipe', this);
10595 return this;
10596 }
10597
10598 // try to find the right one.
10599 var i = indexOf(state.pipes, dest);
10600 if (i === -1)
10601 return this;
10602
10603 state.pipes.splice(i, 1);
10604 state.pipesCount -= 1;
10605 if (state.pipesCount === 1)
10606 state.pipes = state.pipes[0];
10607
10608 dest.emit('unpipe', this);
10609
10610 return this;
10611 };
10612
10613 // set up data events if they are asked for
10614 // Ensure readable listeners eventually get something
10615 Readable.prototype.on = function(ev, fn) {
10616 var res = Stream.prototype.on.call(this, ev, fn);
10617
10618 // If listening to data, and it has not explicitly been paused,
10619 // then call resume to start the flow of data on the next tick.
10620 if (ev === 'data' && false !== this._readableState.flowing) {
10621 this.resume();
10622 }
10623
10624 if (ev === 'readable' && this.readable) {
10625 var state = this._readableState;
10626 if (!state.readableListening) {
10627 state.readableListening = true;
10628 state.emittedReadable = false;
10629 state.needReadable = true;
10630 if (!state.reading) {
10631 var self = this;
10632 process.nextTick(function() {
10633 debug('readable nexttick read 0');
10634 self.read(0);
10635 });
10636 } else if (state.length) {
10637 emitReadable(this, state);
10638 }
10639 }
10640 }
10641
10642 return res;
10643 };
10644 Readable.prototype.addListener = Readable.prototype.on;
10645
10646 // pause() and resume() are remnants of the legacy readable stream API
10647 // If the user uses them, then switch into old mode.
10648 Readable.prototype.resume = function() {
10649 var state = this._readableState;
10650 if (!state.flowing) {
10651 debug('resume');
10652 state.flowing = true;
10653 if (!state.reading) {
10654 debug('resume read 0');
10655 this.read(0);
10656 }
10657 resume(this, state);
10658 }
10659 return this;
10660 };
10661
10662 function resume(stream, state) {
10663 if (!state.resumeScheduled) {
10664 state.resumeScheduled = true;
10665 process.nextTick(function() {
10666 resume_(stream, state);
10667 });
10668 }
10669 }
10670
10671 function resume_(stream, state) {
10672 state.resumeScheduled = false;
10673 stream.emit('resume');
10674 flow(stream);
10675 if (state.flowing && !state.reading)
10676 stream.read(0);
10677 }
10678
10679 Readable.prototype.pause = function() {
10680 debug('call pause flowing=%j', this._readableState.flowing);
10681 if (false !== this._readableState.flowing) {
10682 debug('pause');
10683 this._readableState.flowing = false;
10684 this.emit('pause');
10685 }
10686 return this;
10687 };
10688
10689 function flow(stream) {
10690 var state = stream._readableState;
10691 debug('flow', state.flowing);
10692 if (state.flowing) {
10693 do {
10694 var chunk = stream.read();
10695 } while (null !== chunk && state.flowing);
10696 }
10697 }
10698
10699 // wrap an old-style stream as the async data source.
10700 // This is *not* part of the readable stream interface.
10701 // It is an ugly unfortunate mess of history.
10702 Readable.prototype.wrap = function(stream) {
10703 var state = this._readableState;
10704 var paused = false;
10705
10706 var self = this;
10707 stream.on('end', function() {
10708 debug('wrapped end');
10709 if (state.decoder && !state.ended) {
10710 var chunk = state.decoder.end();
10711 if (chunk && chunk.length)
10712 self.push(chunk);
10713 }
10714
10715 self.push(null);
10716 });
10717
10718 stream.on('data', function(chunk) {
10719 debug('wrapped data');
10720 if (state.decoder)
10721 chunk = state.decoder.write(chunk);
10722 if (!chunk || !state.objectMode && !chunk.length)
10723 return;
10724
10725 var ret = self.push(chunk);
10726 if (!ret) {
10727 paused = true;
10728 stream.pause();
10729 }
10730 });
10731
10732 // proxy all the other methods.
10733 // important when wrapping filters and duplexes.
10734 for (var i in stream) {
10735 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
10736 this[i] = function(method) { return function() {
10737 return stream[method].apply(stream, arguments);
10738 }}(i);
10739 }
10740 }
10741
10742 // proxy certain important events.
10743 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
10744 forEach(events, function(ev) {
10745 stream.on(ev, self.emit.bind(self, ev));
10746 });
10747
10748 // when we try to consume some more bytes, simply unpause the
10749 // underlying stream.
10750 self._read = function(n) {
10751 debug('wrapped _read', n);
10752 if (paused) {
10753 paused = false;
10754 stream.resume();
10755 }
10756 };
10757
10758 return self;
10759 };
10760
10761
10762
10763 // exposed for testing purposes only.
10764 Readable._fromList = fromList;
10765
10766 // Pluck off n bytes from an array of buffers.
10767 // Length is the combined lengths of all the buffers in the list.
10768 function fromList(n, state) {
10769 var list = state.buffer;
10770 var length = state.length;
10771 var stringMode = !!state.decoder;
10772 var objectMode = !!state.objectMode;
10773 var ret;
10774
10775 // nothing in the list, definitely empty.
10776 if (list.length === 0)
10777 return null;
10778
10779 if (length === 0)
10780 ret = null;
10781 else if (objectMode)
10782 ret = list.shift();
10783 else if (!n || n >= length) {
10784 // read it all, truncate the array.
10785 if (stringMode)
10786 ret = list.join('');
10787 else
10788 ret = Buffer.concat(list, length);
10789 list.length = 0;
10790 } else {
10791 // read just some of it.
10792 if (n < list[0].length) {
10793 // just take a part of the first list item.
10794 // slice is the same for buffers and strings.
10795 var buf = list[0];
10796 ret = buf.slice(0, n);
10797 list[0] = buf.slice(n);
10798 } else if (n === list[0].length) {
10799 // first list is a perfect match
10800 ret = list.shift();
10801 } else {
10802 // complex case.
10803 // we have enough to cover it, but it spans past the first buffer.
10804 if (stringMode)
10805 ret = '';
10806 else
10807 ret = new Buffer(n);
10808
10809 var c = 0;
10810 for (var i = 0, l = list.length; i < l && c < n; i++) {
10811 var buf = list[0];
10812 var cpy = Math.min(n - c, buf.length);
10813
10814 if (stringMode)
10815 ret += buf.slice(0, cpy);
10816 else
10817 buf.copy(ret, c, 0, cpy);
10818
10819 if (cpy < buf.length)
10820 list[0] = buf.slice(cpy);
10821 else
10822 list.shift();
10823
10824 c += cpy;
10825 }
10826 }
10827 }
10828
10829 return ret;
10830 }
10831
10832 function endReadable(stream) {
10833 var state = stream._readableState;
10834
10835 // If we get here before consuming all the bytes, then that is a
10836 // bug in node. Should never happen.
10837 if (state.length > 0)
10838 throw new Error('endReadable called on non-empty stream');
10839
10840 if (!state.endEmitted) {
10841 state.ended = true;
10842 process.nextTick(function() {
10843 // Check that we didn't get one last unshift.
10844 if (!state.endEmitted && state.length === 0) {
10845 state.endEmitted = true;
10846 stream.readable = false;
10847 stream.emit('end');
10848 }
10849 });
10850 }
10851 }
10852
10853 function forEach (xs, f) {
10854 for (var i = 0, l = xs.length; i < l; i++) {
10855 f(xs[i], i);
10856 }
10857 }
10858
10859 function indexOf (xs, x) {
10860 for (var i = 0, l = xs.length; i < l; i++) {
10861 if (xs[i] === x) return i;
10862 }
10863 return -1;
10864 }
10865
10866 }).call(this,require('_process'))
10867 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
10868 // Copyright Joyent, Inc. and other Node contributors.
10869 //
10870 // Permission is hereby granted, free of charge, to any person obtaining a
10871 // copy of this software and associated documentation files (the
10872 // "Software"), to deal in the Software without restriction, including
10873 // without limitation the rights to use, copy, modify, merge, publish,
10874 // distribute, sublicense, and/or sell copies of the Software, and to permit
10875 // persons to whom the Software is furnished to do so, subject to the
10876 // following conditions:
10877 //
10878 // The above copyright notice and this permission notice shall be included
10879 // in all copies or substantial portions of the Software.
10880 //
10881 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10882 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10883 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10884 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10885 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10886 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10887 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10888
10889
10890 // a transform stream is a readable/writable stream where you do
10891 // something with the data. Sometimes it's called a "filter",
10892 // but that's not a great name for it, since that implies a thing where
10893 // some bits pass through, and others are simply ignored. (That would
10894 // be a valid example of a transform, of course.)
10895 //
10896 // While the output is causally related to the input, it's not a
10897 // necessarily symmetric or synchronous transformation. For example,
10898 // a zlib stream might take multiple plain-text writes(), and then
10899 // emit a single compressed chunk some time in the future.
10900 //
10901 // Here's how this works:
10902 //
10903 // The Transform stream has all the aspects of the readable and writable
10904 // stream classes. When you write(chunk), that calls _write(chunk,cb)
10905 // internally, and returns false if there's a lot of pending writes
10906 // buffered up. When you call read(), that calls _read(n) until
10907 // there's enough pending readable data buffered up.
10908 //
10909 // In a transform stream, the written data is placed in a buffer. When
10910 // _read(n) is called, it transforms the queued up data, calling the
10911 // buffered _write cb's as it consumes chunks. If consuming a single
10912 // written chunk would result in multiple output chunks, then the first
10913 // outputted bit calls the readcb, and subsequent chunks just go into
10914 // the read buffer, and will cause it to emit 'readable' if necessary.
10915 //
10916 // This way, back-pressure is actually determined by the reading side,
10917 // since _read has to be called to start processing a new chunk. However,
10918 // a pathological inflate type of transform can cause excessive buffering
10919 // here. For example, imagine a stream where every byte of input is
10920 // interpreted as an integer from 0-255, and then results in that many
10921 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
10922 // 1kb of data being output. In this case, you could write a very small
10923 // amount of input, and end up with a very large amount of output. In
10924 // such a pathological inflating mechanism, there'd be no way to tell
10925 // the system to stop doing the transform. A single 4MB write could
10926 // cause the system to run out of memory.
10927 //
10928 // However, even in such a pathological case, only a single written chunk
10929 // would be consumed, and then the rest would wait (un-transformed) until
10930 // the results of the previous transformed chunk were consumed.
10931
10932 module.exports = Transform;
10933
10934 var Duplex = require('./_stream_duplex');
10935
10936 /*<replacement>*/
10937 var util = require('core-util-is');
10938 util.inherits = require('inherits');
10939 /*</replacement>*/
10940
10941 util.inherits(Transform, Duplex);
10942
10943
10944 function TransformState(options, stream) {
10945 this.afterTransform = function(er, data) {
10946 return afterTransform(stream, er, data);
10947 };
10948
10949 this.needTransform = false;
10950 this.transforming = false;
10951 this.writecb = null;
10952 this.writechunk = null;
10953 }
10954
10955 function afterTransform(stream, er, data) {
10956 var ts = stream._transformState;
10957 ts.transforming = false;
10958
10959 var cb = ts.writecb;
10960
10961 if (!cb)
10962 return stream.emit('error', new Error('no writecb in Transform class'));
10963
10964 ts.writechunk = null;
10965 ts.writecb = null;
10966
10967 if (!util.isNullOrUndefined(data))
10968 stream.push(data);
10969
10970 if (cb)
10971 cb(er);
10972
10973 var rs = stream._readableState;
10974 rs.reading = false;
10975 if (rs.needReadable || rs.length < rs.highWaterMark) {
10976 stream._read(rs.highWaterMark);
10977 }
10978 }
10979
10980
10981 function Transform(options) {
10982 if (!(this instanceof Transform))
10983 return new Transform(options);
10984
10985 Duplex.call(this, options);
10986
10987 this._transformState = new TransformState(options, this);
10988
10989 // when the writable side finishes, then flush out anything remaining.
10990 var stream = this;
10991
10992 // start out asking for a readable event once data is transformed.
10993 this._readableState.needReadable = true;
10994
10995 // we have implemented the _read method, and done the other things
10996 // that Readable wants before the first _read call, so unset the
10997 // sync guard flag.
10998 this._readableState.sync = false;
10999
11000 this.once('prefinish', function() {
11001 if (util.isFunction(this._flush))
11002 this._flush(function(er) {
11003 done(stream, er);
11004 });
11005 else
11006 done(stream);
11007 });
11008 }
11009
11010 Transform.prototype.push = function(chunk, encoding) {
11011 this._transformState.needTransform = false;
11012 return Duplex.prototype.push.call(this, chunk, encoding);
11013 };
11014
11015 // This is the part where you do stuff!
11016 // override this function in implementation classes.
11017 // 'chunk' is an input chunk.
11018 //
11019 // Call `push(newChunk)` to pass along transformed output
11020 // to the readable side. You may call 'push' zero or more times.
11021 //
11022 // Call `cb(err)` when you are done with this chunk. If you pass
11023 // an error, then that'll put the hurt on the whole operation. If you
11024 // never call cb(), then you'll never get another chunk.
11025 Transform.prototype._transform = function(chunk, encoding, cb) {
11026 throw new Error('not implemented');
11027 };
11028
11029 Transform.prototype._write = function(chunk, encoding, cb) {
11030 var ts = this._transformState;
11031 ts.writecb = cb;
11032 ts.writechunk = chunk;
11033 ts.writeencoding = encoding;
11034 if (!ts.transforming) {
11035 var rs = this._readableState;
11036 if (ts.needTransform ||
11037 rs.needReadable ||
11038 rs.length < rs.highWaterMark)
11039 this._read(rs.highWaterMark);
11040 }
11041 };
11042
11043 // Doesn't matter what the args are here.
11044 // _transform does all the work.
11045 // That we got here means that the readable side wants more data.
11046 Transform.prototype._read = function(n) {
11047 var ts = this._transformState;
11048
11049 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
11050 ts.transforming = true;
11051 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11052 } else {
11053 // mark that we need a transform, so that any data that comes in
11054 // will get processed, now that we've asked for it.
11055 ts.needTransform = true;
11056 }
11057 };
11058
11059
11060 function done(stream, er) {
11061 if (er)
11062 return stream.emit('error', er);
11063
11064 // if there's nothing in the write buffer, then that means
11065 // that nothing more will ever be provided
11066 var ws = stream._writableState;
11067 var ts = stream._transformState;
11068
11069 if (ws.length)
11070 throw new Error('calling transform done when ws.length != 0');
11071
11072 if (ts.transforming)
11073 throw new Error('calling transform done when still transforming');
11074
11075 return stream.push(null);
11076 }
11077
11078 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
11079 (function (process){
11080 // Copyright Joyent, Inc. and other Node contributors.
11081 //
11082 // Permission is hereby granted, free of charge, to any person obtaining a
11083 // copy of this software and associated documentation files (the
11084 // "Software"), to deal in the Software without restriction, including
11085 // without limitation the rights to use, copy, modify, merge, publish,
11086 // distribute, sublicense, and/or sell copies of the Software, and to permit
11087 // persons to whom the Software is furnished to do so, subject to the
11088 // following conditions:
11089 //
11090 // The above copyright notice and this permission notice shall be included
11091 // in all copies or substantial portions of the Software.
11092 //
11093 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11094 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11095 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11096 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11097 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11098 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11099 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11100
11101 // A bit simpler than readable streams.
11102 // Implement an async ._write(chunk, cb), and it'll handle all
11103 // the drain event emission and buffering.
11104
11105 module.exports = Writable;
11106
11107 /*<replacement>*/
11108 var Buffer = require('buffer').Buffer;
11109 /*</replacement>*/
11110
11111 Writable.WritableState = WritableState;
11112
11113
11114 /*<replacement>*/
11115 var util = require('core-util-is');
11116 util.inherits = require('inherits');
11117 /*</replacement>*/
11118
11119 var Stream = require('stream');
11120
11121 util.inherits(Writable, Stream);
11122
11123 function WriteReq(chunk, encoding, cb) {
11124 this.chunk = chunk;
11125 this.encoding = encoding;
11126 this.callback = cb;
11127 }
11128
11129 function WritableState(options, stream) {
11130 var Duplex = require('./_stream_duplex');
11131
11132 options = options || {};
11133
11134 // the point at which write() starts returning false
11135 // Note: 0 is a valid value, means that we always return false if
11136 // the entire buffer is not flushed immediately on write()
11137 var hwm = options.highWaterMark;
11138 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
11139 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
11140
11141 // object stream flag to indicate whether or not this stream
11142 // contains buffers or objects.
11143 this.objectMode = !!options.objectMode;
11144
11145 if (stream instanceof Duplex)
11146 this.objectMode = this.objectMode || !!options.writableObjectMode;
11147
11148 // cast to ints.
11149 this.highWaterMark = ~~this.highWaterMark;
11150
11151 this.needDrain = false;
11152 // at the start of calling end()
11153 this.ending = false;
11154 // when end() has been called, and returned
11155 this.ended = false;
11156 // when 'finish' is emitted
11157 this.finished = false;
11158
11159 // should we decode strings into buffers before passing to _write?
11160 // this is here so that some node-core streams can optimize string
11161 // handling at a lower level.
11162 var noDecode = options.decodeStrings === false;
11163 this.decodeStrings = !noDecode;
11164
11165 // Crypto is kind of old and crusty. Historically, its default string
11166 // encoding is 'binary' so we have to make this configurable.
11167 // Everything else in the universe uses 'utf8', though.
11168 this.defaultEncoding = options.defaultEncoding || 'utf8';
11169
11170 // not an actual buffer we keep track of, but a measurement
11171 // of how much we're waiting to get pushed to some underlying
11172 // socket or file.
11173 this.length = 0;
11174
11175 // a flag to see when we're in the middle of a write.
11176 this.writing = false;
11177
11178 // when true all writes will be buffered until .uncork() call
11179 this.corked = 0;
11180
11181 // a flag to be able to tell if the onwrite cb is called immediately,
11182 // or on a later tick. We set this to true at first, because any
11183 // actions that shouldn't happen until "later" should generally also
11184 // not happen before the first write call.
11185 this.sync = true;
11186
11187 // a flag to know if we're processing previously buffered items, which
11188 // may call the _write() callback in the same tick, so that we don't
11189 // end up in an overlapped onwrite situation.
11190 this.bufferProcessing = false;
11191
11192 // the callback that's passed to _write(chunk,cb)
11193 this.onwrite = function(er) {
11194 onwrite(stream, er);
11195 };
11196
11197 // the callback that the user supplies to write(chunk,encoding,cb)
11198 this.writecb = null;
11199
11200 // the amount that is being written when _write is called.
11201 this.writelen = 0;
11202
11203 this.buffer = [];
11204
11205 // number of pending user-supplied write callbacks
11206 // this must be 0 before 'finish' can be emitted
11207 this.pendingcb = 0;
11208
11209 // emit prefinish if the only thing we're waiting for is _write cbs
11210 // This is relevant for synchronous Transform streams
11211 this.prefinished = false;
11212
11213 // True if the error was already emitted and should not be thrown again
11214 this.errorEmitted = false;
11215 }
11216
11217 function Writable(options) {
11218 var Duplex = require('./_stream_duplex');
11219
11220 // Writable ctor is applied to Duplexes, though they're not
11221 // instanceof Writable, they're instanceof Readable.
11222 if (!(this instanceof Writable) && !(this instanceof Duplex))
11223 return new Writable(options);
11224
11225 this._writableState = new WritableState(options, this);
11226
11227 // legacy.
11228 this.writable = true;
11229
11230 Stream.call(this);
11231 }
11232
11233 // Otherwise people can pipe Writable streams, which is just wrong.
11234 Writable.prototype.pipe = function() {
11235 this.emit('error', new Error('Cannot pipe. Not readable.'));
11236 };
11237
11238
11239 function writeAfterEnd(stream, state, cb) {
11240 var er = new Error('write after end');
11241 // TODO: defer error events consistently everywhere, not just the cb
11242 stream.emit('error', er);
11243 process.nextTick(function() {
11244 cb(er);
11245 });
11246 }
11247
11248 // If we get something that is not a buffer, string, null, or undefined,
11249 // and we're not in objectMode, then that's an error.
11250 // Otherwise stream chunks are all considered to be of length=1, and the
11251 // watermarks determine how many objects to keep in the buffer, rather than
11252 // how many bytes or characters.
11253 function validChunk(stream, state, chunk, cb) {
11254 var valid = true;
11255 if (!util.isBuffer(chunk) &&
11256 !util.isString(chunk) &&
11257 !util.isNullOrUndefined(chunk) &&
11258 !state.objectMode) {
11259 var er = new TypeError('Invalid non-string/buffer chunk');
11260 stream.emit('error', er);
11261 process.nextTick(function() {
11262 cb(er);
11263 });
11264 valid = false;
11265 }
11266 return valid;
11267 }
11268
11269 Writable.prototype.write = function(chunk, encoding, cb) {
11270 var state = this._writableState;
11271 var ret = false;
11272
11273 if (util.isFunction(encoding)) {
11274 cb = encoding;
11275 encoding = null;
11276 }
11277
11278 if (util.isBuffer(chunk))
11279 encoding = 'buffer';
11280 else if (!encoding)
11281 encoding = state.defaultEncoding;
11282
11283 if (!util.isFunction(cb))
11284 cb = function() {};
11285
11286 if (state.ended)
11287 writeAfterEnd(this, state, cb);
11288 else if (validChunk(this, state, chunk, cb)) {
11289 state.pendingcb++;
11290 ret = writeOrBuffer(this, state, chunk, encoding, cb);
11291 }
11292
11293 return ret;
11294 };
11295
11296 Writable.prototype.cork = function() {
11297 var state = this._writableState;
11298
11299 state.corked++;
11300 };
11301
11302 Writable.prototype.uncork = function() {
11303 var state = this._writableState;
11304
11305 if (state.corked) {
11306 state.corked--;
11307
11308 if (!state.writing &&
11309 !state.corked &&
11310 !state.finished &&
11311 !state.bufferProcessing &&
11312 state.buffer.length)
11313 clearBuffer(this, state);
11314 }
11315 };
11316
11317 function decodeChunk(state, chunk, encoding) {
11318 if (!state.objectMode &&
11319 state.decodeStrings !== false &&
11320 util.isString(chunk)) {
11321 chunk = new Buffer(chunk, encoding);
11322 }
11323 return chunk;
11324 }
11325
11326 // if we're already writing something, then just put this
11327 // in the queue, and wait our turn. Otherwise, call _write
11328 // If we return false, then we need a drain event, so set that flag.
11329 function writeOrBuffer(stream, state, chunk, encoding, cb) {
11330 chunk = decodeChunk(state, chunk, encoding);
11331 if (util.isBuffer(chunk))
11332 encoding = 'buffer';
11333 var len = state.objectMode ? 1 : chunk.length;
11334
11335 state.length += len;
11336
11337 var ret = state.length < state.highWaterMark;
11338 // we must ensure that previous needDrain will not be reset to false.
11339 if (!ret)
11340 state.needDrain = true;
11341
11342 if (state.writing || state.corked)
11343 state.buffer.push(new WriteReq(chunk, encoding, cb));
11344 else
11345 doWrite(stream, state, false, len, chunk, encoding, cb);
11346
11347 return ret;
11348 }
11349
11350 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
11351 state.writelen = len;
11352 state.writecb = cb;
11353 state.writing = true;
11354 state.sync = true;
11355 if (writev)
11356 stream._writev(chunk, state.onwrite);
11357 else
11358 stream._write(chunk, encoding, state.onwrite);
11359 state.sync = false;
11360 }
11361
11362 function onwriteError(stream, state, sync, er, cb) {
11363 if (sync)
11364 process.nextTick(function() {
11365 state.pendingcb--;
11366 cb(er);
11367 });
11368 else {
11369 state.pendingcb--;
11370 cb(er);
11371 }
11372
11373 stream._writableState.errorEmitted = true;
11374 stream.emit('error', er);
11375 }
11376
11377 function onwriteStateUpdate(state) {
11378 state.writing = false;
11379 state.writecb = null;
11380 state.length -= state.writelen;
11381 state.writelen = 0;
11382 }
11383
11384 function onwrite(stream, er) {
11385 var state = stream._writableState;
11386 var sync = state.sync;
11387 var cb = state.writecb;
11388
11389 onwriteStateUpdate(state);
11390
11391 if (er)
11392 onwriteError(stream, state, sync, er, cb);
11393 else {
11394 // Check if we're actually ready to finish, but don't emit yet
11395 var finished = needFinish(stream, state);
11396
11397 if (!finished &&
11398 !state.corked &&
11399 !state.bufferProcessing &&
11400 state.buffer.length) {
11401 clearBuffer(stream, state);
11402 }
11403
11404 if (sync) {
11405 process.nextTick(function() {
11406 afterWrite(stream, state, finished, cb);
11407 });
11408 } else {
11409 afterWrite(stream, state, finished, cb);
11410 }
11411 }
11412 }
11413
11414 function afterWrite(stream, state, finished, cb) {
11415 if (!finished)
11416 onwriteDrain(stream, state);
11417 state.pendingcb--;
11418 cb();
11419 finishMaybe(stream, state);
11420 }
11421
11422 // Must force callback to be called on nextTick, so that we don't
11423 // emit 'drain' before the write() consumer gets the 'false' return
11424 // value, and has a chance to attach a 'drain' listener.
11425 function onwriteDrain(stream, state) {
11426 if (state.length === 0 && state.needDrain) {
11427 state.needDrain = false;
11428 stream.emit('drain');
11429 }
11430 }
11431
11432
11433 // if there's something in the buffer waiting, then process it
11434 function clearBuffer(stream, state) {
11435 state.bufferProcessing = true;
11436
11437 if (stream._writev && state.buffer.length > 1) {
11438 // Fast case, write everything using _writev()
11439 var cbs = [];
11440 for (var c = 0; c < state.buffer.length; c++)
11441 cbs.push(state.buffer[c].callback);
11442
11443 // count the one we are adding, as well.
11444 // TODO(isaacs) clean this up
11445 state.pendingcb++;
11446 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
11447 for (var i = 0; i < cbs.length; i++) {
11448 state.pendingcb--;
11449 cbs[i](err);
11450 }
11451 });
11452
11453 // Clear buffer
11454 state.buffer = [];
11455 } else {
11456 // Slow case, write chunks one-by-one
11457 for (var c = 0; c < state.buffer.length; c++) {
11458 var entry = state.buffer[c];
11459 var chunk = entry.chunk;
11460 var encoding = entry.encoding;
11461 var cb = entry.callback;
11462 var len = state.objectMode ? 1 : chunk.length;
11463
11464 doWrite(stream, state, false, len, chunk, encoding, cb);
11465
11466 // if we didn't call the onwrite immediately, then
11467 // it means that we need to wait until it does.
11468 // also, that means that the chunk and cb are currently
11469 // being processed, so move the buffer counter past them.
11470 if (state.writing) {
11471 c++;
11472 break;
11473 }
11474 }
11475
11476 if (c < state.buffer.length)
11477 state.buffer = state.buffer.slice(c);
11478 else
11479 state.buffer.length = 0;
11480 }
11481
11482 state.bufferProcessing = false;
11483 }
11484
11485 Writable.prototype._write = function(chunk, encoding, cb) {
11486 cb(new Error('not implemented'));
11487
11488 };
11489
11490 Writable.prototype._writev = null;
11491
11492 Writable.prototype.end = function(chunk, encoding, cb) {
11493 var state = this._writableState;
11494
11495 if (util.isFunction(chunk)) {
11496 cb = chunk;
11497 chunk = null;
11498 encoding = null;
11499 } else if (util.isFunction(encoding)) {
11500 cb = encoding;
11501 encoding = null;
11502 }
11503
11504 if (!util.isNullOrUndefined(chunk))
11505 this.write(chunk, encoding);
11506
11507 // .end() fully uncorks
11508 if (state.corked) {
11509 state.corked = 1;
11510 this.uncork();
11511 }
11512
11513 // ignore unnecessary end() calls.
11514 if (!state.ending && !state.finished)
11515 endWritable(this, state, cb);
11516 };
11517
11518
11519 function needFinish(stream, state) {
11520 return (state.ending &&
11521 state.length === 0 &&
11522 !state.finished &&
11523 !state.writing);
11524 }
11525
11526 function prefinish(stream, state) {
11527 if (!state.prefinished) {
11528 state.prefinished = true;
11529 stream.emit('prefinish');
11530 }
11531 }
11532
11533 function finishMaybe(stream, state) {
11534 var need = needFinish(stream, state);
11535 if (need) {
11536 if (state.pendingcb === 0) {
11537 prefinish(stream, state);
11538 state.finished = true;
11539 stream.emit('finish');
11540 } else
11541 prefinish(stream, state);
11542 }
11543 return need;
11544 }
11545
11546 function endWritable(stream, state, cb) {
11547 state.ending = true;
11548 finishMaybe(stream, state);
11549 if (cb) {
11550 if (state.finished)
11551 process.nextTick(cb);
11552 else
11553 stream.once('finish', cb);
11554 }
11555 state.ended = true;
11556 }
11557
11558 }).call(this,require('_process'))
11559 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
11560 (function (Buffer){
11561 // Copyright Joyent, Inc. and other Node contributors.
11562 //
11563 // Permission is hereby granted, free of charge, to any person obtaining a
11564 // copy of this software and associated documentation files (the
11565 // "Software"), to deal in the Software without restriction, including
11566 // without limitation the rights to use, copy, modify, merge, publish,
11567 // distribute, sublicense, and/or sell copies of the Software, and to permit
11568 // persons to whom the Software is furnished to do so, subject to the
11569 // following conditions:
11570 //
11571 // The above copyright notice and this permission notice shall be included
11572 // in all copies or substantial portions of the Software.
11573 //
11574 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11575 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11576 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11577 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11578 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11579 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11580 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11581
11582 // NOTE: These type checking functions intentionally don't use `instanceof`
11583 // because it is fragile and can be easily faked with `Object.create()`.
11584 function isArray(ar) {
11585 return Array.isArray(ar);
11586 }
11587 exports.isArray = isArray;
11588
11589 function isBoolean(arg) {
11590 return typeof arg === 'boolean';
11591 }
11592 exports.isBoolean = isBoolean;
11593
11594 function isNull(arg) {
11595 return arg === null;
11596 }
11597 exports.isNull = isNull;
11598
11599 function isNullOrUndefined(arg) {
11600 return arg == null;
11601 }
11602 exports.isNullOrUndefined = isNullOrUndefined;
11603
11604 function isNumber(arg) {
11605 return typeof arg === 'number';
11606 }
11607 exports.isNumber = isNumber;
11608
11609 function isString(arg) {
11610 return typeof arg === 'string';
11611 }
11612 exports.isString = isString;
11613
11614 function isSymbol(arg) {
11615 return typeof arg === 'symbol';
11616 }
11617 exports.isSymbol = isSymbol;
11618
11619 function isUndefined(arg) {
11620 return arg === void 0;
11621 }
11622 exports.isUndefined = isUndefined;
11623
11624 function isRegExp(re) {
11625 return isObject(re) && objectToString(re) === '[object RegExp]';
11626 }
11627 exports.isRegExp = isRegExp;
11628
11629 function isObject(arg) {
11630 return typeof arg === 'object' && arg !== null;
11631 }
11632 exports.isObject = isObject;
11633
11634 function isDate(d) {
11635 return isObject(d) && objectToString(d) === '[object Date]';
11636 }
11637 exports.isDate = isDate;
11638
11639 function isError(e) {
11640 return isObject(e) &&
11641 (objectToString(e) === '[object Error]' || e instanceof Error);
11642 }
11643 exports.isError = isError;
11644
11645 function isFunction(arg) {
11646 return typeof arg === 'function';
11647 }
11648 exports.isFunction = isFunction;
11649
11650 function isPrimitive(arg) {
11651 return arg === null ||
11652 typeof arg === 'boolean' ||
11653 typeof arg === 'number' ||
11654 typeof arg === 'string' ||
11655 typeof arg === 'symbol' || // ES6 symbol
11656 typeof arg === 'undefined';
11657 }
11658 exports.isPrimitive = isPrimitive;
11659
11660 function isBuffer(arg) {
11661 return Buffer.isBuffer(arg);
11662 }
11663 exports.isBuffer = isBuffer;
11664
11665 function objectToString(o) {
11666 return Object.prototype.toString.call(o);
11667 }
11668 }).call(this,require("buffer").Buffer)
11669 },{"buffer":7}],22:[function(require,module,exports){
11670 module.exports = require("./lib/_stream_passthrough.js")
11671
11672 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
11673 exports = module.exports = require('./lib/_stream_readable.js');
11674 exports.Stream = require('stream');
11675 exports.Readable = exports;
11676 exports.Writable = require('./lib/_stream_writable.js');
11677 exports.Duplex = require('./lib/_stream_duplex.js');
11678 exports.Transform = require('./lib/_stream_transform.js');
11679 exports.PassThrough = require('./lib/_stream_passthrough.js');
11680
11681 },{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
11682 module.exports = require("./lib/_stream_transform.js")
11683
11684 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
11685 module.exports = require("./lib/_stream_writable.js")
11686
11687 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
11688 // Copyright Joyent, Inc. and other Node contributors.
11689 //
11690 // Permission is hereby granted, free of charge, to any person obtaining a
11691 // copy of this software and associated documentation files (the
11692 // "Software"), to deal in the Software without restriction, including
11693 // without limitation the rights to use, copy, modify, merge, publish,
11694 // distribute, sublicense, and/or sell copies of the Software, and to permit
11695 // persons to whom the Software is furnished to do so, subject to the
11696 // following conditions:
11697 //
11698 // The above copyright notice and this permission notice shall be included
11699 // in all copies or substantial portions of the Software.
11700 //
11701 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11702 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11703 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11704 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11705 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11706 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11707 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11708
11709 module.exports = Stream;
11710
11711 var EE = require('events').EventEmitter;
11712 var inherits = require('inherits');
11713
11714 inherits(Stream, EE);
11715 Stream.Readable = require('readable-stream/readable.js');
11716 Stream.Writable = require('readable-stream/writable.js');
11717 Stream.Duplex = require('readable-stream/duplex.js');
11718 Stream.Transform = require('readable-stream/transform.js');
11719 Stream.PassThrough = require('readable-stream/passthrough.js');
11720
11721 // Backwards-compat with node 0.4.x
11722 Stream.Stream = Stream;
11723
11724
11725
11726 // old-style streams. Note that the pipe method (the only relevant
11727 // part of this class) is overridden in the Readable class.
11728
11729 function Stream() {
11730 EE.call(this);
11731 }
11732
11733 Stream.prototype.pipe = function(dest, options) {
11734 var source = this;
11735
11736 function ondata(chunk) {
11737 if (dest.writable) {
11738 if (false === dest.write(chunk) && source.pause) {
11739 source.pause();
11740 }
11741 }
11742 }
11743
11744 source.on('data', ondata);
11745
11746 function ondrain() {
11747 if (source.readable && source.resume) {
11748 source.resume();
11749 }
11750 }
11751
11752 dest.on('drain', ondrain);
11753
11754 // If the 'end' option is not supplied, dest.end() will be called when
11755 // source gets the 'end' or 'close' events. Only dest.end() once.
11756 if (!dest._isStdio && (!options || options.end !== false)) {
11757 source.on('end', onend);
11758 source.on('close', onclose);
11759 }
11760
11761 var didOnEnd = false;
11762 function onend() {
11763 if (didOnEnd) return;
11764 didOnEnd = true;
11765
11766 dest.end();
11767 }
11768
11769
11770 function onclose() {
11771 if (didOnEnd) return;
11772 didOnEnd = true;
11773
11774 if (typeof dest.destroy === 'function') dest.destroy();
11775 }
11776
11777 // don't leave dangling pipes when there are errors.
11778 function onerror(er) {
11779 cleanup();
11780 if (EE.listenerCount(this, 'error') === 0) {
11781 throw er; // Unhandled stream error in pipe.
11782 }
11783 }
11784
11785 source.on('error', onerror);
11786 dest.on('error', onerror);
11787
11788 // remove all the event listeners that were added.
11789 function cleanup() {
11790 source.removeListener('data', ondata);
11791 dest.removeListener('drain', ondrain);
11792
11793 source.removeListener('end', onend);
11794 source.removeListener('close', onclose);
11795
11796 source.removeListener('error', onerror);
11797 dest.removeListener('error', onerror);
11798
11799 source.removeListener('end', cleanup);
11800 source.removeListener('close', cleanup);
11801
11802 dest.removeListener('close', cleanup);
11803 }
11804
11805 source.on('end', cleanup);
11806 source.on('close', cleanup);
11807
11808 dest.on('close', cleanup);
11809
11810 dest.emit('pipe', source);
11811
11812 // Allow for unix-like usage: A.pipe(B).pipe(C)
11813 return dest;
11814 };
11815
11816 },{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
11817 // Copyright Joyent, Inc. and other Node contributors.
11818 //
11819 // Permission is hereby granted, free of charge, to any person obtaining a
11820 // copy of this software and associated documentation files (the
11821 // "Software"), to deal in the Software without restriction, including
11822 // without limitation the rights to use, copy, modify, merge, publish,
11823 // distribute, sublicense, and/or sell copies of the Software, and to permit
11824 // persons to whom the Software is furnished to do so, subject to the
11825 // following conditions:
11826 //
11827 // The above copyright notice and this permission notice shall be included
11828 // in all copies or substantial portions of the Software.
11829 //
11830 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11831 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11832 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11833 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11834 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11835 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11836 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11837
11838 var Buffer = require('buffer').Buffer;
11839
11840 var isBufferEncoding = Buffer.isEncoding
11841 || function(encoding) {
11842 switch (encoding && encoding.toLowerCase()) {
11843 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;
11844 default: return false;
11845 }
11846 }
11847
11848
11849 function assertEncoding(encoding) {
11850 if (encoding && !isBufferEncoding(encoding)) {
11851 throw new Error('Unknown encoding: ' + encoding);
11852 }
11853 }
11854
11855 // StringDecoder provides an interface for efficiently splitting a series of
11856 // buffers into a series of JS strings without breaking apart multi-byte
11857 // characters. CESU-8 is handled as part of the UTF-8 encoding.
11858 //
11859 // @TODO Handling all encodings inside a single object makes it very difficult
11860 // to reason about this code, so it should be split up in the future.
11861 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
11862 // points as used by CESU-8.
11863 var StringDecoder = exports.StringDecoder = function(encoding) {
11864 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
11865 assertEncoding(encoding);
11866 switch (this.encoding) {
11867 case 'utf8':
11868 // CESU-8 represents each of Surrogate Pair by 3-bytes
11869 this.surrogateSize = 3;
11870 break;
11871 case 'ucs2':
11872 case 'utf16le':
11873 // UTF-16 represents each of Surrogate Pair by 2-bytes
11874 this.surrogateSize = 2;
11875 this.detectIncompleteChar = utf16DetectIncompleteChar;
11876 break;
11877 case 'base64':
11878 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
11879 this.surrogateSize = 3;
11880 this.detectIncompleteChar = base64DetectIncompleteChar;
11881 break;
11882 default:
11883 this.write = passThroughWrite;
11884 return;
11885 }
11886
11887 // Enough space to store all bytes of a single character. UTF-8 needs 4
11888 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
11889 this.charBuffer = new Buffer(6);
11890 // Number of bytes received for the current incomplete multi-byte character.
11891 this.charReceived = 0;
11892 // Number of bytes expected for the current incomplete multi-byte character.
11893 this.charLength = 0;
11894 };
11895
11896
11897 // write decodes the given buffer and returns it as JS string that is
11898 // guaranteed to not contain any partial multi-byte characters. Any partial
11899 // character found at the end of the buffer is buffered up, and will be
11900 // returned when calling write again with the remaining bytes.
11901 //
11902 // Note: Converting a Buffer containing an orphan surrogate to a String
11903 // currently works, but converting a String to a Buffer (via `new Buffer`, or
11904 // Buffer#write) will replace incomplete surrogates with the unicode
11905 // replacement character. See https://codereview.chromium.org/121173009/ .
11906 StringDecoder.prototype.write = function(buffer) {
11907 var charStr = '';
11908 // if our last write ended with an incomplete multibyte character
11909 while (this.charLength) {
11910 // determine how many remaining bytes this buffer has to offer for this char
11911 var available = (buffer.length >= this.charLength - this.charReceived) ?
11912 this.charLength - this.charReceived :
11913 buffer.length;
11914
11915 // add the new bytes to the char buffer
11916 buffer.copy(this.charBuffer, this.charReceived, 0, available);
11917 this.charReceived += available;
11918
11919 if (this.charReceived < this.charLength) {
11920 // still not enough chars in this buffer? wait for more ...
11921 return '';
11922 }
11923
11924 // remove bytes belonging to the current character from the buffer
11925 buffer = buffer.slice(available, buffer.length);
11926
11927 // get the character that was split
11928 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
11929
11930 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11931 var charCode = charStr.charCodeAt(charStr.length - 1);
11932 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11933 this.charLength += this.surrogateSize;
11934 charStr = '';
11935 continue;
11936 }
11937 this.charReceived = this.charLength = 0;
11938
11939 // if there are no more bytes in this buffer, just emit our char
11940 if (buffer.length === 0) {
11941 return charStr;
11942 }
11943 break;
11944 }
11945
11946 // determine and set charLength / charReceived
11947 this.detectIncompleteChar(buffer);
11948
11949 var end = buffer.length;
11950 if (this.charLength) {
11951 // buffer the incomplete character bytes we got
11952 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
11953 end -= this.charReceived;
11954 }
11955
11956 charStr += buffer.toString(this.encoding, 0, end);
11957
11958 var end = charStr.length - 1;
11959 var charCode = charStr.charCodeAt(end);
11960 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11961 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11962 var size = this.surrogateSize;
11963 this.charLength += size;
11964 this.charReceived += size;
11965 this.charBuffer.copy(this.charBuffer, size, 0, size);
11966 buffer.copy(this.charBuffer, 0, 0, size);
11967 return charStr.substring(0, end);
11968 }
11969
11970 // or just emit the charStr
11971 return charStr;
11972 };
11973
11974 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
11975 // the end of the given buffer. If so, it sets this.charLength to the byte
11976 // length that character, and sets this.charReceived to the number of bytes
11977 // that are available for this character.
11978 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
11979 // determine how many bytes we have to check at the end of this buffer
11980 var i = (buffer.length >= 3) ? 3 : buffer.length;
11981
11982 // Figure out if one of the last i bytes of our buffer announces an
11983 // incomplete char.
11984 for (; i > 0; i--) {
11985 var c = buffer[buffer.length - i];
11986
11987 // See http://en.wikipedia.org/wiki/UTF-8#Description
11988
11989 // 110XXXXX
11990 if (i == 1 && c >> 5 == 0x06) {
11991 this.charLength = 2;
11992 break;
11993 }
11994
11995 // 1110XXXX
11996 if (i <= 2 && c >> 4 == 0x0E) {
11997 this.charLength = 3;
11998 break;
11999 }
12000
12001 // 11110XXX
12002 if (i <= 3 && c >> 3 == 0x1E) {
12003 this.charLength = 4;
12004 break;
12005 }
12006 }
12007 this.charReceived = i;
12008 };
12009
12010 StringDecoder.prototype.end = function(buffer) {
12011 var res = '';
12012 if (buffer && buffer.length)
12013 res = this.write(buffer);
12014
12015 if (this.charReceived) {
12016 var cr = this.charReceived;
12017 var buf = this.charBuffer;
12018 var enc = this.encoding;
12019 res += buf.slice(0, cr).toString(enc);
12020 }
12021
12022 return res;
12023 };
12024
12025 function passThroughWrite(buffer) {
12026 return buffer.toString(this.encoding);
12027 }
12028
12029 function utf16DetectIncompleteChar(buffer) {
12030 this.charReceived = buffer.length % 2;
12031 this.charLength = this.charReceived ? 2 : 0;
12032 }
12033
12034 function base64DetectIncompleteChar(buffer) {
12035 this.charReceived = buffer.length % 3;
12036 this.charLength = this.charReceived ? 3 : 0;
12037 }
12038
12039 },{"buffer":7}],28:[function(require,module,exports){
12040 module.exports = function isBuffer(arg) {
12041 return arg && typeof arg === 'object'
12042 && typeof arg.copy === 'function'
12043 && typeof arg.fill === 'function'
12044 && typeof arg.readUInt8 === 'function';
12045 }
12046 },{}],29:[function(require,module,exports){
12047 (function (process,global){
12048 // Copyright Joyent, Inc. and other Node contributors.
12049 //
12050 // Permission is hereby granted, free of charge, to any person obtaining a
12051 // copy of this software and associated documentation files (the
12052 // "Software"), to deal in the Software without restriction, including
12053 // without limitation the rights to use, copy, modify, merge, publish,
12054 // distribute, sublicense, and/or sell copies of the Software, and to permit
12055 // persons to whom the Software is furnished to do so, subject to the
12056 // following conditions:
12057 //
12058 // The above copyright notice and this permission notice shall be included
12059 // in all copies or substantial portions of the Software.
12060 //
12061 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12062 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12063 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12064 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12065 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12066 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12067 // USE OR OTHER DEALINGS IN THE SOFTWARE.
12068
12069 var formatRegExp = /%[sdj%]/g;
12070 exports.format = function(f) {
12071 if (!isString(f)) {
12072 var objects = [];
12073 for (var i = 0; i < arguments.length; i++) {
12074 objects.push(inspect(arguments[i]));
12075 }
12076 return objects.join(' ');
12077 }
12078
12079 var i = 1;
12080 var args = arguments;
12081 var len = args.length;
12082 var str = String(f).replace(formatRegExp, function(x) {
12083 if (x === '%%') return '%';
12084 if (i >= len) return x;
12085 switch (x) {
12086 case '%s': return String(args[i++]);
12087 case '%d': return Number(args[i++]);
12088 case '%j':
12089 try {
12090 return JSON.stringify(args[i++]);
12091 } catch (_) {
12092 return '[Circular]';
12093 }
12094 default:
12095 return x;
12096 }
12097 });
12098 for (var x = args[i]; i < len; x = args[++i]) {
12099 if (isNull(x) || !isObject(x)) {
12100 str += ' ' + x;
12101 } else {
12102 str += ' ' + inspect(x);
12103 }
12104 }
12105 return str;
12106 };
12107
12108
12109 // Mark that a method should not be used.
12110 // Returns a modified function which warns once by default.
12111 // If --no-deprecation is set, then it is a no-op.
12112 exports.deprecate = function(fn, msg) {
12113 // Allow for deprecating things in the process of starting up.
12114 if (isUndefined(global.process)) {
12115 return function() {
12116 return exports.deprecate(fn, msg).apply(this, arguments);
12117 };
12118 }
12119
12120 if (process.noDeprecation === true) {
12121 return fn;
12122 }
12123
12124 var warned = false;
12125 function deprecated() {
12126 if (!warned) {
12127 if (process.throwDeprecation) {
12128 throw new Error(msg);
12129 } else if (process.traceDeprecation) {
12130 console.trace(msg);
12131 } else {
12132 console.error(msg);
12133 }
12134 warned = true;
12135 }
12136 return fn.apply(this, arguments);
12137 }
12138
12139 return deprecated;
12140 };
12141
12142
12143 var debugs = {};
12144 var debugEnviron;
12145 exports.debuglog = function(set) {
12146 if (isUndefined(debugEnviron))
12147 debugEnviron = process.env.NODE_DEBUG || '';
12148 set = set.toUpperCase();
12149 if (!debugs[set]) {
12150 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
12151 var pid = process.pid;
12152 debugs[set] = function() {
12153 var msg = exports.format.apply(exports, arguments);
12154 console.error('%s %d: %s', set, pid, msg);
12155 };
12156 } else {
12157 debugs[set] = function() {};
12158 }
12159 }
12160 return debugs[set];
12161 };
12162
12163
12164 /**
12165 * Echos the value of a value. Trys to print the value out
12166 * in the best way possible given the different types.
12167 *
12168 * @param {Object} obj The object to print out.
12169 * @param {Object} opts Optional options object that alters the output.
12170 */
12171 /* legacy: obj, showHidden, depth, colors*/
12172 function inspect(obj, opts) {
12173 // default options
12174 var ctx = {
12175 seen: [],
12176 stylize: stylizeNoColor
12177 };
12178 // legacy...
12179 if (arguments.length >= 3) ctx.depth = arguments[2];
12180 if (arguments.length >= 4) ctx.colors = arguments[3];
12181 if (isBoolean(opts)) {
12182 // legacy...
12183 ctx.showHidden = opts;
12184 } else if (opts) {
12185 // got an "options" object
12186 exports._extend(ctx, opts);
12187 }
12188 // set default options
12189 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
12190 if (isUndefined(ctx.depth)) ctx.depth = 2;
12191 if (isUndefined(ctx.colors)) ctx.colors = false;
12192 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
12193 if (ctx.colors) ctx.stylize = stylizeWithColor;
12194 return formatValue(ctx, obj, ctx.depth);
12195 }
12196 exports.inspect = inspect;
12197
12198
12199 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
12200 inspect.colors = {
12201 'bold' : [1, 22],
12202 'italic' : [3, 23],
12203 'underline' : [4, 24],
12204 'inverse' : [7, 27],
12205 'white' : [37, 39],
12206 'grey' : [90, 39],
12207 'black' : [30, 39],
12208 'blue' : [34, 39],
12209 'cyan' : [36, 39],
12210 'green' : [32, 39],
12211 'magenta' : [35, 39],
12212 'red' : [31, 39],
12213 'yellow' : [33, 39]
12214 };
12215
12216 // Don't use 'blue' not visible on cmd.exe
12217 inspect.styles = {
12218 'special': 'cyan',
12219 'number': 'yellow',
12220 'boolean': 'yellow',
12221 'undefined': 'grey',
12222 'null': 'bold',
12223 'string': 'green',
12224 'date': 'magenta',
12225 // "name": intentionally not styling
12226 'regexp': 'red'
12227 };
12228
12229
12230 function stylizeWithColor(str, styleType) {
12231 var style = inspect.styles[styleType];
12232
12233 if (style) {
12234 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
12235 '\u001b[' + inspect.colors[style][1] + 'm';
12236 } else {
12237 return str;
12238 }
12239 }
12240
12241
12242 function stylizeNoColor(str, styleType) {
12243 return str;
12244 }
12245
12246
12247 function arrayToHash(array) {
12248 var hash = {};
12249
12250 array.forEach(function(val, idx) {
12251 hash[val] = true;
12252 });
12253
12254 return hash;
12255 }
12256
12257
12258 function formatValue(ctx, value, recurseTimes) {
12259 // Provide a hook for user-specified inspect functions.
12260 // Check that value is an object with an inspect function on it
12261 if (ctx.customInspect &&
12262 value &&
12263 isFunction(value.inspect) &&
12264 // Filter out the util module, it's inspect function is special
12265 value.inspect !== exports.inspect &&
12266 // Also filter out any prototype objects using the circular check.
12267 !(value.constructor && value.constructor.prototype === value)) {
12268 var ret = value.inspect(recurseTimes, ctx);
12269 if (!isString(ret)) {
12270 ret = formatValue(ctx, ret, recurseTimes);
12271 }
12272 return ret;
12273 }
12274
12275 // Primitive types cannot have properties
12276 var primitive = formatPrimitive(ctx, value);
12277 if (primitive) {
12278 return primitive;
12279 }
12280
12281 // Look up the keys of the object.
12282 var keys = Object.keys(value);
12283 var visibleKeys = arrayToHash(keys);
12284
12285 if (ctx.showHidden) {
12286 keys = Object.getOwnPropertyNames(value);
12287 }
12288
12289 // IE doesn't make error fields non-enumerable
12290 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
12291 if (isError(value)
12292 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
12293 return formatError(value);
12294 }
12295
12296 // Some type of object without properties can be shortcutted.
12297 if (keys.length === 0) {
12298 if (isFunction(value)) {
12299 var name = value.name ? ': ' + value.name : '';
12300 return ctx.stylize('[Function' + name + ']', 'special');
12301 }
12302 if (isRegExp(value)) {
12303 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12304 }
12305 if (isDate(value)) {
12306 return ctx.stylize(Date.prototype.toString.call(value), 'date');
12307 }
12308 if (isError(value)) {
12309 return formatError(value);
12310 }
12311 }
12312
12313 var base = '', array = false, braces = ['{', '}'];
12314
12315 // Make Array say that they are Array
12316 if (isArray(value)) {
12317 array = true;
12318 braces = ['[', ']'];
12319 }
12320
12321 // Make functions say that they are functions
12322 if (isFunction(value)) {
12323 var n = value.name ? ': ' + value.name : '';
12324 base = ' [Function' + n + ']';
12325 }
12326
12327 // Make RegExps say that they are RegExps
12328 if (isRegExp(value)) {
12329 base = ' ' + RegExp.prototype.toString.call(value);
12330 }
12331
12332 // Make dates with properties first say the date
12333 if (isDate(value)) {
12334 base = ' ' + Date.prototype.toUTCString.call(value);
12335 }
12336
12337 // Make error with message first say the error
12338 if (isError(value)) {
12339 base = ' ' + formatError(value);
12340 }
12341
12342 if (keys.length === 0 && (!array || value.length == 0)) {
12343 return braces[0] + base + braces[1];
12344 }
12345
12346 if (recurseTimes < 0) {
12347 if (isRegExp(value)) {
12348 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12349 } else {
12350 return ctx.stylize('[Object]', 'special');
12351 }
12352 }
12353
12354 ctx.seen.push(value);
12355
12356 var output;
12357 if (array) {
12358 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
12359 } else {
12360 output = keys.map(function(key) {
12361 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
12362 });
12363 }
12364
12365 ctx.seen.pop();
12366
12367 return reduceToSingleString(output, base, braces);
12368 }
12369
12370
12371 function formatPrimitive(ctx, value) {
12372 if (isUndefined(value))
12373 return ctx.stylize('undefined', 'undefined');
12374 if (isString(value)) {
12375 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
12376 .replace(/'/g, "\\'")
12377 .replace(/\\"/g, '"') + '\'';
12378 return ctx.stylize(simple, 'string');
12379 }
12380 if (isNumber(value))
12381 return ctx.stylize('' + value, 'number');
12382 if (isBoolean(value))
12383 return ctx.stylize('' + value, 'boolean');
12384 // For some reason typeof null is "object", so special case here.
12385 if (isNull(value))
12386 return ctx.stylize('null', 'null');
12387 }
12388
12389
12390 function formatError(value) {
12391 return '[' + Error.prototype.toString.call(value) + ']';
12392 }
12393
12394
12395 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
12396 var output = [];
12397 for (var i = 0, l = value.length; i < l; ++i) {
12398 if (hasOwnProperty(value, String(i))) {
12399 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12400 String(i), true));
12401 } else {
12402 output.push('');
12403 }
12404 }
12405 keys.forEach(function(key) {
12406 if (!key.match(/^\d+$/)) {
12407 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12408 key, true));
12409 }
12410 });
12411 return output;
12412 }
12413
12414
12415 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
12416 var name, str, desc;
12417 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
12418 if (desc.get) {
12419 if (desc.set) {
12420 str = ctx.stylize('[Getter/Setter]', 'special');
12421 } else {
12422 str = ctx.stylize('[Getter]', 'special');
12423 }
12424 } else {
12425 if (desc.set) {
12426 str = ctx.stylize('[Setter]', 'special');
12427 }
12428 }
12429 if (!hasOwnProperty(visibleKeys, key)) {
12430 name = '[' + key + ']';
12431 }
12432 if (!str) {
12433 if (ctx.seen.indexOf(desc.value) < 0) {
12434 if (isNull(recurseTimes)) {
12435 str = formatValue(ctx, desc.value, null);
12436 } else {
12437 str = formatValue(ctx, desc.value, recurseTimes - 1);
12438 }
12439 if (str.indexOf('\n') > -1) {
12440 if (array) {
12441 str = str.split('\n').map(function(line) {
12442 return ' ' + line;
12443 }).join('\n').substr(2);
12444 } else {
12445 str = '\n' + str.split('\n').map(function(line) {
12446 return ' ' + line;
12447 }).join('\n');
12448 }
12449 }
12450 } else {
12451 str = ctx.stylize('[Circular]', 'special');
12452 }
12453 }
12454 if (isUndefined(name)) {
12455 if (array && key.match(/^\d+$/)) {
12456 return str;
12457 }
12458 name = JSON.stringify('' + key);
12459 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
12460 name = name.substr(1, name.length - 2);
12461 name = ctx.stylize(name, 'name');
12462 } else {
12463 name = name.replace(/'/g, "\\'")
12464 .replace(/\\"/g, '"')
12465 .replace(/(^"|"$)/g, "'");
12466 name = ctx.stylize(name, 'string');
12467 }
12468 }
12469
12470 return name + ': ' + str;
12471 }
12472
12473
12474 function reduceToSingleString(output, base, braces) {
12475 var numLinesEst = 0;
12476 var length = output.reduce(function(prev, cur) {
12477 numLinesEst++;
12478 if (cur.indexOf('\n') >= 0) numLinesEst++;
12479 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
12480 }, 0);
12481
12482 if (length > 60) {
12483 return braces[0] +
12484 (base === '' ? '' : base + '\n ') +
12485 ' ' +
12486 output.join(',\n ') +
12487 ' ' +
12488 braces[1];
12489 }
12490
12491 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
12492 }
12493
12494
12495 // NOTE: These type checking functions intentionally don't use `instanceof`
12496 // because it is fragile and can be easily faked with `Object.create()`.
12497 function isArray(ar) {
12498 return Array.isArray(ar);
12499 }
12500 exports.isArray = isArray;
12501
12502 function isBoolean(arg) {
12503 return typeof arg === 'boolean';
12504 }
12505 exports.isBoolean = isBoolean;
12506
12507 function isNull(arg) {
12508 return arg === null;
12509 }
12510 exports.isNull = isNull;
12511
12512 function isNullOrUndefined(arg) {
12513 return arg == null;
12514 }
12515 exports.isNullOrUndefined = isNullOrUndefined;
12516
12517 function isNumber(arg) {
12518 return typeof arg === 'number';
12519 }
12520 exports.isNumber = isNumber;
12521
12522 function isString(arg) {
12523 return typeof arg === 'string';
12524 }
12525 exports.isString = isString;
12526
12527 function isSymbol(arg) {
12528 return typeof arg === 'symbol';
12529 }
12530 exports.isSymbol = isSymbol;
12531
12532 function isUndefined(arg) {
12533 return arg === void 0;
12534 }
12535 exports.isUndefined = isUndefined;
12536
12537 function isRegExp(re) {
12538 return isObject(re) && objectToString(re) === '[object RegExp]';
12539 }
12540 exports.isRegExp = isRegExp;
12541
12542 function isObject(arg) {
12543 return typeof arg === 'object' && arg !== null;
12544 }
12545 exports.isObject = isObject;
12546
12547 function isDate(d) {
12548 return isObject(d) && objectToString(d) === '[object Date]';
12549 }
12550 exports.isDate = isDate;
12551
12552 function isError(e) {
12553 return isObject(e) &&
12554 (objectToString(e) === '[object Error]' || e instanceof Error);
12555 }
12556 exports.isError = isError;
12557
12558 function isFunction(arg) {
12559 return typeof arg === 'function';
12560 }
12561 exports.isFunction = isFunction;
12562
12563 function isPrimitive(arg) {
12564 return arg === null ||
12565 typeof arg === 'boolean' ||
12566 typeof arg === 'number' ||
12567 typeof arg === 'string' ||
12568 typeof arg === 'symbol' || // ES6 symbol
12569 typeof arg === 'undefined';
12570 }
12571 exports.isPrimitive = isPrimitive;
12572
12573 exports.isBuffer = require('./support/isBuffer');
12574
12575 function objectToString(o) {
12576 return Object.prototype.toString.call(o);
12577 }
12578
12579
12580 function pad(n) {
12581 return n < 10 ? '0' + n.toString(10) : n.toString(10);
12582 }
12583
12584
12585 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
12586 'Oct', 'Nov', 'Dec'];
12587
12588 // 26 Feb 16:19:34
12589 function timestamp() {
12590 var d = new Date();
12591 var time = [pad(d.getHours()),
12592 pad(d.getMinutes()),
12593 pad(d.getSeconds())].join(':');
12594 return [d.getDate(), months[d.getMonth()], time].join(' ');
12595 }
12596
12597
12598 // log is just a thin wrapper to console.log that prepends a timestamp
12599 exports.log = function() {
12600 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
12601 };
12602
12603
12604 /**
12605 * Inherit the prototype methods from one constructor into another.
12606 *
12607 * The Function.prototype.inherits from lang.js rewritten as a standalone
12608 * function (not on Function.prototype). NOTE: If this file is to be loaded
12609 * during bootstrapping this function needs to be rewritten using some native
12610 * functions as prototype setup using normal JavaScript does not work as
12611 * expected during bootstrapping (see mirror.js in r114903).
12612 *
12613 * @param {function} ctor Constructor function which needs to inherit the
12614 * prototype.
12615 * @param {function} superCtor Constructor function to inherit prototype from.
12616 */
12617 exports.inherits = require('inherits');
12618
12619 exports._extend = function(origin, add) {
12620 // Don't do anything if add isn't an object
12621 if (!add || !isObject(add)) return origin;
12622
12623 var keys = Object.keys(add);
12624 var i = keys.length;
12625 while (i--) {
12626 origin[keys[i]] = add[keys[i]];
12627 }
12628 return origin;
12629 };
12630
12631 function hasOwnProperty(obj, prop) {
12632 return Object.prototype.hasOwnProperty.call(obj, prop);
12633 }
12634
12635 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12636 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
12637 // Base58 encoding/decoding
12638 // Originally written by Mike Hearn for BitcoinJ
12639 // Copyright (c) 2011 Google Inc
12640 // Ported to JavaScript by Stefan Thomas
12641 // Merged Buffer refactorings from base58-native by Stephen Pair
12642 // Copyright (c) 2013 BitPay Inc
12643
12644 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
12645 var ALPHABET_MAP = {}
12646 for(var i = 0; i < ALPHABET.length; i++) {
12647 ALPHABET_MAP[ALPHABET.charAt(i)] = i
12648 }
12649 var BASE = 58
12650
12651 function encode(buffer) {
12652 if (buffer.length === 0) return ''
12653
12654 var i, j, digits = [0]
12655 for (i = 0; i < buffer.length; i++) {
12656 for (j = 0; j < digits.length; j++) digits[j] <<= 8
12657
12658 digits[0] += buffer[i]
12659
12660 var carry = 0
12661 for (j = 0; j < digits.length; ++j) {
12662 digits[j] += carry
12663
12664 carry = (digits[j] / BASE) | 0
12665 digits[j] %= BASE
12666 }
12667
12668 while (carry) {
12669 digits.push(carry % BASE)
12670
12671 carry = (carry / BASE) | 0
12672 }
12673 }
12674
12675 // deal with leading zeros
12676 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
12677
12678 // convert digits to a string
12679 var stringOutput = ""
12680 for (var i = digits.length - 1; i >= 0; i--) {
12681 stringOutput = stringOutput + ALPHABET[digits[i]]
12682 }
12683 return stringOutput
12684 }
12685
12686 function decode(string) {
12687 if (string.length === 0) return []
12688
12689 var i, j, bytes = [0]
12690 for (i = 0; i < string.length; i++) {
12691 var c = string[i]
12692 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
12693
12694 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
12695 bytes[0] += ALPHABET_MAP[c]
12696
12697 var carry = 0
12698 for (j = 0; j < bytes.length; ++j) {
12699 bytes[j] += carry
12700
12701 carry = bytes[j] >> 8
12702 bytes[j] &= 0xff
12703 }
12704
12705 while (carry) {
12706 bytes.push(carry & 0xff)
12707
12708 carry >>= 8
12709 }
12710 }
12711
12712 // deal with leading zeros
12713 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
12714
12715 return bytes.reverse()
12716 }
12717
12718 module.exports = {
12719 encode: encode,
12720 decode: decode
12721 }
12722
12723 },{}],31:[function(require,module,exports){
12724 (function (Buffer){
12725 'use strict'
12726
12727 var base58 = require('bs58')
12728 var createHash = require('create-hash')
12729
12730 // SHA256(SHA256(buffer))
12731 function sha256x2 (buffer) {
12732 buffer = createHash('sha256').update(buffer).digest()
12733 return createHash('sha256').update(buffer).digest()
12734 }
12735
12736 // Encode a buffer as a base58-check encoded string
12737 function encode (payload) {
12738 var checksum = sha256x2(payload).slice(0, 4)
12739
12740 return base58.encode(Buffer.concat([
12741 payload,
12742 checksum
12743 ]))
12744 }
12745
12746 // Decode a base58-check encoded string to a buffer
12747 function decode (string) {
12748 var buffer = new Buffer(base58.decode(string))
12749
12750 var payload = buffer.slice(0, -4)
12751 var checksum = buffer.slice(-4)
12752 var newChecksum = sha256x2(payload).slice(0, 4)
12753
12754 for (var i = 0; i < newChecksum.length; ++i) {
12755 if (newChecksum[i] === checksum[i]) continue
12756
12757 throw new Error('Invalid checksum')
12758 }
12759
12760 return payload
12761 }
12762
12763 module.exports = {
12764 encode: encode,
12765 decode: decode
12766 }
12767
12768 }).call(this,require("buffer").Buffer)
12769 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
12770 (function (Buffer){
12771 'use strict';
12772 var inherits = require('inherits')
12773 var md5 = require('./md5')
12774 var rmd160 = require('ripemd160')
12775 var sha = require('sha.js')
12776
12777 var Transform = require('stream').Transform
12778
12779 function HashNoConstructor(hash) {
12780 Transform.call(this)
12781
12782 this._hash = hash
12783 this.buffers = []
12784 }
12785
12786 inherits(HashNoConstructor, Transform)
12787
12788 HashNoConstructor.prototype._transform = function (data, _, next) {
12789 this.buffers.push(data)
12790
12791 next()
12792 }
12793
12794 HashNoConstructor.prototype._flush = function (next) {
12795 this.push(this.digest())
12796 next()
12797 }
12798
12799 HashNoConstructor.prototype.update = function (data, enc) {
12800 if (typeof data === 'string') {
12801 data = new Buffer(data, enc)
12802 }
12803
12804 this.buffers.push(data)
12805 return this
12806 }
12807
12808 HashNoConstructor.prototype.digest = function (enc) {
12809 var buf = Buffer.concat(this.buffers)
12810 var r = this._hash(buf)
12811 this.buffers = null
12812
12813 return enc ? r.toString(enc) : r
12814 }
12815
12816 function Hash(hash) {
12817 Transform.call(this)
12818
12819 this._hash = hash
12820 }
12821
12822 inherits(Hash, Transform)
12823
12824 Hash.prototype._transform = function (data, enc, next) {
12825 if (enc) data = new Buffer(data, enc)
12826
12827 this._hash.update(data)
12828
12829 next()
12830 }
12831
12832 Hash.prototype._flush = function (next) {
12833 this.push(this._hash.digest())
12834 this._hash = null
12835
12836 next()
12837 }
12838
12839 Hash.prototype.update = function (data, enc) {
12840 if (typeof data === 'string') {
12841 data = new Buffer(data, enc)
12842 }
12843
12844 this._hash.update(data)
12845 return this
12846 }
12847
12848 Hash.prototype.digest = function (enc) {
12849 var outData = this._hash.digest()
12850
12851 return enc ? outData.toString(enc) : outData
12852 }
12853
12854 module.exports = function createHash (alg) {
12855 if ('md5' === alg) return new HashNoConstructor(md5)
12856 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
12857
12858 return new Hash(sha(alg))
12859 }
12860
12861 }).call(this,require("buffer").Buffer)
12862 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
12863 (function (Buffer){
12864 'use strict';
12865 var intSize = 4;
12866 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
12867 var chrsz = 8;
12868
12869 function toArray(buf, bigEndian) {
12870 if ((buf.length % intSize) !== 0) {
12871 var len = buf.length + (intSize - (buf.length % intSize));
12872 buf = Buffer.concat([buf, zeroBuffer], len);
12873 }
12874
12875 var arr = [];
12876 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
12877 for (var i = 0; i < buf.length; i += intSize) {
12878 arr.push(fn.call(buf, i));
12879 }
12880 return arr;
12881 }
12882
12883 function toBuffer(arr, size, bigEndian) {
12884 var buf = new Buffer(size);
12885 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
12886 for (var i = 0; i < arr.length; i++) {
12887 fn.call(buf, arr[i], i * 4, true);
12888 }
12889 return buf;
12890 }
12891
12892 function hash(buf, fn, hashSize, bigEndian) {
12893 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
12894 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
12895 return toBuffer(arr, hashSize, bigEndian);
12896 }
12897 exports.hash = hash;
12898 }).call(this,require("buffer").Buffer)
12899 },{"buffer":7}],34:[function(require,module,exports){
12900 'use strict';
12901 /*
12902 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
12903 * Digest Algorithm, as defined in RFC 1321.
12904 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
12905 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12906 * Distributed under the BSD License
12907 * See http://pajhome.org.uk/crypt/md5 for more info.
12908 */
12909
12910 var helpers = require('./helpers');
12911
12912 /*
12913 * Calculate the MD5 of an array of little-endian words, and a bit length
12914 */
12915 function core_md5(x, len)
12916 {
12917 /* append padding */
12918 x[len >> 5] |= 0x80 << ((len) % 32);
12919 x[(((len + 64) >>> 9) << 4) + 14] = len;
12920
12921 var a = 1732584193;
12922 var b = -271733879;
12923 var c = -1732584194;
12924 var d = 271733878;
12925
12926 for(var i = 0; i < x.length; i += 16)
12927 {
12928 var olda = a;
12929 var oldb = b;
12930 var oldc = c;
12931 var oldd = d;
12932
12933 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
12934 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
12935 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
12936 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
12937 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
12938 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
12939 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
12940 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
12941 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
12942 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
12943 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
12944 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
12945 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
12946 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
12947 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
12948 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
12949
12950 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
12951 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
12952 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
12953 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
12954 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
12955 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
12956 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
12957 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
12958 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
12959 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
12960 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
12961 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
12962 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
12963 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
12964 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
12965 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
12966
12967 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
12968 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
12969 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
12970 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
12971 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
12972 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
12973 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
12974 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
12975 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
12976 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
12977 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
12978 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
12979 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
12980 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
12981 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
12982 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
12983
12984 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
12985 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
12986 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
12987 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
12988 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
12989 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
12990 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
12991 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
12992 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
12993 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
12994 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
12995 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
12996 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
12997 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
12998 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
12999 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
13000
13001 a = safe_add(a, olda);
13002 b = safe_add(b, oldb);
13003 c = safe_add(c, oldc);
13004 d = safe_add(d, oldd);
13005 }
13006 return Array(a, b, c, d);
13007
13008 }
13009
13010 /*
13011 * These functions implement the four basic operations the algorithm uses.
13012 */
13013 function md5_cmn(q, a, b, x, s, t)
13014 {
13015 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
13016 }
13017 function md5_ff(a, b, c, d, x, s, t)
13018 {
13019 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
13020 }
13021 function md5_gg(a, b, c, d, x, s, t)
13022 {
13023 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
13024 }
13025 function md5_hh(a, b, c, d, x, s, t)
13026 {
13027 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
13028 }
13029 function md5_ii(a, b, c, d, x, s, t)
13030 {
13031 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
13032 }
13033
13034 /*
13035 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
13036 * to work around bugs in some JS interpreters.
13037 */
13038 function safe_add(x, y)
13039 {
13040 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
13041 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
13042 return (msw << 16) | (lsw & 0xFFFF);
13043 }
13044
13045 /*
13046 * Bitwise rotate a 32-bit number to the left.
13047 */
13048 function bit_rol(num, cnt)
13049 {
13050 return (num << cnt) | (num >>> (32 - cnt));
13051 }
13052
13053 module.exports = function md5(buf) {
13054 return helpers.hash(buf, core_md5, 16);
13055 };
13056 },{"./helpers":33}],35:[function(require,module,exports){
13057 arguments[4][12][0].apply(exports,arguments)
13058 },{"dup":12}],36:[function(require,module,exports){
13059 (function (Buffer){
13060 /*
13061 CryptoJS v3.1.2
13062 code.google.com/p/crypto-js
13063 (c) 2009-2013 by Jeff Mott. All rights reserved.
13064 code.google.com/p/crypto-js/wiki/License
13065 */
13066 /** @preserve
13067 (c) 2012 by Cédric Mesnil. All rights reserved.
13068
13069 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
13070
13071 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
13072 - 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.
13073
13074 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13075 */
13076
13077 // constants table
13078 var zl = [
13079 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
13080 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
13081 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
13082 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
13083 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
13084 ]
13085
13086 var zr = [
13087 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
13088 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
13089 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
13090 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
13091 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
13092 ]
13093
13094 var sl = [
13095 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
13096 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
13097 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
13098 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
13099 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
13100 ]
13101
13102 var sr = [
13103 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
13104 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
13105 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
13106 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
13107 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
13108 ]
13109
13110 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
13111 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
13112
13113 function bytesToWords (bytes) {
13114 var words = []
13115 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
13116 words[b >>> 5] |= bytes[i] << (24 - b % 32)
13117 }
13118 return words
13119 }
13120
13121 function wordsToBytes (words) {
13122 var bytes = []
13123 for (var b = 0; b < words.length * 32; b += 8) {
13124 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
13125 }
13126 return bytes
13127 }
13128
13129 function processBlock (H, M, offset) {
13130 // swap endian
13131 for (var i = 0; i < 16; i++) {
13132 var offset_i = offset + i
13133 var M_offset_i = M[offset_i]
13134
13135 // Swap
13136 M[offset_i] = (
13137 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
13138 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
13139 )
13140 }
13141
13142 // Working variables
13143 var al, bl, cl, dl, el
13144 var ar, br, cr, dr, er
13145
13146 ar = al = H[0]
13147 br = bl = H[1]
13148 cr = cl = H[2]
13149 dr = dl = H[3]
13150 er = el = H[4]
13151
13152 // computation
13153 var t
13154 for (i = 0; i < 80; i += 1) {
13155 t = (al + M[offset + zl[i]]) | 0
13156 if (i < 16) {
13157 t += f1(bl, cl, dl) + hl[0]
13158 } else if (i < 32) {
13159 t += f2(bl, cl, dl) + hl[1]
13160 } else if (i < 48) {
13161 t += f3(bl, cl, dl) + hl[2]
13162 } else if (i < 64) {
13163 t += f4(bl, cl, dl) + hl[3]
13164 } else {// if (i<80) {
13165 t += f5(bl, cl, dl) + hl[4]
13166 }
13167 t = t | 0
13168 t = rotl(t, sl[i])
13169 t = (t + el) | 0
13170 al = el
13171 el = dl
13172 dl = rotl(cl, 10)
13173 cl = bl
13174 bl = t
13175
13176 t = (ar + M[offset + zr[i]]) | 0
13177 if (i < 16) {
13178 t += f5(br, cr, dr) + hr[0]
13179 } else if (i < 32) {
13180 t += f4(br, cr, dr) + hr[1]
13181 } else if (i < 48) {
13182 t += f3(br, cr, dr) + hr[2]
13183 } else if (i < 64) {
13184 t += f2(br, cr, dr) + hr[3]
13185 } else {// if (i<80) {
13186 t += f1(br, cr, dr) + hr[4]
13187 }
13188
13189 t = t | 0
13190 t = rotl(t, sr[i])
13191 t = (t + er) | 0
13192 ar = er
13193 er = dr
13194 dr = rotl(cr, 10)
13195 cr = br
13196 br = t
13197 }
13198
13199 // intermediate hash value
13200 t = (H[1] + cl + dr) | 0
13201 H[1] = (H[2] + dl + er) | 0
13202 H[2] = (H[3] + el + ar) | 0
13203 H[3] = (H[4] + al + br) | 0
13204 H[4] = (H[0] + bl + cr) | 0
13205 H[0] = t
13206 }
13207
13208 function f1 (x, y, z) {
13209 return ((x) ^ (y) ^ (z))
13210 }
13211
13212 function f2 (x, y, z) {
13213 return (((x) & (y)) | ((~x) & (z)))
13214 }
13215
13216 function f3 (x, y, z) {
13217 return (((x) | (~(y))) ^ (z))
13218 }
13219
13220 function f4 (x, y, z) {
13221 return (((x) & (z)) | ((y) & (~(z))))
13222 }
13223
13224 function f5 (x, y, z) {
13225 return ((x) ^ ((y) | (~(z))))
13226 }
13227
13228 function rotl (x, n) {
13229 return (x << n) | (x >>> (32 - n))
13230 }
13231
13232 function ripemd160 (message) {
13233 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
13234
13235 if (typeof message === 'string') {
13236 message = new Buffer(message, 'utf8')
13237 }
13238
13239 var m = bytesToWords(message)
13240
13241 var nBitsLeft = message.length * 8
13242 var nBitsTotal = message.length * 8
13243
13244 // Add padding
13245 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
13246 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
13247 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
13248 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
13249 )
13250
13251 for (var i = 0; i < m.length; i += 16) {
13252 processBlock(H, m, i)
13253 }
13254
13255 // swap endian
13256 for (i = 0; i < 5; i++) {
13257 // shortcut
13258 var H_i = H[i]
13259
13260 // Swap
13261 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
13262 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
13263 }
13264
13265 var digestbytes = wordsToBytes(H)
13266 return new Buffer(digestbytes)
13267 }
13268
13269 module.exports = ripemd160
13270
13271 }).call(this,require("buffer").Buffer)
13272 },{"buffer":7}],37:[function(require,module,exports){
13273 (function (Buffer){
13274 // prototype class for hash functions
13275 function Hash (blockSize, finalSize) {
13276 this._block = new Buffer(blockSize)
13277 this._finalSize = finalSize
13278 this._blockSize = blockSize
13279 this._len = 0
13280 this._s = 0
13281 }
13282
13283 Hash.prototype.update = function (data, enc) {
13284 if (typeof data === 'string') {
13285 enc = enc || 'utf8'
13286 data = new Buffer(data, enc)
13287 }
13288
13289 var l = this._len += data.length
13290 var s = this._s || 0
13291 var f = 0
13292 var buffer = this._block
13293
13294 while (s < l) {
13295 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
13296 var ch = (t - f)
13297
13298 for (var i = 0; i < ch; i++) {
13299 buffer[(s % this._blockSize) + i] = data[i + f]
13300 }
13301
13302 s += ch
13303 f += ch
13304
13305 if ((s % this._blockSize) === 0) {
13306 this._update(buffer)
13307 }
13308 }
13309 this._s = s
13310
13311 return this
13312 }
13313
13314 Hash.prototype.digest = function (enc) {
13315 // Suppose the length of the message M, in bits, is l
13316 var l = this._len * 8
13317
13318 // Append the bit 1 to the end of the message
13319 this._block[this._len % this._blockSize] = 0x80
13320
13321 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
13322 this._block.fill(0, this._len % this._blockSize + 1)
13323
13324 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
13325 this._update(this._block)
13326 this._block.fill(0)
13327 }
13328
13329 // to this append the block which is equal to the number l written in binary
13330 // TODO: handle case where l is > Math.pow(2, 29)
13331 this._block.writeInt32BE(l, this._blockSize - 4)
13332
13333 var hash = this._update(this._block) || this._hash()
13334
13335 return enc ? hash.toString(enc) : hash
13336 }
13337
13338 Hash.prototype._update = function () {
13339 throw new Error('_update must be implemented by subclass')
13340 }
13341
13342 module.exports = Hash
13343
13344 }).call(this,require("buffer").Buffer)
13345 },{"buffer":7}],38:[function(require,module,exports){
13346 var exports = module.exports = function SHA (algorithm) {
13347 algorithm = algorithm.toLowerCase()
13348
13349 var Algorithm = exports[algorithm]
13350 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
13351
13352 return new Algorithm()
13353 }
13354
13355 exports.sha = require('./sha')
13356 exports.sha1 = require('./sha1')
13357 exports.sha224 = require('./sha224')
13358 exports.sha256 = require('./sha256')
13359 exports.sha384 = require('./sha384')
13360 exports.sha512 = require('./sha512')
13361
13362 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
13363 (function (Buffer){
13364 /*
13365 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
13366 * in FIPS PUB 180-1
13367 * This source code is derived from sha1.js of the same repository.
13368 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
13369 * operation was added.
13370 */
13371
13372 var inherits = require('inherits')
13373 var Hash = require('./hash')
13374
13375 var W = new Array(80)
13376
13377 function Sha () {
13378 this.init()
13379 this._w = W
13380
13381 Hash.call(this, 64, 56)
13382 }
13383
13384 inherits(Sha, Hash)
13385
13386 Sha.prototype.init = function () {
13387 this._a = 0x67452301 | 0
13388 this._b = 0xefcdab89 | 0
13389 this._c = 0x98badcfe | 0
13390 this._d = 0x10325476 | 0
13391 this._e = 0xc3d2e1f0 | 0
13392
13393 return this
13394 }
13395
13396 /*
13397 * Bitwise rotate a 32-bit number to the left.
13398 */
13399 function rol (num, cnt) {
13400 return (num << cnt) | (num >>> (32 - cnt))
13401 }
13402
13403 Sha.prototype._update = function (M) {
13404 var W = this._w
13405
13406 var a = this._a
13407 var b = this._b
13408 var c = this._c
13409 var d = this._d
13410 var e = this._e
13411
13412 var j = 0, k
13413
13414 /*
13415 * SHA-1 has a bitwise rotate left operation. But, SHA is not
13416 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13417 */
13418 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
13419 function loop (w, f) {
13420 W[j] = w
13421
13422 var t = rol(a, 5) + f + e + w + k
13423
13424 e = d
13425 d = c
13426 c = rol(b, 30)
13427 b = a
13428 a = t
13429 j++
13430 }
13431
13432 k = 1518500249
13433 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13434 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13435 k = 1859775393
13436 while (j < 40) loop(calcW(), b ^ c ^ d)
13437 k = -1894007588
13438 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13439 k = -899497514
13440 while (j < 80) loop(calcW(), b ^ c ^ d)
13441
13442 this._a = (a + this._a) | 0
13443 this._b = (b + this._b) | 0
13444 this._c = (c + this._c) | 0
13445 this._d = (d + this._d) | 0
13446 this._e = (e + this._e) | 0
13447 }
13448
13449 Sha.prototype._hash = function () {
13450 var H = new Buffer(20)
13451
13452 H.writeInt32BE(this._a | 0, 0)
13453 H.writeInt32BE(this._b | 0, 4)
13454 H.writeInt32BE(this._c | 0, 8)
13455 H.writeInt32BE(this._d | 0, 12)
13456 H.writeInt32BE(this._e | 0, 16)
13457
13458 return H
13459 }
13460
13461 module.exports = Sha
13462
13463
13464 }).call(this,require("buffer").Buffer)
13465 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
13466 (function (Buffer){
13467 /*
13468 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
13469 * in FIPS PUB 180-1
13470 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
13471 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13472 * Distributed under the BSD License
13473 * See http://pajhome.org.uk/crypt/md5 for details.
13474 */
13475
13476 var inherits = require('inherits')
13477 var Hash = require('./hash')
13478
13479 var W = new Array(80)
13480
13481 function Sha1 () {
13482 this.init()
13483 this._w = W
13484
13485 Hash.call(this, 64, 56)
13486 }
13487
13488 inherits(Sha1, Hash)
13489
13490 Sha1.prototype.init = function () {
13491 this._a = 0x67452301 | 0
13492 this._b = 0xefcdab89 | 0
13493 this._c = 0x98badcfe | 0
13494 this._d = 0x10325476 | 0
13495 this._e = 0xc3d2e1f0 | 0
13496
13497 return this
13498 }
13499
13500 /*
13501 * Bitwise rotate a 32-bit number to the left.
13502 */
13503 function rol (num, cnt) {
13504 return (num << cnt) | (num >>> (32 - cnt))
13505 }
13506
13507 Sha1.prototype._update = function (M) {
13508 var W = this._w
13509
13510 var a = this._a
13511 var b = this._b
13512 var c = this._c
13513 var d = this._d
13514 var e = this._e
13515
13516 var j = 0, k
13517
13518 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13519 function loop (w, f) {
13520 W[j] = w
13521
13522 var t = rol(a, 5) + f + e + w + k
13523
13524 e = d
13525 d = c
13526 c = rol(b, 30)
13527 b = a
13528 a = t
13529 j++
13530 }
13531
13532 k = 1518500249
13533 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13534 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13535 k = 1859775393
13536 while (j < 40) loop(calcW(), b ^ c ^ d)
13537 k = -1894007588
13538 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13539 k = -899497514
13540 while (j < 80) loop(calcW(), b ^ c ^ d)
13541
13542 this._a = (a + this._a) | 0
13543 this._b = (b + this._b) | 0
13544 this._c = (c + this._c) | 0
13545 this._d = (d + this._d) | 0
13546 this._e = (e + this._e) | 0
13547 }
13548
13549 Sha1.prototype._hash = function () {
13550 var H = new Buffer(20)
13551
13552 H.writeInt32BE(this._a | 0, 0)
13553 H.writeInt32BE(this._b | 0, 4)
13554 H.writeInt32BE(this._c | 0, 8)
13555 H.writeInt32BE(this._d | 0, 12)
13556 H.writeInt32BE(this._e | 0, 16)
13557
13558 return H
13559 }
13560
13561 module.exports = Sha1
13562
13563 }).call(this,require("buffer").Buffer)
13564 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
13565 (function (Buffer){
13566 /**
13567 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13568 * in FIPS 180-2
13569 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13570 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13571 *
13572 */
13573
13574 var inherits = require('inherits')
13575 var Sha256 = require('./sha256')
13576 var Hash = require('./hash')
13577
13578 var W = new Array(64)
13579
13580 function Sha224 () {
13581 this.init()
13582
13583 this._w = W // new Array(64)
13584
13585 Hash.call(this, 64, 56)
13586 }
13587
13588 inherits(Sha224, Sha256)
13589
13590 Sha224.prototype.init = function () {
13591 this._a = 0xc1059ed8 | 0
13592 this._b = 0x367cd507 | 0
13593 this._c = 0x3070dd17 | 0
13594 this._d = 0xf70e5939 | 0
13595 this._e = 0xffc00b31 | 0
13596 this._f = 0x68581511 | 0
13597 this._g = 0x64f98fa7 | 0
13598 this._h = 0xbefa4fa4 | 0
13599
13600 return this
13601 }
13602
13603 Sha224.prototype._hash = function () {
13604 var H = new Buffer(28)
13605
13606 H.writeInt32BE(this._a, 0)
13607 H.writeInt32BE(this._b, 4)
13608 H.writeInt32BE(this._c, 8)
13609 H.writeInt32BE(this._d, 12)
13610 H.writeInt32BE(this._e, 16)
13611 H.writeInt32BE(this._f, 20)
13612 H.writeInt32BE(this._g, 24)
13613
13614 return H
13615 }
13616
13617 module.exports = Sha224
13618
13619 }).call(this,require("buffer").Buffer)
13620 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
13621 (function (Buffer){
13622 /**
13623 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13624 * in FIPS 180-2
13625 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13626 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13627 *
13628 */
13629
13630 var inherits = require('inherits')
13631 var Hash = require('./hash')
13632
13633 var K = [
13634 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
13635 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
13636 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
13637 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
13638 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
13639 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
13640 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
13641 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
13642 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
13643 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
13644 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
13645 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
13646 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
13647 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
13648 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
13649 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
13650 ]
13651
13652 var W = new Array(64)
13653
13654 function Sha256 () {
13655 this.init()
13656
13657 this._w = W // new Array(64)
13658
13659 Hash.call(this, 64, 56)
13660 }
13661
13662 inherits(Sha256, Hash)
13663
13664 Sha256.prototype.init = function () {
13665 this._a = 0x6a09e667 | 0
13666 this._b = 0xbb67ae85 | 0
13667 this._c = 0x3c6ef372 | 0
13668 this._d = 0xa54ff53a | 0
13669 this._e = 0x510e527f | 0
13670 this._f = 0x9b05688c | 0
13671 this._g = 0x1f83d9ab | 0
13672 this._h = 0x5be0cd19 | 0
13673
13674 return this
13675 }
13676
13677 function S (X, n) {
13678 return (X >>> n) | (X << (32 - n))
13679 }
13680
13681 function R (X, n) {
13682 return (X >>> n)
13683 }
13684
13685 function Ch (x, y, z) {
13686 return ((x & y) ^ ((~x) & z))
13687 }
13688
13689 function Maj (x, y, z) {
13690 return ((x & y) ^ (x & z) ^ (y & z))
13691 }
13692
13693 function Sigma0256 (x) {
13694 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
13695 }
13696
13697 function Sigma1256 (x) {
13698 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
13699 }
13700
13701 function Gamma0256 (x) {
13702 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
13703 }
13704
13705 function Gamma1256 (x) {
13706 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
13707 }
13708
13709 Sha256.prototype._update = function (M) {
13710 var W = this._w
13711
13712 var a = this._a | 0
13713 var b = this._b | 0
13714 var c = this._c | 0
13715 var d = this._d | 0
13716 var e = this._e | 0
13717 var f = this._f | 0
13718 var g = this._g | 0
13719 var h = this._h | 0
13720
13721 var j = 0
13722
13723 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
13724 function loop (w) {
13725 W[j] = w
13726
13727 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
13728 var T2 = Sigma0256(a) + Maj(a, b, c)
13729
13730 h = g
13731 g = f
13732 f = e
13733 e = d + T1
13734 d = c
13735 c = b
13736 b = a
13737 a = T1 + T2
13738
13739 j++
13740 }
13741
13742 while (j < 16) loop(M.readInt32BE(j * 4))
13743 while (j < 64) loop(calcW())
13744
13745 this._a = (a + this._a) | 0
13746 this._b = (b + this._b) | 0
13747 this._c = (c + this._c) | 0
13748 this._d = (d + this._d) | 0
13749 this._e = (e + this._e) | 0
13750 this._f = (f + this._f) | 0
13751 this._g = (g + this._g) | 0
13752 this._h = (h + this._h) | 0
13753 }
13754
13755 Sha256.prototype._hash = function () {
13756 var H = new Buffer(32)
13757
13758 H.writeInt32BE(this._a, 0)
13759 H.writeInt32BE(this._b, 4)
13760 H.writeInt32BE(this._c, 8)
13761 H.writeInt32BE(this._d, 12)
13762 H.writeInt32BE(this._e, 16)
13763 H.writeInt32BE(this._f, 20)
13764 H.writeInt32BE(this._g, 24)
13765 H.writeInt32BE(this._h, 28)
13766
13767 return H
13768 }
13769
13770 module.exports = Sha256
13771
13772 }).call(this,require("buffer").Buffer)
13773 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
13774 (function (Buffer){
13775 var inherits = require('inherits')
13776 var SHA512 = require('./sha512')
13777 var Hash = require('./hash')
13778
13779 var W = new Array(160)
13780
13781 function Sha384 () {
13782 this.init()
13783 this._w = W
13784
13785 Hash.call(this, 128, 112)
13786 }
13787
13788 inherits(Sha384, SHA512)
13789
13790 Sha384.prototype.init = function () {
13791 this._a = 0xcbbb9d5d | 0
13792 this._b = 0x629a292a | 0
13793 this._c = 0x9159015a | 0
13794 this._d = 0x152fecd8 | 0
13795 this._e = 0x67332667 | 0
13796 this._f = 0x8eb44a87 | 0
13797 this._g = 0xdb0c2e0d | 0
13798 this._h = 0x47b5481d | 0
13799
13800 this._al = 0xc1059ed8 | 0
13801 this._bl = 0x367cd507 | 0
13802 this._cl = 0x3070dd17 | 0
13803 this._dl = 0xf70e5939 | 0
13804 this._el = 0xffc00b31 | 0
13805 this._fl = 0x68581511 | 0
13806 this._gl = 0x64f98fa7 | 0
13807 this._hl = 0xbefa4fa4 | 0
13808
13809 return this
13810 }
13811
13812 Sha384.prototype._hash = function () {
13813 var H = new Buffer(48)
13814
13815 function writeInt64BE (h, l, offset) {
13816 H.writeInt32BE(h, offset)
13817 H.writeInt32BE(l, offset + 4)
13818 }
13819
13820 writeInt64BE(this._a, this._al, 0)
13821 writeInt64BE(this._b, this._bl, 8)
13822 writeInt64BE(this._c, this._cl, 16)
13823 writeInt64BE(this._d, this._dl, 24)
13824 writeInt64BE(this._e, this._el, 32)
13825 writeInt64BE(this._f, this._fl, 40)
13826
13827 return H
13828 }
13829
13830 module.exports = Sha384
13831
13832 }).call(this,require("buffer").Buffer)
13833 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
13834 (function (Buffer){
13835 var inherits = require('inherits')
13836 var Hash = require('./hash')
13837
13838 var K = [
13839 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
13840 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13841 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
13842 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13843 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
13844 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13845 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
13846 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13847 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
13848 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13849 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
13850 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13851 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
13852 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13853 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
13854 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13855 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
13856 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13857 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
13858 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13859 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
13860 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13861 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
13862 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13863 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
13864 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13865 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
13866 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13867 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
13868 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13869 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
13870 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13871 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
13872 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13873 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
13874 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13875 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
13876 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13877 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
13878 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
13879 ]
13880
13881 var W = new Array(160)
13882
13883 function Sha512 () {
13884 this.init()
13885 this._w = W
13886
13887 Hash.call(this, 128, 112)
13888 }
13889
13890 inherits(Sha512, Hash)
13891
13892 Sha512.prototype.init = function () {
13893 this._a = 0x6a09e667 | 0
13894 this._b = 0xbb67ae85 | 0
13895 this._c = 0x3c6ef372 | 0
13896 this._d = 0xa54ff53a | 0
13897 this._e = 0x510e527f | 0
13898 this._f = 0x9b05688c | 0
13899 this._g = 0x1f83d9ab | 0
13900 this._h = 0x5be0cd19 | 0
13901
13902 this._al = 0xf3bcc908 | 0
13903 this._bl = 0x84caa73b | 0
13904 this._cl = 0xfe94f82b | 0
13905 this._dl = 0x5f1d36f1 | 0
13906 this._el = 0xade682d1 | 0
13907 this._fl = 0x2b3e6c1f | 0
13908 this._gl = 0xfb41bd6b | 0
13909 this._hl = 0x137e2179 | 0
13910
13911 return this
13912 }
13913
13914 function S (X, Xl, n) {
13915 return (X >>> n) | (Xl << (32 - n))
13916 }
13917
13918 function Ch (x, y, z) {
13919 return ((x & y) ^ ((~x) & z))
13920 }
13921
13922 function Maj (x, y, z) {
13923 return ((x & y) ^ (x & z) ^ (y & z))
13924 }
13925
13926 Sha512.prototype._update = function (M) {
13927 var W = this._w
13928
13929 var a = this._a | 0
13930 var b = this._b | 0
13931 var c = this._c | 0
13932 var d = this._d | 0
13933 var e = this._e | 0
13934 var f = this._f | 0
13935 var g = this._g | 0
13936 var h = this._h | 0
13937
13938 var al = this._al | 0
13939 var bl = this._bl | 0
13940 var cl = this._cl | 0
13941 var dl = this._dl | 0
13942 var el = this._el | 0
13943 var fl = this._fl | 0
13944 var gl = this._gl | 0
13945 var hl = this._hl | 0
13946
13947 var i = 0, j = 0
13948 var Wi, Wil
13949 function calcW () {
13950 var x = W[j - 15 * 2]
13951 var xl = W[j - 15 * 2 + 1]
13952 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
13953 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
13954
13955 x = W[j - 2 * 2]
13956 xl = W[j - 2 * 2 + 1]
13957 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
13958 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
13959
13960 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
13961 var Wi7 = W[j - 7 * 2]
13962 var Wi7l = W[j - 7 * 2 + 1]
13963
13964 var Wi16 = W[j - 16 * 2]
13965 var Wi16l = W[j - 16 * 2 + 1]
13966
13967 Wil = gamma0l + Wi7l
13968 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
13969 Wil = Wil + gamma1l
13970 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
13971 Wil = Wil + Wi16l
13972 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
13973 }
13974
13975 function loop () {
13976 W[j] = Wi
13977 W[j + 1] = Wil
13978
13979 var maj = Maj(a, b, c)
13980 var majl = Maj(al, bl, cl)
13981
13982 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
13983 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
13984 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
13985 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
13986
13987 // t1 = h + sigma1 + ch + K[i] + W[i]
13988 var Ki = K[j]
13989 var Kil = K[j + 1]
13990
13991 var ch = Ch(e, f, g)
13992 var chl = Ch(el, fl, gl)
13993
13994 var t1l = hl + sigma1l
13995 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
13996 t1l = t1l + chl
13997 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
13998 t1l = t1l + Kil
13999 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
14000 t1l = t1l + Wil
14001 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
14002
14003 // t2 = sigma0 + maj
14004 var t2l = sigma0l + majl
14005 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
14006
14007 h = g
14008 hl = gl
14009 g = f
14010 gl = fl
14011 f = e
14012 fl = el
14013 el = (dl + t1l) | 0
14014 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
14015 d = c
14016 dl = cl
14017 c = b
14018 cl = bl
14019 b = a
14020 bl = al
14021 al = (t1l + t2l) | 0
14022 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
14023
14024 i++
14025 j += 2
14026 }
14027
14028 while (i < 16) {
14029 Wi = M.readInt32BE(j * 4)
14030 Wil = M.readInt32BE(j * 4 + 4)
14031
14032 loop()
14033 }
14034
14035 while (i < 80) {
14036 calcW()
14037 loop()
14038 }
14039
14040 this._al = (this._al + al) | 0
14041 this._bl = (this._bl + bl) | 0
14042 this._cl = (this._cl + cl) | 0
14043 this._dl = (this._dl + dl) | 0
14044 this._el = (this._el + el) | 0
14045 this._fl = (this._fl + fl) | 0
14046 this._gl = (this._gl + gl) | 0
14047 this._hl = (this._hl + hl) | 0
14048
14049 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
14050 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
14051 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
14052 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
14053 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
14054 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
14055 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
14056 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
14057 }
14058
14059 Sha512.prototype._hash = function () {
14060 var H = new Buffer(64)
14061
14062 function writeInt64BE (h, l, offset) {
14063 H.writeInt32BE(h, offset)
14064 H.writeInt32BE(l, offset + 4)
14065 }
14066
14067 writeInt64BE(this._a, this._al, 0)
14068 writeInt64BE(this._b, this._bl, 8)
14069 writeInt64BE(this._c, this._cl, 16)
14070 writeInt64BE(this._d, this._dl, 24)
14071 writeInt64BE(this._e, this._el, 32)
14072 writeInt64BE(this._f, this._fl, 40)
14073 writeInt64BE(this._g, this._gl, 48)
14074 writeInt64BE(this._h, this._hl, 56)
14075
14076 return H
14077 }
14078
14079 module.exports = Sha512
14080
14081 }).call(this,require("buffer").Buffer)
14082 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
14083 (function (Buffer){
14084 'use strict';
14085 var createHash = require('create-hash/browser');
14086 var inherits = require('inherits')
14087
14088 var Transform = require('stream').Transform
14089
14090 var ZEROS = new Buffer(128)
14091 ZEROS.fill(0)
14092
14093 function Hmac(alg, key) {
14094 Transform.call(this)
14095
14096 if (typeof key === 'string') {
14097 key = new Buffer(key)
14098 }
14099
14100 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
14101
14102 this._alg = alg
14103 this._key = key
14104
14105 if (key.length > blocksize) {
14106 key = createHash(alg).update(key).digest()
14107
14108 } else if (key.length < blocksize) {
14109 key = Buffer.concat([key, ZEROS], blocksize)
14110 }
14111
14112 var ipad = this._ipad = new Buffer(blocksize)
14113 var opad = this._opad = new Buffer(blocksize)
14114
14115 for (var i = 0; i < blocksize; i++) {
14116 ipad[i] = key[i] ^ 0x36
14117 opad[i] = key[i] ^ 0x5C
14118 }
14119
14120 this._hash = createHash(alg).update(ipad)
14121 }
14122
14123 inherits(Hmac, Transform)
14124
14125 Hmac.prototype.update = function (data, enc) {
14126 this._hash.update(data, enc)
14127
14128 return this
14129 }
14130
14131 Hmac.prototype._transform = function (data, _, next) {
14132 this._hash.update(data)
14133
14134 next()
14135 }
14136
14137 Hmac.prototype._flush = function (next) {
14138 this.push(this.digest())
14139
14140 next()
14141 }
14142
14143 Hmac.prototype.digest = function (enc) {
14144 var h = this._hash.digest()
14145
14146 return createHash(this._alg).update(this._opad).update(h).digest(enc)
14147 }
14148
14149 module.exports = function createHmac(alg, key) {
14150 return new Hmac(alg, key)
14151 }
14152
14153 }).call(this,require("buffer").Buffer)
14154 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
14155 arguments[4][12][0].apply(exports,arguments)
14156 },{"dup":12}],47:[function(require,module,exports){
14157 var assert = require('assert')
14158 var BigInteger = require('bigi')
14159
14160 var Point = require('./point')
14161
14162 function Curve(p, a, b, Gx, Gy, n, h) {
14163 this.p = p
14164 this.a = a
14165 this.b = b
14166 this.G = Point.fromAffine(this, Gx, Gy)
14167 this.n = n
14168 this.h = h
14169
14170 this.infinity = new Point(this, null, null, BigInteger.ZERO)
14171
14172 // result caching
14173 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
14174 }
14175
14176 Curve.prototype.pointFromX = function(isOdd, x) {
14177 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
14178 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
14179
14180 var y = beta
14181 if (beta.isEven() ^ !isOdd) {
14182 y = this.p.subtract(y) // -y % p
14183 }
14184
14185 return Point.fromAffine(this, x, y)
14186 }
14187
14188 Curve.prototype.isInfinity = function(Q) {
14189 if (Q === this.infinity) return true
14190
14191 return Q.z.signum() === 0 && Q.y.signum() !== 0
14192 }
14193
14194 Curve.prototype.isOnCurve = function(Q) {
14195 if (this.isInfinity(Q)) return true
14196
14197 var x = Q.affineX
14198 var y = Q.affineY
14199 var a = this.a
14200 var b = this.b
14201 var p = this.p
14202
14203 // Check that xQ and yQ are integers in the interval [0, p - 1]
14204 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
14205 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
14206
14207 // and check that y^2 = x^3 + ax + b (mod p)
14208 var lhs = y.square().mod(p)
14209 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
14210 return lhs.equals(rhs)
14211 }
14212
14213 /**
14214 * Validate an elliptic curve point.
14215 *
14216 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
14217 */
14218 Curve.prototype.validate = function(Q) {
14219 // Check Q != O
14220 assert(!this.isInfinity(Q), 'Point is at infinity')
14221 assert(this.isOnCurve(Q), 'Point is not on the curve')
14222
14223 // Check nQ = O (where Q is a scalar multiple of G)
14224 var nQ = Q.multiply(this.n)
14225 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
14226
14227 return true
14228 }
14229
14230 module.exports = Curve
14231
14232 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
14233 module.exports={
14234 "secp128r1": {
14235 "p": "fffffffdffffffffffffffffffffffff",
14236 "a": "fffffffdfffffffffffffffffffffffc",
14237 "b": "e87579c11079f43dd824993c2cee5ed3",
14238 "n": "fffffffe0000000075a30d1b9038a115",
14239 "h": "01",
14240 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
14241 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
14242 },
14243 "secp160k1": {
14244 "p": "fffffffffffffffffffffffffffffffeffffac73",
14245 "a": "00",
14246 "b": "07",
14247 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
14248 "h": "01",
14249 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
14250 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
14251 },
14252 "secp160r1": {
14253 "p": "ffffffffffffffffffffffffffffffff7fffffff",
14254 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
14255 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
14256 "n": "0100000000000000000001f4c8f927aed3ca752257",
14257 "h": "01",
14258 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
14259 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
14260 },
14261 "secp192k1": {
14262 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
14263 "a": "00",
14264 "b": "03",
14265 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
14266 "h": "01",
14267 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
14268 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
14269 },
14270 "secp192r1": {
14271 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
14272 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
14273 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
14274 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
14275 "h": "01",
14276 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
14277 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
14278 },
14279 "secp256k1": {
14280 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
14281 "a": "00",
14282 "b": "07",
14283 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
14284 "h": "01",
14285 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
14286 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
14287 },
14288 "secp256r1": {
14289 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
14290 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
14291 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
14292 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
14293 "h": "01",
14294 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
14295 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
14296 }
14297 }
14298
14299 },{}],49:[function(require,module,exports){
14300 var Point = require('./point')
14301 var Curve = require('./curve')
14302
14303 var getCurveByName = require('./names')
14304
14305 module.exports = {
14306 Curve: Curve,
14307 Point: Point,
14308 getCurveByName: getCurveByName
14309 }
14310
14311 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
14312 var BigInteger = require('bigi')
14313
14314 var curves = require('./curves')
14315 var Curve = require('./curve')
14316
14317 function getCurveByName(name) {
14318 var curve = curves[name]
14319 if (!curve) return null
14320
14321 var p = new BigInteger(curve.p, 16)
14322 var a = new BigInteger(curve.a, 16)
14323 var b = new BigInteger(curve.b, 16)
14324 var n = new BigInteger(curve.n, 16)
14325 var h = new BigInteger(curve.h, 16)
14326 var Gx = new BigInteger(curve.Gx, 16)
14327 var Gy = new BigInteger(curve.Gy, 16)
14328
14329 return new Curve(p, a, b, Gx, Gy, n, h)
14330 }
14331
14332 module.exports = getCurveByName
14333
14334 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
14335 (function (Buffer){
14336 var assert = require('assert')
14337 var BigInteger = require('bigi')
14338
14339 var THREE = BigInteger.valueOf(3)
14340
14341 function Point(curve, x, y, z) {
14342 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
14343
14344 this.curve = curve
14345 this.x = x
14346 this.y = y
14347 this.z = z
14348 this._zInv = null
14349
14350 this.compressed = true
14351 }
14352
14353 Object.defineProperty(Point.prototype, 'zInv', {
14354 get: function() {
14355 if (this._zInv === null) {
14356 this._zInv = this.z.modInverse(this.curve.p)
14357 }
14358
14359 return this._zInv
14360 }
14361 })
14362
14363 Object.defineProperty(Point.prototype, 'affineX', {
14364 get: function() {
14365 return this.x.multiply(this.zInv).mod(this.curve.p)
14366 }
14367 })
14368
14369 Object.defineProperty(Point.prototype, 'affineY', {
14370 get: function() {
14371 return this.y.multiply(this.zInv).mod(this.curve.p)
14372 }
14373 })
14374
14375 Point.fromAffine = function(curve, x, y) {
14376 return new Point(curve, x, y, BigInteger.ONE)
14377 }
14378
14379 Point.prototype.equals = function(other) {
14380 if (other === this) return true
14381 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
14382 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
14383
14384 // u = Y2 * Z1 - Y1 * Z2
14385 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
14386
14387 if (u.signum() !== 0) return false
14388
14389 // v = X2 * Z1 - X1 * Z2
14390 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
14391
14392 return v.signum() === 0
14393 }
14394
14395 Point.prototype.negate = function() {
14396 var y = this.curve.p.subtract(this.y)
14397
14398 return new Point(this.curve, this.x, y, this.z)
14399 }
14400
14401 Point.prototype.add = function(b) {
14402 if (this.curve.isInfinity(this)) return b
14403 if (this.curve.isInfinity(b)) return this
14404
14405 var x1 = this.x
14406 var y1 = this.y
14407 var x2 = b.x
14408 var y2 = b.y
14409
14410 // u = Y2 * Z1 - Y1 * Z2
14411 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
14412 // v = X2 * Z1 - X1 * Z2
14413 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
14414
14415 if (v.signum() === 0) {
14416 if (u.signum() === 0) {
14417 return this.twice() // this == b, so double
14418 }
14419
14420 return this.curve.infinity // this = -b, so infinity
14421 }
14422
14423 var v2 = v.square()
14424 var v3 = v2.multiply(v)
14425 var x1v2 = x1.multiply(v2)
14426 var zu2 = u.square().multiply(this.z)
14427
14428 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
14429 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
14430 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
14431 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)
14432 // z3 = v^3 * z1 * z2
14433 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
14434
14435 return new Point(this.curve, x3, y3, z3)
14436 }
14437
14438 Point.prototype.twice = function() {
14439 if (this.curve.isInfinity(this)) return this
14440 if (this.y.signum() === 0) return this.curve.infinity
14441
14442 var x1 = this.x
14443 var y1 = this.y
14444
14445 var y1z1 = y1.multiply(this.z)
14446 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
14447 var a = this.curve.a
14448
14449 // w = 3 * x1^2 + a * z1^2
14450 var w = x1.square().multiply(THREE)
14451
14452 if (a.signum() !== 0) {
14453 w = w.add(this.z.square().multiply(a))
14454 }
14455
14456 w = w.mod(this.curve.p)
14457 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
14458 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
14459 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
14460 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
14461 // z3 = 8 * (y1 * z1)^3
14462 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
14463
14464 return new Point(this.curve, x3, y3, z3)
14465 }
14466
14467 // Simple NAF (Non-Adjacent Form) multiplication algorithm
14468 // TODO: modularize the multiplication algorithm
14469 Point.prototype.multiply = function(k) {
14470 if (this.curve.isInfinity(this)) return this
14471 if (k.signum() === 0) return this.curve.infinity
14472
14473 var e = k
14474 var h = e.multiply(THREE)
14475
14476 var neg = this.negate()
14477 var R = this
14478
14479 for (var i = h.bitLength() - 2; i > 0; --i) {
14480 R = R.twice()
14481
14482 var hBit = h.testBit(i)
14483 var eBit = e.testBit(i)
14484
14485 if (hBit != eBit) {
14486 R = R.add(hBit ? this : neg)
14487 }
14488 }
14489
14490 return R
14491 }
14492
14493 // Compute this*j + x*k (simultaneous multiplication)
14494 Point.prototype.multiplyTwo = function(j, x, k) {
14495 var i
14496
14497 if (j.bitLength() > k.bitLength())
14498 i = j.bitLength() - 1
14499 else
14500 i = k.bitLength() - 1
14501
14502 var R = this.curve.infinity
14503 var both = this.add(x)
14504
14505 while (i >= 0) {
14506 R = R.twice()
14507
14508 var jBit = j.testBit(i)
14509 var kBit = k.testBit(i)
14510
14511 if (jBit) {
14512 if (kBit) {
14513 R = R.add(both)
14514
14515 } else {
14516 R = R.add(this)
14517 }
14518
14519 } else {
14520 if (kBit) {
14521 R = R.add(x)
14522 }
14523 }
14524 --i
14525 }
14526
14527 return R
14528 }
14529
14530 Point.prototype.getEncoded = function(compressed) {
14531 if (compressed == undefined) compressed = this.compressed
14532 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
14533
14534 var x = this.affineX
14535 var y = this.affineY
14536
14537 var buffer
14538
14539 // Determine size of q in bytes
14540 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
14541
14542 // 0x02/0x03 | X
14543 if (compressed) {
14544 buffer = new Buffer(1 + byteLength)
14545 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
14546
14547 // 0x04 | X | Y
14548 } else {
14549 buffer = new Buffer(1 + byteLength + byteLength)
14550 buffer.writeUInt8(0x04, 0)
14551
14552 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
14553 }
14554
14555 x.toBuffer(byteLength).copy(buffer, 1)
14556
14557 return buffer
14558 }
14559
14560 Point.decodeFrom = function(curve, buffer) {
14561 var type = buffer.readUInt8(0)
14562 var compressed = (type !== 4)
14563
14564 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
14565 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
14566
14567 var Q
14568 if (compressed) {
14569 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
14570 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
14571
14572 var isOdd = (type === 0x03)
14573 Q = curve.pointFromX(isOdd, x)
14574
14575 } else {
14576 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
14577
14578 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
14579 Q = Point.fromAffine(curve, x, y)
14580 }
14581
14582 Q.compressed = compressed
14583 return Q
14584 }
14585
14586 Point.prototype.toString = function () {
14587 if (this.curve.isInfinity(this)) return '(INFINITY)'
14588
14589 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
14590 }
14591
14592 module.exports = Point
14593
14594 }).call(this,require("buffer").Buffer)
14595 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
14596 (function (process,global,Buffer){
14597 'use strict';
14598
14599 var crypto = global.crypto || global.msCrypto
14600 if(crypto && crypto.getRandomValues) {
14601 module.exports = randomBytes;
14602 } else {
14603 module.exports = oldBrowser;
14604 }
14605 function randomBytes(size, cb) {
14606 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
14607 /* This will not work in older browsers.
14608 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
14609 */
14610
14611 crypto.getRandomValues(bytes);
14612 if (typeof cb === 'function') {
14613 return process.nextTick(function () {
14614 cb(null, bytes);
14615 });
14616 }
14617 return bytes;
14618 }
14619 function oldBrowser() {
14620 throw new Error(
14621 'secure random number generation not supported by this browser\n'+
14622 'use chrome, FireFox or Internet Explorer 11'
14623 )
14624 }
14625
14626 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
14627 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
14628 (function (Buffer){
14629 'use strict';
14630
14631 function getFunctionName(fn) {
14632 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
14633 }
14634
14635 function getTypeTypeName(type) {
14636 if (nativeTypes.Function(type)) {
14637 type = type.toJSON ? type.toJSON() : getFunctionName(type);
14638 }
14639 if (nativeTypes.Object(type)) return JSON.stringify(type);
14640
14641 return type;
14642 }
14643
14644 function getValueTypeName(value) {
14645 if (nativeTypes.Null(value)) return '';
14646
14647 return getFunctionName(value.constructor);
14648 }
14649
14650 function tfErrorString(type, value) {
14651 var typeTypeName = getTypeTypeName(type);
14652 var valueTypeName = getValueTypeName(value);
14653
14654 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
14655 }
14656
14657 function tfPropertyErrorString(type, name, value) {
14658 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
14659 }
14660
14661 var nativeTypes = {
14662 Array: (function (_Array) {
14663 function Array(_x) {
14664 return _Array.apply(this, arguments);
14665 }
14666
14667 Array.toString = function () {
14668 return _Array.toString();
14669 };
14670
14671 return Array;
14672 })(function (value) {
14673 return value !== null && value !== undefined && value.constructor === Array;
14674 }),
14675 Boolean: function Boolean(value) {
14676 return typeof value === 'boolean';
14677 },
14678 Buffer: (function (_Buffer) {
14679 function Buffer(_x2) {
14680 return _Buffer.apply(this, arguments);
14681 }
14682
14683 Buffer.toString = function () {
14684 return _Buffer.toString();
14685 };
14686
14687 return Buffer;
14688 })(function (value) {
14689 return Buffer.isBuffer(value);
14690 }),
14691 Function: function Function(value) {
14692 return typeof value === 'function';
14693 },
14694 Null: function Null(value) {
14695 return value === undefined || value === null;
14696 },
14697 Number: function Number(value) {
14698 return typeof value === 'number';
14699 },
14700 Object: function Object(value) {
14701 return typeof value === 'object';
14702 },
14703 String: function String(value) {
14704 return typeof value === 'string';
14705 },
14706 '': function _() {
14707 return true;
14708 }
14709 };
14710
14711 function tJSON(type) {
14712 return type && type.toJSON ? type.toJSON() : type;
14713 }
14714
14715 function sJSON(type) {
14716 var json = tJSON(type);
14717 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
14718 }
14719
14720 var otherTypes = {
14721 arrayOf: function arrayOf(type) {
14722 function arrayOf(value, strict) {
14723 try {
14724 return nativeTypes.Array(value) && value.every(function (x) {
14725 return typeforce(type, x, strict);
14726 });
14727 } catch (e) {
14728 return false;
14729 }
14730 }
14731 arrayOf.toJSON = function () {
14732 return [tJSON(type)];
14733 };
14734
14735 return arrayOf;
14736 },
14737
14738 maybe: function maybe(type) {
14739 function maybe(value, strict) {
14740 return nativeTypes.Null(value) || typeforce(type, value, strict);
14741 }
14742 maybe.toJSON = function () {
14743 return '?' + sJSON(type);
14744 };
14745
14746 return maybe;
14747 },
14748
14749 object: function object(type) {
14750 function object(value, strict) {
14751 typeforce(nativeTypes.Object, value, strict);
14752
14753 var propertyName, propertyType, propertyValue;
14754
14755 try {
14756 for (propertyName in type) {
14757 propertyType = type[propertyName];
14758 propertyValue = value[propertyName];
14759
14760 typeforce(propertyType, propertyValue, strict);
14761 }
14762 } catch (e) {
14763 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
14764 }
14765
14766 if (strict) {
14767 for (propertyName in value) {
14768 if (type[propertyName]) continue;
14769
14770 throw new TypeError('Unexpected property "' + propertyName + '"');
14771 }
14772 }
14773
14774 return true;
14775 }
14776 object.toJSON = function () {
14777 return type;
14778 };
14779
14780 return object;
14781 },
14782
14783 oneOf: function oneOf() {
14784 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
14785 types[_key] = arguments[_key];
14786 }
14787
14788 function oneOf(value, strict) {
14789 return types.some(function (type) {
14790 try {
14791 return typeforce(type, value, strict);
14792 } catch (e) {
14793 return false;
14794 }
14795 });
14796 }
14797 oneOf.toJSON = function () {
14798 return types.map(sJSON).join('|');
14799 };
14800
14801 return oneOf;
14802 },
14803
14804 quacksLike: function quacksLike(type) {
14805 function quacksLike(value, strict) {
14806 return type === getValueTypeName(value);
14807 }
14808 quacksLike.toJSON = function () {
14809 return type;
14810 };
14811
14812 return quacksLike;
14813 },
14814
14815 tuple: function tuple() {
14816 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14817 types[_key2] = arguments[_key2];
14818 }
14819
14820 function tuple(value, strict) {
14821 return types.every(function (type, i) {
14822 return typeforce(type, value[i], strict);
14823 });
14824 }
14825 tuple.toJSON = function () {
14826 return '(' + types.map(sJSON).join(', ') + ')';
14827 };
14828
14829 return tuple;
14830 },
14831
14832 value: function value(expected) {
14833 function value(actual) {
14834 return actual === expected;
14835 }
14836 value.toJSON = function () {
14837 return expected;
14838 };
14839
14840 return value;
14841 }
14842 };
14843
14844 function compile(type) {
14845 if (nativeTypes.String(type)) {
14846 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
14847
14848 return nativeTypes[type] || otherTypes.quacksLike(type);
14849 } else if (type && nativeTypes.Object(type)) {
14850 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
14851
14852 var compiled = {};
14853
14854 for (var propertyName in type) {
14855 compiled[propertyName] = compile(type[propertyName]);
14856 }
14857
14858 return otherTypes.object(compiled);
14859 } else if (nativeTypes.Function(type)) {
14860 return type;
14861 }
14862
14863 return otherTypes.value(type);
14864 }
14865
14866 function typeforce(_x3, _x4, _x5) {
14867 var _again = true;
14868
14869 _function: while (_again) {
14870 var type = _x3,
14871 value = _x4,
14872 strict = _x5;
14873 _again = false;
14874
14875 if (nativeTypes.Function(type)) {
14876 if (type(value, strict)) return true;
14877
14878 throw new TypeError(tfErrorString(type, value));
14879 }
14880
14881 // JIT
14882 _x3 = compile(type);
14883 _x4 = value;
14884 _x5 = strict;
14885 _again = true;
14886 continue _function;
14887 }
14888 }
14889
14890 // assign all types to typeforce function
14891 var typeName;
14892 Object.keys(nativeTypes).forEach(function (typeName) {
14893 var nativeType = nativeTypes[typeName];
14894 nativeType.toJSON = function () {
14895 return typeName;
14896 };
14897
14898 typeforce[typeName] = nativeType;
14899 });
14900
14901 for (typeName in otherTypes) {
14902 typeforce[typeName] = otherTypes[typeName];
14903 }
14904
14905 module.exports = typeforce;
14906 module.exports.compile = compile;
14907 }).call(this,require("buffer").Buffer)
14908 },{"buffer":7}],54:[function(require,module,exports){
14909 (function (Buffer){
14910 var assert = require('assert')
14911 var base58check = require('bs58check')
14912 var typeForce = require('typeforce')
14913 var networks = require('./networks')
14914 var scripts = require('./scripts')
14915
14916 function findScriptTypeByVersion (version) {
14917 for (var networkName in networks) {
14918 var network = networks[networkName]
14919
14920 if (version === network.pubKeyHash) return 'pubkeyhash'
14921 if (version === network.scriptHash) return 'scripthash'
14922 }
14923 }
14924
14925 function Address (hash, version) {
14926 typeForce('Buffer', hash)
14927
14928 assert.strictEqual(hash.length, 20, 'Invalid hash length')
14929 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
14930
14931 this.hash = hash
14932 this.version = version
14933 }
14934
14935 Address.fromBase58Check = function (string) {
14936 var payload = base58check.decode(string)
14937 var version = payload.readUInt8(0)
14938 var hash = payload.slice(1)
14939
14940 return new Address(hash, version)
14941 }
14942
14943 Address.fromOutputScript = function (script, network) {
14944 network = network || networks.bitcoin
14945
14946 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
14947 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
14948
14949 assert(false, script.toASM() + ' has no matching Address')
14950 }
14951
14952 Address.prototype.toBase58Check = function () {
14953 var payload = new Buffer(21)
14954 payload.writeUInt8(this.version, 0)
14955 this.hash.copy(payload, 1)
14956
14957 return base58check.encode(payload)
14958 }
14959
14960 Address.prototype.toOutputScript = function () {
14961 var scriptType = findScriptTypeByVersion(this.version)
14962
14963 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
14964 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
14965
14966 assert(false, this.toString() + ' has no matching Script')
14967 }
14968
14969 Address.prototype.toString = Address.prototype.toBase58Check
14970
14971 module.exports = Address
14972
14973 }).call(this,require("buffer").Buffer)
14974 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
14975 var bs58check = require('bs58check')
14976
14977 function decode () {
14978 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14979
14980 return bs58check.decode.apply(undefined, arguments)
14981 }
14982
14983 function encode () {
14984 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14985
14986 return bs58check.encode.apply(undefined, arguments)
14987 }
14988
14989 module.exports = {
14990 decode: decode,
14991 encode: encode
14992 }
14993
14994 },{"bs58check":31}],56:[function(require,module,exports){
14995 (function (Buffer){
14996 var assert = require('assert')
14997 var bufferutils = require('./bufferutils')
14998 var crypto = require('./crypto')
14999
15000 var Transaction = require('./transaction')
15001
15002 function Block () {
15003 this.version = 1
15004 this.prevHash = null
15005 this.merkleRoot = null
15006 this.timestamp = 0
15007 this.bits = 0
15008 this.nonce = 0
15009 }
15010
15011 Block.fromBuffer = function (buffer) {
15012 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
15013
15014 var offset = 0
15015 function readSlice (n) {
15016 offset += n
15017 return buffer.slice(offset - n, offset)
15018 }
15019
15020 function readUInt32 () {
15021 var i = buffer.readUInt32LE(offset)
15022 offset += 4
15023 return i
15024 }
15025
15026 var block = new Block()
15027 block.version = readUInt32()
15028 block.prevHash = readSlice(32)
15029 block.merkleRoot = readSlice(32)
15030 block.timestamp = readUInt32()
15031 block.bits = readUInt32()
15032 block.nonce = readUInt32()
15033
15034 if (buffer.length === 80) return block
15035
15036 function readVarInt () {
15037 var vi = bufferutils.readVarInt(buffer, offset)
15038 offset += vi.size
15039 return vi.number
15040 }
15041
15042 // FIXME: poor performance
15043 function readTransaction () {
15044 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
15045
15046 offset += tx.toBuffer().length
15047 return tx
15048 }
15049
15050 var nTransactions = readVarInt()
15051 block.transactions = []
15052
15053 for (var i = 0; i < nTransactions; ++i) {
15054 var tx = readTransaction()
15055 block.transactions.push(tx)
15056 }
15057
15058 return block
15059 }
15060
15061 Block.fromHex = function (hex) {
15062 return Block.fromBuffer(new Buffer(hex, 'hex'))
15063 }
15064
15065 Block.prototype.getHash = function () {
15066 return crypto.hash256(this.toBuffer(true))
15067 }
15068
15069 Block.prototype.getId = function () {
15070 return bufferutils.reverse(this.getHash()).toString('hex')
15071 }
15072
15073 Block.prototype.getUTCDate = function () {
15074 var date = new Date(0) // epoch
15075 date.setUTCSeconds(this.timestamp)
15076
15077 return date
15078 }
15079
15080 Block.prototype.toBuffer = function (headersOnly) {
15081 var buffer = new Buffer(80)
15082
15083 var offset = 0
15084 function writeSlice (slice) {
15085 slice.copy(buffer, offset)
15086 offset += slice.length
15087 }
15088
15089 function writeUInt32 (i) {
15090 buffer.writeUInt32LE(i, offset)
15091 offset += 4
15092 }
15093
15094 writeUInt32(this.version)
15095 writeSlice(this.prevHash)
15096 writeSlice(this.merkleRoot)
15097 writeUInt32(this.timestamp)
15098 writeUInt32(this.bits)
15099 writeUInt32(this.nonce)
15100
15101 if (headersOnly || !this.transactions) return buffer
15102
15103 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
15104 var txBuffers = this.transactions.map(function (tx) {
15105 return tx.toBuffer()
15106 })
15107
15108 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
15109 }
15110
15111 Block.prototype.toHex = function (headersOnly) {
15112 return this.toBuffer(headersOnly).toString('hex')
15113 }
15114
15115 module.exports = Block
15116
15117 }).call(this,require("buffer").Buffer)
15118 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
15119 (function (Buffer){
15120 var assert = require('assert')
15121 var opcodes = require('./opcodes')
15122
15123 // https://github.com/feross/buffer/blob/master/index.js#L1127
15124 function verifuint (value, max) {
15125 assert(typeof value === 'number', 'cannot write a non-number as a number')
15126 assert(value >= 0, 'specified a negative value for writing an unsigned value')
15127 assert(value <= max, 'value is larger than maximum value for type')
15128 assert(Math.floor(value) === value, 'value has a fractional component')
15129 }
15130
15131 function pushDataSize (i) {
15132 return i < opcodes.OP_PUSHDATA1 ? 1
15133 : i < 0xff ? 2
15134 : i < 0xffff ? 3
15135 : 5
15136 }
15137
15138 function readPushDataInt (buffer, offset) {
15139 var opcode = buffer.readUInt8(offset)
15140 var number, size
15141
15142 // ~6 bit
15143 if (opcode < opcodes.OP_PUSHDATA1) {
15144 number = opcode
15145 size = 1
15146
15147 // 8 bit
15148 } else if (opcode === opcodes.OP_PUSHDATA1) {
15149 if (offset + 2 > buffer.length) return null
15150 number = buffer.readUInt8(offset + 1)
15151 size = 2
15152
15153 // 16 bit
15154 } else if (opcode === opcodes.OP_PUSHDATA2) {
15155 if (offset + 3 > buffer.length) return null
15156 number = buffer.readUInt16LE(offset + 1)
15157 size = 3
15158
15159 // 32 bit
15160 } else {
15161 if (offset + 5 > buffer.length) return null
15162 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
15163
15164 number = buffer.readUInt32LE(offset + 1)
15165 size = 5
15166 }
15167
15168 return {
15169 opcode: opcode,
15170 number: number,
15171 size: size
15172 }
15173 }
15174
15175 function readUInt64LE (buffer, offset) {
15176 var a = buffer.readUInt32LE(offset)
15177 var b = buffer.readUInt32LE(offset + 4)
15178 b *= 0x100000000
15179
15180 verifuint(b + a, 0x001fffffffffffff)
15181
15182 return b + a
15183 }
15184
15185 function readVarInt (buffer, offset) {
15186 var t = buffer.readUInt8(offset)
15187 var number, size
15188
15189 // 8 bit
15190 if (t < 253) {
15191 number = t
15192 size = 1
15193
15194 // 16 bit
15195 } else if (t < 254) {
15196 number = buffer.readUInt16LE(offset + 1)
15197 size = 3
15198
15199 // 32 bit
15200 } else if (t < 255) {
15201 number = buffer.readUInt32LE(offset + 1)
15202 size = 5
15203
15204 // 64 bit
15205 } else {
15206 number = readUInt64LE(buffer, offset + 1)
15207 size = 9
15208 }
15209
15210 return {
15211 number: number,
15212 size: size
15213 }
15214 }
15215
15216 function writePushDataInt (buffer, number, offset) {
15217 var size = pushDataSize(number)
15218
15219 // ~6 bit
15220 if (size === 1) {
15221 buffer.writeUInt8(number, offset)
15222
15223 // 8 bit
15224 } else if (size === 2) {
15225 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
15226 buffer.writeUInt8(number, offset + 1)
15227
15228 // 16 bit
15229 } else if (size === 3) {
15230 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
15231 buffer.writeUInt16LE(number, offset + 1)
15232
15233 // 32 bit
15234 } else {
15235 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
15236 buffer.writeUInt32LE(number, offset + 1)
15237 }
15238
15239 return size
15240 }
15241
15242 function writeUInt64LE (buffer, value, offset) {
15243 verifuint(value, 0x001fffffffffffff)
15244
15245 buffer.writeInt32LE(value & -1, offset)
15246 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
15247 }
15248
15249 function varIntSize (i) {
15250 return i < 253 ? 1
15251 : i < 0x10000 ? 3
15252 : i < 0x100000000 ? 5
15253 : 9
15254 }
15255
15256 function writeVarInt (buffer, number, offset) {
15257 var size = varIntSize(number)
15258
15259 // 8 bit
15260 if (size === 1) {
15261 buffer.writeUInt8(number, offset)
15262
15263 // 16 bit
15264 } else if (size === 3) {
15265 buffer.writeUInt8(253, offset)
15266 buffer.writeUInt16LE(number, offset + 1)
15267
15268 // 32 bit
15269 } else if (size === 5) {
15270 buffer.writeUInt8(254, offset)
15271 buffer.writeUInt32LE(number, offset + 1)
15272
15273 // 64 bit
15274 } else {
15275 buffer.writeUInt8(255, offset)
15276 writeUInt64LE(buffer, number, offset + 1)
15277 }
15278
15279 return size
15280 }
15281
15282 function varIntBuffer (i) {
15283 var size = varIntSize(i)
15284 var buffer = new Buffer(size)
15285 writeVarInt(buffer, i, 0)
15286
15287 return buffer
15288 }
15289
15290 function reverse (buffer) {
15291 var buffer2 = new Buffer(buffer)
15292 Array.prototype.reverse.call(buffer2)
15293 return buffer2
15294 }
15295
15296 module.exports = {
15297 pushDataSize: pushDataSize,
15298 readPushDataInt: readPushDataInt,
15299 readUInt64LE: readUInt64LE,
15300 readVarInt: readVarInt,
15301 reverse: reverse,
15302 varIntBuffer: varIntBuffer,
15303 varIntSize: varIntSize,
15304 writePushDataInt: writePushDataInt,
15305 writeUInt64LE: writeUInt64LE,
15306 writeVarInt: writeVarInt
15307 }
15308
15309 }).call(this,require("buffer").Buffer)
15310 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
15311 var createHash = require('create-hash')
15312
15313 function hash160 (buffer) {
15314 return ripemd160(sha256(buffer))
15315 }
15316
15317 function hash256 (buffer) {
15318 return sha256(sha256(buffer))
15319 }
15320
15321 function ripemd160 (buffer) {
15322 return createHash('rmd160').update(buffer).digest()
15323 }
15324
15325 function sha1 (buffer) {
15326 return createHash('sha1').update(buffer).digest()
15327 }
15328
15329 function sha256 (buffer) {
15330 return createHash('sha256').update(buffer).digest()
15331 }
15332
15333 // FIXME: Name not consistent with others
15334 var createHmac = require('create-hmac')
15335
15336 function HmacSHA256 (buffer, secret) {
15337 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15338 return createHmac('sha256', secret).update(buffer).digest()
15339 }
15340
15341 function HmacSHA512 (buffer, secret) {
15342 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15343 return createHmac('sha512', secret).update(buffer).digest()
15344 }
15345
15346 module.exports = {
15347 ripemd160: ripemd160,
15348 sha1: sha1,
15349 sha256: sha256,
15350 hash160: hash160,
15351 hash256: hash256,
15352 HmacSHA256: HmacSHA256,
15353 HmacSHA512: HmacSHA512
15354 }
15355
15356 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
15357 (function (Buffer){
15358 var assert = require('assert')
15359 var createHmac = require('create-hmac')
15360 var typeForce = require('typeforce')
15361
15362 var BigInteger = require('bigi')
15363 var ECSignature = require('./ecsignature')
15364
15365 var ZERO = new Buffer([0])
15366 var ONE = new Buffer([1])
15367
15368 // https://tools.ietf.org/html/rfc6979#section-3.2
15369 function deterministicGenerateK (curve, hash, d, checkSig) {
15370 typeForce('Buffer', hash)
15371 typeForce('BigInteger', d)
15372
15373 // FIXME: remove/uncomment for 2.0.0
15374 // typeForce('Function', checkSig)
15375
15376 if (typeof checkSig !== 'function') {
15377 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
15378
15379 checkSig = function (k) {
15380 var G = curve.G
15381 var n = curve.n
15382 var e = BigInteger.fromBuffer(hash)
15383
15384 var Q = G.multiply(k)
15385
15386 if (curve.isInfinity(Q))
15387 return false
15388
15389 var r = Q.affineX.mod(n)
15390 if (r.signum() === 0)
15391 return false
15392
15393 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15394 if (s.signum() === 0)
15395 return false
15396
15397 return true
15398 }
15399 }
15400
15401 // sanity check
15402 assert.equal(hash.length, 32, 'Hash must be 256 bit')
15403
15404 var x = d.toBuffer(32)
15405 var k = new Buffer(32)
15406 var v = new Buffer(32)
15407
15408 // Step A, ignored as hash already provided
15409 // Step B
15410 v.fill(1)
15411
15412 // Step C
15413 k.fill(0)
15414
15415 // Step D
15416 k = createHmac('sha256', k)
15417 .update(v)
15418 .update(ZERO)
15419 .update(x)
15420 .update(hash)
15421 .digest()
15422
15423 // Step E
15424 v = createHmac('sha256', k).update(v).digest()
15425
15426 // Step F
15427 k = createHmac('sha256', k)
15428 .update(v)
15429 .update(ONE)
15430 .update(x)
15431 .update(hash)
15432 .digest()
15433
15434 // Step G
15435 v = createHmac('sha256', k).update(v).digest()
15436
15437 // Step H1/H2a, ignored as tlen === qlen (256 bit)
15438 // Step H2b
15439 v = createHmac('sha256', k).update(v).digest()
15440
15441 var T = BigInteger.fromBuffer(v)
15442
15443 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
15444 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
15445 k = createHmac('sha256', k)
15446 .update(v)
15447 .update(ZERO)
15448 .digest()
15449
15450 v = createHmac('sha256', k).update(v).digest()
15451
15452 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
15453 // Step H2b again
15454 v = createHmac('sha256', k).update(v).digest()
15455 T = BigInteger.fromBuffer(v)
15456 }
15457
15458 return T
15459 }
15460
15461 function sign (curve, hash, d) {
15462 var r, s
15463
15464 var e = BigInteger.fromBuffer(hash)
15465 var n = curve.n
15466 var G = curve.G
15467
15468 deterministicGenerateK(curve, hash, d, function (k) {
15469 var Q = G.multiply(k)
15470
15471 if (curve.isInfinity(Q))
15472 return false
15473
15474 r = Q.affineX.mod(n)
15475 if (r.signum() === 0)
15476 return false
15477
15478 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15479 if (s.signum() === 0)
15480 return false
15481
15482 return true
15483 })
15484
15485 var N_OVER_TWO = n.shiftRight(1)
15486
15487 // enforce low S values, see bip62: 'low s values in signatures'
15488 if (s.compareTo(N_OVER_TWO) > 0) {
15489 s = n.subtract(s)
15490 }
15491
15492 return new ECSignature(r, s)
15493 }
15494
15495 function verifyRaw (curve, e, signature, Q) {
15496 var n = curve.n
15497 var G = curve.G
15498
15499 var r = signature.r
15500 var s = signature.s
15501
15502 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
15503 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
15504 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
15505
15506 // c = s^-1 mod n
15507 var c = s.modInverse(n)
15508
15509 // 1.4.4 Compute u1 = es^−1 mod n
15510 // u2 = rs^−1 mod n
15511 var u1 = e.multiply(c).mod(n)
15512 var u2 = r.multiply(c).mod(n)
15513
15514 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
15515 var R = G.multiplyTwo(u1, Q, u2)
15516 var v = R.affineX.mod(n)
15517
15518 // 1.4.5 (cont.) Enforce R is not at infinity
15519 if (curve.isInfinity(R)) return false
15520
15521 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
15522 return v.equals(r)
15523 }
15524
15525 function verify (curve, hash, signature, Q) {
15526 // 1.4.2 H = Hash(M), already done by the user
15527 // 1.4.3 e = H
15528 var e = BigInteger.fromBuffer(hash)
15529
15530 return verifyRaw(curve, e, signature, Q)
15531 }
15532
15533 /**
15534 * Recover a public key from a signature.
15535 *
15536 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
15537 * Key Recovery Operation".
15538 *
15539 * http://www.secg.org/download/aid-780/sec1-v2.pdf
15540 */
15541 function recoverPubKey (curve, e, signature, i) {
15542 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
15543
15544 var n = curve.n
15545 var G = curve.G
15546
15547 var r = signature.r
15548 var s = signature.s
15549
15550 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
15551 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
15552
15553 // A set LSB signifies that the y-coordinate is odd
15554 var isYOdd = i & 1
15555
15556 // The more significant bit specifies whether we should use the
15557 // first or second candidate key.
15558 var isSecondKey = i >> 1
15559
15560 // 1.1 Let x = r + jn
15561 var x = isSecondKey ? r.add(n) : r
15562 var R = curve.pointFromX(isYOdd, x)
15563
15564 // 1.4 Check that nR is at infinity
15565 var nR = R.multiply(n)
15566 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
15567
15568 // Compute -e from e
15569 var eNeg = e.negate().mod(n)
15570
15571 // 1.6.1 Compute Q = r^-1 (sR - eG)
15572 // Q = r^-1 (sR + -eG)
15573 var rInv = r.modInverse(n)
15574
15575 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
15576 curve.validate(Q)
15577
15578 return Q
15579 }
15580
15581 /**
15582 * Calculate pubkey extraction parameter.
15583 *
15584 * When extracting a pubkey from a signature, we have to
15585 * distinguish four different cases. Rather than putting this
15586 * burden on the verifier, Bitcoin includes a 2-bit value with the
15587 * signature.
15588 *
15589 * This function simply tries all four cases and returns the value
15590 * that resulted in a successful pubkey recovery.
15591 */
15592 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
15593 for (var i = 0; i < 4; i++) {
15594 var Qprime = recoverPubKey(curve, e, signature, i)
15595
15596 // 1.6.2 Verify Q
15597 if (Qprime.equals(Q)) {
15598 return i
15599 }
15600 }
15601
15602 throw new Error('Unable to find valid recovery factor')
15603 }
15604
15605 module.exports = {
15606 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
15607 deterministicGenerateK: deterministicGenerateK,
15608 recoverPubKey: recoverPubKey,
15609 sign: sign,
15610 verify: verify,
15611 verifyRaw: verifyRaw
15612 }
15613
15614 }).call(this,require("buffer").Buffer)
15615 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
15616 (function (Buffer){
15617 var assert = require('assert')
15618 var base58check = require('bs58check')
15619 var ecdsa = require('./ecdsa')
15620 var networks = require('./networks')
15621 var randomBytes = require('randombytes')
15622 var typeForce = require('typeforce')
15623
15624 var BigInteger = require('bigi')
15625 var ECPubKey = require('./ecpubkey')
15626
15627 var ecurve = require('ecurve')
15628 var secp256k1 = ecurve.getCurveByName('secp256k1')
15629
15630 function ECKey (d, compressed) {
15631 assert(d.signum() > 0, 'Private key must be greater than 0')
15632 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
15633
15634 var Q = ECKey.curve.G.multiply(d)
15635
15636 this.d = d
15637 this.pub = new ECPubKey(Q, compressed)
15638 }
15639
15640 // Constants
15641 ECKey.curve = secp256k1
15642
15643 // Static constructors
15644 ECKey.fromWIF = function (string) {
15645 var payload = base58check.decode(string)
15646 var compressed = false
15647
15648 // Ignore the version byte
15649 payload = payload.slice(1)
15650
15651 if (payload.length === 33) {
15652 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
15653
15654 // Truncate the compression flag
15655 payload = payload.slice(0, -1)
15656 compressed = true
15657 }
15658
15659 assert.equal(payload.length, 32, 'Invalid WIF payload length')
15660
15661 var d = BigInteger.fromBuffer(payload)
15662 return new ECKey(d, compressed)
15663 }
15664
15665 ECKey.makeRandom = function (compressed, rng) {
15666 rng = rng || randomBytes
15667
15668 var buffer = rng(32)
15669 typeForce('Buffer', buffer)
15670 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
15671
15672 var d = BigInteger.fromBuffer(buffer)
15673 d = d.mod(ECKey.curve.n)
15674
15675 return new ECKey(d, compressed)
15676 }
15677
15678 // Export functions
15679 ECKey.prototype.toWIF = function (network) {
15680 network = network || networks.bitcoin
15681
15682 var bufferLen = this.pub.compressed ? 34 : 33
15683 var buffer = new Buffer(bufferLen)
15684
15685 buffer.writeUInt8(network.wif, 0)
15686 this.d.toBuffer(32).copy(buffer, 1)
15687
15688 if (this.pub.compressed) {
15689 buffer.writeUInt8(0x01, 33)
15690 }
15691
15692 return base58check.encode(buffer)
15693 }
15694
15695 // Operations
15696 ECKey.prototype.sign = function (hash) {
15697 return ecdsa.sign(ECKey.curve, hash, this.d)
15698 }
15699
15700 module.exports = ECKey
15701
15702 }).call(this,require("buffer").Buffer)
15703 },{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
15704 (function (Buffer){
15705 var crypto = require('./crypto')
15706 var ecdsa = require('./ecdsa')
15707 var typeForce = require('typeforce')
15708 var networks = require('./networks')
15709
15710 var Address = require('./address')
15711
15712 var ecurve = require('ecurve')
15713 var secp256k1 = ecurve.getCurveByName('secp256k1')
15714
15715 function ECPubKey (Q, compressed) {
15716 if (compressed === undefined) {
15717 compressed = true
15718 }
15719
15720 typeForce('Point', Q)
15721 typeForce('Boolean', compressed)
15722
15723 this.compressed = compressed
15724 this.Q = Q
15725 }
15726
15727 // Constants
15728 ECPubKey.curve = secp256k1
15729
15730 // Static constructors
15731 ECPubKey.fromBuffer = function (buffer) {
15732 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
15733 return new ECPubKey(Q, Q.compressed)
15734 }
15735
15736 ECPubKey.fromHex = function (hex) {
15737 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
15738 }
15739
15740 // Operations
15741 ECPubKey.prototype.getAddress = function (network) {
15742 network = network || networks.bitcoin
15743
15744 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
15745 }
15746
15747 ECPubKey.prototype.verify = function (hash, signature) {
15748 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
15749 }
15750
15751 // Export functions
15752 ECPubKey.prototype.toBuffer = function () {
15753 return this.Q.getEncoded(this.compressed)
15754 }
15755
15756 ECPubKey.prototype.toHex = function () {
15757 return this.toBuffer().toString('hex')
15758 }
15759
15760 module.exports = ECPubKey
15761
15762 }).call(this,require("buffer").Buffer)
15763 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
15764 (function (Buffer){
15765 var assert = require('assert')
15766 var typeForce = require('typeforce')
15767
15768 var BigInteger = require('bigi')
15769
15770 function ECSignature (r, s) {
15771 typeForce('BigInteger', r)
15772 typeForce('BigInteger', s)
15773
15774 this.r = r
15775 this.s = s
15776 }
15777
15778 ECSignature.parseCompact = function (buffer) {
15779 assert.equal(buffer.length, 65, 'Invalid signature length')
15780 var i = buffer.readUInt8(0) - 27
15781
15782 // At most 3 bits
15783 assert.equal(i, i & 7, 'Invalid signature parameter')
15784 var compressed = !!(i & 4)
15785
15786 // Recovery param only
15787 i = i & 3
15788
15789 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
15790 var s = BigInteger.fromBuffer(buffer.slice(33))
15791
15792 return {
15793 compressed: compressed,
15794 i: i,
15795 signature: new ECSignature(r, s)
15796 }
15797 }
15798
15799 ECSignature.fromDER = function (buffer) {
15800 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
15801 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
15802 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
15803
15804 var rLen = buffer.readUInt8(3)
15805 assert(rLen > 0, 'R length is zero')
15806
15807 var offset = 4 + rLen
15808 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
15809
15810 var sLen = buffer.readUInt8(offset + 1)
15811 assert(sLen > 0, 'S length is zero')
15812
15813 var rB = buffer.slice(4, offset)
15814 var sB = buffer.slice(offset + 2)
15815 offset += 2 + sLen
15816
15817 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
15818 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
15819 }
15820
15821 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
15822 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
15823 }
15824
15825 assert.equal(offset, buffer.length, 'Invalid DER encoding')
15826 var r = BigInteger.fromDERInteger(rB)
15827 var s = BigInteger.fromDERInteger(sB)
15828
15829 assert(r.signum() >= 0, 'R value is negative')
15830 assert(s.signum() >= 0, 'S value is negative')
15831
15832 return new ECSignature(r, s)
15833 }
15834
15835 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
15836 ECSignature.parseScriptSignature = function (buffer) {
15837 var hashType = buffer.readUInt8(buffer.length - 1)
15838 var hashTypeMod = hashType & ~0x80
15839
15840 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15841
15842 return {
15843 signature: ECSignature.fromDER(buffer.slice(0, -1)),
15844 hashType: hashType
15845 }
15846 }
15847
15848 ECSignature.prototype.toCompact = function (i, compressed) {
15849 if (compressed) {
15850 i += 4
15851 }
15852
15853 i += 27
15854
15855 var buffer = new Buffer(65)
15856 buffer.writeUInt8(i, 0)
15857
15858 this.r.toBuffer(32).copy(buffer, 1)
15859 this.s.toBuffer(32).copy(buffer, 33)
15860
15861 return buffer
15862 }
15863
15864 ECSignature.prototype.toDER = function () {
15865 var rBa = this.r.toDERInteger()
15866 var sBa = this.s.toDERInteger()
15867
15868 var sequence = []
15869
15870 // INTEGER
15871 sequence.push(0x02, rBa.length)
15872 sequence = sequence.concat(rBa)
15873
15874 // INTEGER
15875 sequence.push(0x02, sBa.length)
15876 sequence = sequence.concat(sBa)
15877
15878 // SEQUENCE
15879 sequence.unshift(0x30, sequence.length)
15880
15881 return new Buffer(sequence)
15882 }
15883
15884 ECSignature.prototype.toScriptSignature = function (hashType) {
15885 var hashTypeMod = hashType & ~0x80
15886 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15887
15888 var hashTypeBuffer = new Buffer(1)
15889 hashTypeBuffer.writeUInt8(hashType, 0)
15890
15891 return Buffer.concat([this.toDER(), hashTypeBuffer])
15892 }
15893
15894 module.exports = ECSignature
15895
15896 }).call(this,require("buffer").Buffer)
15897 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
15898 (function (Buffer){
15899 var assert = require('assert')
15900 var base58check = require('bs58check')
15901 var bcrypto = require('./crypto')
15902 var createHmac = require('create-hmac')
15903 var typeForce = require('typeforce')
15904 var networks = require('./networks')
15905
15906 var BigInteger = require('bigi')
15907 var ECKey = require('./eckey')
15908 var ECPubKey = require('./ecpubkey')
15909
15910 var ecurve = require('ecurve')
15911 var curve = ecurve.getCurveByName('secp256k1')
15912
15913 function findBIP32NetworkByVersion (version) {
15914 for (var name in networks) {
15915 var network = networks[name]
15916
15917 if (version === network.bip32.private || version === network.bip32.public) {
15918 return network
15919 }
15920 }
15921
15922 assert(false, 'Could not find network for ' + version.toString(16))
15923 }
15924
15925 function HDNode (K, chainCode, network) {
15926 network = network || networks.bitcoin
15927
15928 typeForce('Buffer', chainCode)
15929
15930 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
15931 assert(network.bip32, 'Unknown BIP32 constants for network')
15932
15933 this.chainCode = chainCode
15934 this.depth = 0
15935 this.index = 0
15936 this.parentFingerprint = 0x00000000
15937 this.network = network
15938
15939 if (K instanceof BigInteger) {
15940 this.privKey = new ECKey(K, true)
15941 this.pubKey = this.privKey.pub
15942 } else if (K instanceof ECKey) {
15943 assert(K.pub.compressed, 'ECKey must be compressed')
15944 this.privKey = K
15945 this.pubKey = K.pub
15946 } else if (K instanceof ECPubKey) {
15947 assert(K.compressed, 'ECPubKey must be compressed')
15948 this.pubKey = K
15949 } else {
15950 this.pubKey = new ECPubKey(K, true)
15951 }
15952 }
15953
15954 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
15955 HDNode.HIGHEST_BIT = 0x80000000
15956 HDNode.LENGTH = 78
15957
15958 HDNode.fromSeedBuffer = function (seed, network) {
15959 typeForce('Buffer', seed)
15960
15961 assert(seed.length >= 16, 'Seed should be at least 128 bits')
15962 assert(seed.length <= 64, 'Seed should be at most 512 bits')
15963
15964 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
15965 var IL = I.slice(0, 32)
15966 var IR = I.slice(32)
15967
15968 // In case IL is 0 or >= n, the master key is invalid
15969 // This is handled by `new ECKey` in the HDNode constructor
15970 var pIL = BigInteger.fromBuffer(IL)
15971
15972 return new HDNode(pIL, IR, network)
15973 }
15974
15975 HDNode.fromSeedHex = function (hex, network) {
15976 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
15977 }
15978
15979 HDNode.fromBase58 = function (string, network) {
15980 return HDNode.fromBuffer(base58check.decode(string), network, true)
15981 }
15982
15983 // FIXME: remove in 2.x.y
15984 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
15985 if (!__ignoreDeprecation) {
15986 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
15987 }
15988
15989 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
15990
15991 // 4 byte: version bytes
15992 var version = buffer.readUInt32BE(0)
15993
15994 if (network) {
15995 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
15996
15997 // auto-detect
15998 } else {
15999 network = findBIP32NetworkByVersion(version)
16000 }
16001
16002 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16003 var depth = buffer.readUInt8(4)
16004
16005 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16006 var parentFingerprint = buffer.readUInt32BE(5)
16007 if (depth === 0) {
16008 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
16009 }
16010
16011 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16012 // This is encoded in MSB order. (0x00000000 if master key)
16013 var index = buffer.readUInt32BE(9)
16014 assert(depth > 0 || index === 0, 'Invalid index')
16015
16016 // 32 bytes: the chain code
16017 var chainCode = buffer.slice(13, 45)
16018 var data, hd
16019
16020 // 33 bytes: private key data (0x00 + k)
16021 if (version === network.bip32.private) {
16022 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
16023 data = buffer.slice(46, 78)
16024 var d = BigInteger.fromBuffer(data)
16025 hd = new HDNode(d, chainCode, network)
16026
16027 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16028 } else {
16029 data = buffer.slice(45, 78)
16030 var Q = ecurve.Point.decodeFrom(curve, data)
16031 assert.equal(Q.compressed, true, 'Invalid public key')
16032
16033 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16034 // If not, the extended public key is invalid.
16035 curve.validate(Q)
16036
16037 hd = new HDNode(Q, chainCode, network)
16038 }
16039
16040 hd.depth = depth
16041 hd.index = index
16042 hd.parentFingerprint = parentFingerprint
16043
16044 return hd
16045 }
16046
16047 // FIXME: remove in 2.x.y
16048 HDNode.fromHex = function (hex, network) {
16049 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
16050 }
16051
16052 HDNode.prototype.getIdentifier = function () {
16053 return bcrypto.hash160(this.pubKey.toBuffer())
16054 }
16055
16056 HDNode.prototype.getFingerprint = function () {
16057 return this.getIdentifier().slice(0, 4)
16058 }
16059
16060 HDNode.prototype.getAddress = function () {
16061 return this.pubKey.getAddress(this.network)
16062 }
16063
16064 HDNode.prototype.neutered = function () {
16065 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
16066 neutered.depth = this.depth
16067 neutered.index = this.index
16068 neutered.parentFingerprint = this.parentFingerprint
16069
16070 return neutered
16071 }
16072
16073 HDNode.prototype.toBase58 = function (isPrivate) {
16074 return base58check.encode(this.toBuffer(isPrivate, true))
16075 }
16076
16077 // FIXME: remove in 2.x.y
16078 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
16079 if (isPrivate === undefined) {
16080 isPrivate = !!this.privKey
16081
16082 // FIXME: remove in 2.x.y
16083 } else {
16084 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
16085 }
16086
16087 if (!__ignoreDeprecation) {
16088 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
16089 }
16090
16091 // Version
16092 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
16093 var buffer = new Buffer(HDNode.LENGTH)
16094
16095 // 4 bytes: version bytes
16096 buffer.writeUInt32BE(version, 0)
16097
16098 // Depth
16099 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16100 buffer.writeUInt8(this.depth, 4)
16101
16102 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16103 buffer.writeUInt32BE(this.parentFingerprint, 5)
16104
16105 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16106 // This is encoded in Big endian. (0x00000000 if master key)
16107 buffer.writeUInt32BE(this.index, 9)
16108
16109 // 32 bytes: the chain code
16110 this.chainCode.copy(buffer, 13)
16111
16112 // 33 bytes: the public key or private key data
16113 if (isPrivate) {
16114 // FIXME: remove in 2.x.y
16115 assert(this.privKey, 'Missing private key')
16116
16117 // 0x00 + k for private keys
16118 buffer.writeUInt8(0, 45)
16119 this.privKey.d.toBuffer(32).copy(buffer, 46)
16120 } else {
16121 // X9.62 encoding for public keys
16122 this.pubKey.toBuffer().copy(buffer, 45)
16123 }
16124
16125 return buffer
16126 }
16127
16128 // FIXME: remove in 2.x.y
16129 HDNode.prototype.toHex = function (isPrivate) {
16130 return this.toBuffer(isPrivate).toString('hex')
16131 }
16132
16133 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16134 HDNode.prototype.derive = function (index) {
16135 var isHardened = index >= HDNode.HIGHEST_BIT
16136 var indexBuffer = new Buffer(4)
16137 indexBuffer.writeUInt32BE(index, 0)
16138
16139 var data
16140
16141 // Hardened child
16142 if (isHardened) {
16143 assert(this.privKey, 'Could not derive hardened child key')
16144
16145 // data = 0x00 || ser256(kpar) || ser32(index)
16146 data = Buffer.concat([
16147 this.privKey.d.toBuffer(33),
16148 indexBuffer
16149 ])
16150
16151 // Normal child
16152 } else {
16153 // data = serP(point(kpar)) || ser32(index)
16154 // = serP(Kpar) || ser32(index)
16155 data = Buffer.concat([
16156 this.pubKey.toBuffer(),
16157 indexBuffer
16158 ])
16159 }
16160
16161 var I = createHmac('sha512', this.chainCode).update(data).digest()
16162 var IL = I.slice(0, 32)
16163 var IR = I.slice(32)
16164
16165 var pIL = BigInteger.fromBuffer(IL)
16166
16167 // In case parse256(IL) >= n, proceed with the next value for i
16168 if (pIL.compareTo(curve.n) >= 0) {
16169 return this.derive(index + 1)
16170 }
16171
16172 // Private parent key -> private child key
16173 var hd
16174 if (this.privKey) {
16175 // ki = parse256(IL) + kpar (mod n)
16176 var ki = pIL.add(this.privKey.d).mod(curve.n)
16177
16178 // In case ki == 0, proceed with the next value for i
16179 if (ki.signum() === 0) {
16180 return this.derive(index + 1)
16181 }
16182
16183 hd = new HDNode(ki, IR, this.network)
16184
16185 // Public parent key -> public child key
16186 } else {
16187 // Ki = point(parse256(IL)) + Kpar
16188 // = G*IL + Kpar
16189 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
16190
16191 // In case Ki is the point at infinity, proceed with the next value for i
16192 if (curve.isInfinity(Ki)) {
16193 return this.derive(index + 1)
16194 }
16195
16196 hd = new HDNode(Ki, IR, this.network)
16197 }
16198
16199 hd.depth = this.depth + 1
16200 hd.index = index
16201 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
16202
16203 return hd
16204 }
16205
16206 HDNode.prototype.deriveHardened = function (index) {
16207 // Only derives hardened private keys by default
16208 return this.derive(index + HDNode.HIGHEST_BIT)
16209 }
16210
16211 HDNode.prototype.toString = HDNode.prototype.toBase58
16212
16213 module.exports = HDNode
16214
16215 }).call(this,require("buffer").Buffer)
16216 },{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
16217 module.exports = {
16218 Address: require('./address'),
16219 base58check: require('./base58check'),
16220 Block: require('./block'),
16221 bufferutils: require('./bufferutils'),
16222 crypto: require('./crypto'),
16223 ecdsa: require('./ecdsa'),
16224 ECKey: require('./eckey'),
16225 ECPubKey: require('./ecpubkey'),
16226 ECSignature: require('./ecsignature'),
16227 Message: require('./message'),
16228 opcodes: require('./opcodes'),
16229 HDNode: require('./hdnode'),
16230 Script: require('./script'),
16231 scripts: require('./scripts'),
16232 Transaction: require('./transaction'),
16233 TransactionBuilder: require('./transaction_builder'),
16234 networks: require('./networks'),
16235 Wallet: require('./wallet')
16236 }
16237
16238 },{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
16239 (function (Buffer){
16240 var bufferutils = require('./bufferutils')
16241 var crypto = require('./crypto')
16242 var ecdsa = require('./ecdsa')
16243 var networks = require('./networks')
16244
16245 var BigInteger = require('bigi')
16246 var ECPubKey = require('./ecpubkey')
16247 var ECSignature = require('./ecsignature')
16248
16249 var ecurve = require('ecurve')
16250 var ecparams = ecurve.getCurveByName('secp256k1')
16251
16252 function magicHash (message, network) {
16253 var magicPrefix = new Buffer(network.magicPrefix)
16254 var messageBuffer = new Buffer(message)
16255 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
16256
16257 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
16258 return crypto.hash256(buffer)
16259 }
16260
16261 function sign (privKey, message, network) {
16262 network = network || networks.bitcoin
16263
16264 var hash = magicHash(message, network)
16265 var signature = privKey.sign(hash)
16266 var e = BigInteger.fromBuffer(hash)
16267 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
16268
16269 return signature.toCompact(i, privKey.pub.compressed)
16270 }
16271
16272 // TODO: network could be implied from address
16273 function verify (address, signature, message, network) {
16274 if (!Buffer.isBuffer(signature)) {
16275 signature = new Buffer(signature, 'base64')
16276 }
16277
16278 network = network || networks.bitcoin
16279
16280 var hash = magicHash(message, network)
16281 var parsed = ECSignature.parseCompact(signature)
16282 var e = BigInteger.fromBuffer(hash)
16283 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
16284
16285 var pubKey = new ECPubKey(Q, parsed.compressed)
16286 return pubKey.getAddress(network).toString() === address.toString()
16287 }
16288
16289 module.exports = {
16290 magicHash: magicHash,
16291 sign: sign,
16292 verify: verify
16293 }
16294
16295 }).call(this,require("buffer").Buffer)
16296 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
16297 // https://en.bitcoin.it/wiki/List_of_address_prefixes
16298 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
16299
16300 var networks = {
16301 bitcoin: {
16302 magicPrefix: '\x18Bitcoin Signed Message:\n',
16303 bip32: {
16304 public: 0x0488b21e,
16305 private: 0x0488ade4
16306 },
16307 pubKeyHash: 0x00,
16308 scriptHash: 0x05,
16309 wif: 0x80,
16310 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
16311 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
16312 estimateFee: estimateFee('bitcoin')
16313 },
16314 testnet: {
16315 magicPrefix: '\x18Bitcoin Signed Message:\n',
16316 bip32: {
16317 public: 0x043587cf,
16318 private: 0x04358394
16319 },
16320 pubKeyHash: 0x6f,
16321 scriptHash: 0xc4,
16322 wif: 0xef,
16323 dustThreshold: 546,
16324 feePerKb: 10000,
16325 estimateFee: estimateFee('testnet')
16326 },
16327 litecoin: {
16328 magicPrefix: '\x19Litecoin Signed Message:\n',
16329 bip32: {
16330 public: 0x019da462,
16331 private: 0x019d9cfe
16332 },
16333 pubKeyHash: 0x30,
16334 scriptHash: 0x05,
16335 wif: 0xb0,
16336 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
16337 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
16338 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
16339 estimateFee: estimateFee('litecoin')
16340 },
16341 dogecoin: {
16342 magicPrefix: '\x19Dogecoin Signed Message:\n',
16343 bip32: {
16344 public: 0x02facafd,
16345 private: 0x02fac398
16346 },
16347 pubKeyHash: 0x1e,
16348 scriptHash: 0x16,
16349 wif: 0x9e,
16350 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
16351 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
16352 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
16353 estimateFee: estimateFee('dogecoin')
16354 },
16355 viacoin: {
16356 magicPrefix: '\x18Viacoin Signed Message:\n',
16357 bip32: {
16358 public: 0x0488b21e,
16359 private: 0x0488ade4
16360 },
16361 pubKeyHash: 0x47,
16362 scriptHash: 0x21,
16363 wif: 0xc7,
16364 dustThreshold: 560,
16365 dustSoftThreshold: 100000,
16366 feePerKb: 100000, //
16367 estimateFee: estimateFee('viacoin')
16368 },
16369 viacointestnet: {
16370 magicPrefix: '\x18Viacoin Signed Message:\n',
16371 bip32: {
16372 public: 0x043587cf,
16373 private: 0x04358394
16374 },
16375 pubKeyHash: 0x7f,
16376 scriptHash: 0xc4,
16377 wif: 0xff,
16378 dustThreshold: 560,
16379 dustSoftThreshold: 100000,
16380 feePerKb: 100000,
16381 estimateFee: estimateFee('viacointestnet')
16382 },
16383 gamerscoin: {
16384 magicPrefix: '\x19Gamerscoin Signed Message:\n',
16385 bip32: {
16386 public: 0x019da462,
16387 private: 0x019d9cfe
16388 },
16389 pubKeyHash: 0x26,
16390 scriptHash: 0x05,
16391 wif: 0xA6,
16392 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
16393 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
16394 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
16395 estimateFee: estimateFee('gamerscoin')
16396 },
16397 jumbucks: {
16398 magicPrefix: '\x19Jumbucks Signed Message:\n',
16399 bip32: {
16400 public: 0x037a689a,
16401 private: 0x037a6460
16402 },
16403 pubKeyHash: 0x2b,
16404 scriptHash: 0x05,
16405 wif: 0xab,
16406 dustThreshold: 0,
16407 dustSoftThreshold: 10000,
16408 feePerKb: 10000,
16409 estimateFee: estimateFee('jumbucks')
16410 },
16411 zetacoin: {
16412 magicPrefix: '\x18Zetacoin Signed Message:\n',
16413 bip32: {
16414 public: 0x0488b21e,
16415 private: 0x0488ade4
16416 },
16417 pubKeyHash: 0x50,
16418 scriptHash: 0x09,
16419 wif: 0xe0,
16420 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
16421 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
16422 estimateFee: estimateFee('zetacoin')
16423 }
16424 }
16425
16426 function estimateFee (type) {
16427 return function (tx) {
16428 var network = networks[type]
16429 var baseFee = network.feePerKb
16430 var byteSize = tx.toBuffer().length
16431
16432 var fee = baseFee * Math.ceil(byteSize / 1000)
16433 if (network.dustSoftThreshold === undefined) return fee
16434
16435 tx.outs.forEach(function (e) {
16436 if (e.value < network.dustSoftThreshold) {
16437 fee += baseFee
16438 }
16439 })
16440
16441 return fee
16442 }
16443 }
16444
16445 module.exports = networks
16446
16447 },{}],67:[function(require,module,exports){
16448 module.exports = {
16449 // push value
16450 OP_FALSE: 0,
16451 OP_0: 0,
16452 OP_PUSHDATA1: 76,
16453 OP_PUSHDATA2: 77,
16454 OP_PUSHDATA4: 78,
16455 OP_1NEGATE: 79,
16456 OP_RESERVED: 80,
16457 OP_1: 81,
16458 OP_TRUE: 81,
16459 OP_2: 82,
16460 OP_3: 83,
16461 OP_4: 84,
16462 OP_5: 85,
16463 OP_6: 86,
16464 OP_7: 87,
16465 OP_8: 88,
16466 OP_9: 89,
16467 OP_10: 90,
16468 OP_11: 91,
16469 OP_12: 92,
16470 OP_13: 93,
16471 OP_14: 94,
16472 OP_15: 95,
16473 OP_16: 96,
16474
16475 // control
16476 OP_NOP: 97,
16477 OP_VER: 98,
16478 OP_IF: 99,
16479 OP_NOTIF: 100,
16480 OP_VERIF: 101,
16481 OP_VERNOTIF: 102,
16482 OP_ELSE: 103,
16483 OP_ENDIF: 104,
16484 OP_VERIFY: 105,
16485 OP_RETURN: 106,
16486
16487 // stack ops
16488 OP_TOALTSTACK: 107,
16489 OP_FROMALTSTACK: 108,
16490 OP_2DROP: 109,
16491 OP_2DUP: 110,
16492 OP_3DUP: 111,
16493 OP_2OVER: 112,
16494 OP_2ROT: 113,
16495 OP_2SWAP: 114,
16496 OP_IFDUP: 115,
16497 OP_DEPTH: 116,
16498 OP_DROP: 117,
16499 OP_DUP: 118,
16500 OP_NIP: 119,
16501 OP_OVER: 120,
16502 OP_PICK: 121,
16503 OP_ROLL: 122,
16504 OP_ROT: 123,
16505 OP_SWAP: 124,
16506 OP_TUCK: 125,
16507
16508 // splice ops
16509 OP_CAT: 126,
16510 OP_SUBSTR: 127,
16511 OP_LEFT: 128,
16512 OP_RIGHT: 129,
16513 OP_SIZE: 130,
16514
16515 // bit logic
16516 OP_INVERT: 131,
16517 OP_AND: 132,
16518 OP_OR: 133,
16519 OP_XOR: 134,
16520 OP_EQUAL: 135,
16521 OP_EQUALVERIFY: 136,
16522 OP_RESERVED1: 137,
16523 OP_RESERVED2: 138,
16524
16525 // numeric
16526 OP_1ADD: 139,
16527 OP_1SUB: 140,
16528 OP_2MUL: 141,
16529 OP_2DIV: 142,
16530 OP_NEGATE: 143,
16531 OP_ABS: 144,
16532 OP_NOT: 145,
16533 OP_0NOTEQUAL: 146,
16534
16535 OP_ADD: 147,
16536 OP_SUB: 148,
16537 OP_MUL: 149,
16538 OP_DIV: 150,
16539 OP_MOD: 151,
16540 OP_LSHIFT: 152,
16541 OP_RSHIFT: 153,
16542
16543 OP_BOOLAND: 154,
16544 OP_BOOLOR: 155,
16545 OP_NUMEQUAL: 156,
16546 OP_NUMEQUALVERIFY: 157,
16547 OP_NUMNOTEQUAL: 158,
16548 OP_LESSTHAN: 159,
16549 OP_GREATERTHAN: 160,
16550 OP_LESSTHANOREQUAL: 161,
16551 OP_GREATERTHANOREQUAL: 162,
16552 OP_MIN: 163,
16553 OP_MAX: 164,
16554
16555 OP_WITHIN: 165,
16556
16557 // crypto
16558 OP_RIPEMD160: 166,
16559 OP_SHA1: 167,
16560 OP_SHA256: 168,
16561 OP_HASH160: 169,
16562 OP_HASH256: 170,
16563 OP_CODESEPARATOR: 171,
16564 OP_CHECKSIG: 172,
16565 OP_CHECKSIGVERIFY: 173,
16566 OP_CHECKMULTISIG: 174,
16567 OP_CHECKMULTISIGVERIFY: 175,
16568
16569 // expansion
16570 OP_NOP1: 176,
16571 OP_NOP2: 177,
16572 OP_NOP3: 178,
16573 OP_NOP4: 179,
16574 OP_NOP5: 180,
16575 OP_NOP6: 181,
16576 OP_NOP7: 182,
16577 OP_NOP8: 183,
16578 OP_NOP9: 184,
16579 OP_NOP10: 185,
16580
16581 // template matching params
16582 OP_PUBKEYHASH: 253,
16583 OP_PUBKEY: 254,
16584 OP_INVALIDOPCODE: 255
16585 }
16586
16587 },{}],68:[function(require,module,exports){
16588 (function (Buffer){
16589 var assert = require('assert')
16590 var bufferutils = require('./bufferutils')
16591 var crypto = require('./crypto')
16592 var typeForce = require('typeforce')
16593 var opcodes = require('./opcodes')
16594
16595 function Script (buffer, chunks) {
16596 typeForce('Buffer', buffer)
16597 typeForce('Array', chunks)
16598
16599 this.buffer = buffer
16600 this.chunks = chunks
16601 }
16602
16603 Script.fromASM = function (asm) {
16604 var strChunks = asm.split(' ')
16605 var chunks = strChunks.map(function (strChunk) {
16606 // opcode
16607 if (strChunk in opcodes) {
16608 return opcodes[strChunk]
16609
16610 // data chunk
16611 } else {
16612 return new Buffer(strChunk, 'hex')
16613 }
16614 })
16615
16616 return Script.fromChunks(chunks)
16617 }
16618
16619 Script.fromBuffer = function (buffer) {
16620 var chunks = []
16621 var i = 0
16622
16623 while (i < buffer.length) {
16624 var opcode = buffer.readUInt8(i)
16625
16626 // data chunk
16627 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
16628 var d = bufferutils.readPushDataInt(buffer, i)
16629
16630 // did reading a pushDataInt fail? return non-chunked script
16631 if (d === null) return new Script(buffer, [])
16632 i += d.size
16633
16634 // attempt to read too much data?
16635 if (i + d.number > buffer.length) return new Script(buffer, [])
16636
16637 var data = buffer.slice(i, i + d.number)
16638 i += d.number
16639
16640 chunks.push(data)
16641
16642 // opcode
16643 } else {
16644 chunks.push(opcode)
16645
16646 i += 1
16647 }
16648 }
16649
16650 return new Script(buffer, chunks)
16651 }
16652
16653 Script.fromChunks = function (chunks) {
16654 typeForce('Array', chunks)
16655
16656 var bufferSize = chunks.reduce(function (accum, chunk) {
16657 // data chunk
16658 if (Buffer.isBuffer(chunk)) {
16659 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
16660 }
16661
16662 // opcode
16663 return accum + 1
16664 }, 0.0)
16665
16666 var buffer = new Buffer(bufferSize)
16667 var offset = 0
16668
16669 chunks.forEach(function (chunk) {
16670 // data chunk
16671 if (Buffer.isBuffer(chunk)) {
16672 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
16673
16674 chunk.copy(buffer, offset)
16675 offset += chunk.length
16676
16677 // opcode
16678 } else {
16679 buffer.writeUInt8(chunk, offset)
16680 offset += 1
16681 }
16682 })
16683
16684 assert.equal(offset, buffer.length, 'Could not decode chunks')
16685 return new Script(buffer, chunks)
16686 }
16687
16688 Script.fromHex = function (hex) {
16689 return Script.fromBuffer(new Buffer(hex, 'hex'))
16690 }
16691
16692 Script.EMPTY = Script.fromChunks([])
16693
16694 Script.prototype.getHash = function () {
16695 return crypto.hash160(this.buffer)
16696 }
16697
16698 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
16699 Script.prototype.without = function (needle) {
16700 return Script.fromChunks(this.chunks.filter(function (op) {
16701 return op !== needle
16702 }))
16703 }
16704
16705 var reverseOps = []
16706 for (var op in opcodes) {
16707 var code = opcodes[op]
16708 reverseOps[code] = op
16709 }
16710
16711 Script.prototype.toASM = function () {
16712 return this.chunks.map(function (chunk) {
16713 // data chunk
16714 if (Buffer.isBuffer(chunk)) {
16715 return chunk.toString('hex')
16716
16717 // opcode
16718 } else {
16719 return reverseOps[chunk]
16720 }
16721 }).join(' ')
16722 }
16723
16724 Script.prototype.toBuffer = function () {
16725 return this.buffer
16726 }
16727
16728 Script.prototype.toHex = function () {
16729 return this.toBuffer().toString('hex')
16730 }
16731
16732 module.exports = Script
16733
16734 }).call(this,require("buffer").Buffer)
16735 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
16736 (function (Buffer){
16737 var assert = require('assert')
16738 var ops = require('./opcodes')
16739 var typeForce = require('typeforce')
16740
16741 var ecurve = require('ecurve')
16742 var curve = ecurve.getCurveByName('secp256k1')
16743
16744 var ECSignature = require('./ecsignature')
16745 var Script = require('./script')
16746
16747 function isCanonicalPubKey (buffer) {
16748 if (!Buffer.isBuffer(buffer)) return false
16749
16750 try {
16751 ecurve.Point.decodeFrom(curve, buffer)
16752 } catch (e) {
16753 if (!(e.message.match(/Invalid sequence (length|tag)/)))
16754 throw e
16755
16756 return false
16757 }
16758
16759 return true
16760 }
16761
16762 function isCanonicalSignature (buffer) {
16763 if (!Buffer.isBuffer(buffer)) return false
16764
16765 try {
16766 ECSignature.parseScriptSignature(buffer)
16767 } catch (e) {
16768 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
16769 throw e
16770 }
16771
16772 return false
16773 }
16774
16775 return true
16776 }
16777
16778 function isPubKeyHashInput (script) {
16779 return script.chunks.length === 2 &&
16780 isCanonicalSignature(script.chunks[0]) &&
16781 isCanonicalPubKey(script.chunks[1])
16782 }
16783
16784 function isPubKeyHashOutput (script) {
16785 return script.chunks.length === 5 &&
16786 script.chunks[0] === ops.OP_DUP &&
16787 script.chunks[1] === ops.OP_HASH160 &&
16788 Buffer.isBuffer(script.chunks[2]) &&
16789 script.chunks[2].length === 20 &&
16790 script.chunks[3] === ops.OP_EQUALVERIFY &&
16791 script.chunks[4] === ops.OP_CHECKSIG
16792 }
16793
16794 function isPubKeyInput (script) {
16795 return script.chunks.length === 1 &&
16796 isCanonicalSignature(script.chunks[0])
16797 }
16798
16799 function isPubKeyOutput (script) {
16800 return script.chunks.length === 2 &&
16801 isCanonicalPubKey(script.chunks[0]) &&
16802 script.chunks[1] === ops.OP_CHECKSIG
16803 }
16804
16805 function isScriptHashInput (script, allowIncomplete) {
16806 if (script.chunks.length < 2) return false
16807
16808 var lastChunk = script.chunks[script.chunks.length - 1]
16809 if (!Buffer.isBuffer(lastChunk)) return false
16810
16811 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
16812 var redeemScript = Script.fromBuffer(lastChunk)
16813
16814 // is redeemScript a valid script?
16815 if (redeemScript.chunks.length === 0) return false
16816
16817 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
16818 }
16819
16820 function isScriptHashOutput (script) {
16821 return script.chunks.length === 3 &&
16822 script.chunks[0] === ops.OP_HASH160 &&
16823 Buffer.isBuffer(script.chunks[1]) &&
16824 script.chunks[1].length === 20 &&
16825 script.chunks[2] === ops.OP_EQUAL
16826 }
16827
16828 // allowIncomplete is to account for combining signatures
16829 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
16830 function isMultisigInput (script, allowIncomplete) {
16831 if (script.chunks.length < 2) return false
16832 if (script.chunks[0] !== ops.OP_0) return false
16833
16834 if (allowIncomplete) {
16835 return script.chunks.slice(1).every(function (chunk) {
16836 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
16837 })
16838 }
16839
16840 return script.chunks.slice(1).every(isCanonicalSignature)
16841 }
16842
16843 function isMultisigOutput (script) {
16844 if (script.chunks.length < 4) return false
16845 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
16846
16847 var mOp = script.chunks[0]
16848 if (mOp === ops.OP_0) return false
16849 if (mOp < ops.OP_1) return false
16850 if (mOp > ops.OP_16) return false
16851
16852 var nOp = script.chunks[script.chunks.length - 2]
16853 if (nOp === ops.OP_0) return false
16854 if (nOp < ops.OP_1) return false
16855 if (nOp > ops.OP_16) return false
16856
16857 var m = mOp - (ops.OP_1 - 1)
16858 var n = nOp - (ops.OP_1 - 1)
16859 if (n < m) return false
16860
16861 var pubKeys = script.chunks.slice(1, -2)
16862 if (n < pubKeys.length) return false
16863
16864 return pubKeys.every(isCanonicalPubKey)
16865 }
16866
16867 function isNullDataOutput (script) {
16868 return script.chunks[0] === ops.OP_RETURN
16869 }
16870
16871 function classifyOutput (script) {
16872 typeForce('Script', script)
16873
16874 if (isPubKeyHashOutput(script)) {
16875 return 'pubkeyhash'
16876 } else if (isScriptHashOutput(script)) {
16877 return 'scripthash'
16878 } else if (isMultisigOutput(script)) {
16879 return 'multisig'
16880 } else if (isPubKeyOutput(script)) {
16881 return 'pubkey'
16882 } else if (isNullDataOutput(script)) {
16883 return 'nulldata'
16884 }
16885
16886 return 'nonstandard'
16887 }
16888
16889 function classifyInput (script, allowIncomplete) {
16890 typeForce('Script', script)
16891
16892 if (isPubKeyHashInput(script)) {
16893 return 'pubkeyhash'
16894 } else if (isMultisigInput(script, allowIncomplete)) {
16895 return 'multisig'
16896 } else if (isScriptHashInput(script, allowIncomplete)) {
16897 return 'scripthash'
16898 } else if (isPubKeyInput(script)) {
16899 return 'pubkey'
16900 }
16901
16902 return 'nonstandard'
16903 }
16904
16905 // Standard Script Templates
16906 // {pubKey} OP_CHECKSIG
16907 function pubKeyOutput (pubKey) {
16908 return Script.fromChunks([
16909 pubKey.toBuffer(),
16910 ops.OP_CHECKSIG
16911 ])
16912 }
16913
16914 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
16915 function pubKeyHashOutput (hash) {
16916 typeForce('Buffer', hash)
16917
16918 return Script.fromChunks([
16919 ops.OP_DUP,
16920 ops.OP_HASH160,
16921 hash,
16922 ops.OP_EQUALVERIFY,
16923 ops.OP_CHECKSIG
16924 ])
16925 }
16926
16927 // OP_HASH160 {scriptHash} OP_EQUAL
16928 function scriptHashOutput (hash) {
16929 typeForce('Buffer', hash)
16930
16931 return Script.fromChunks([
16932 ops.OP_HASH160,
16933 hash,
16934 ops.OP_EQUAL
16935 ])
16936 }
16937
16938 // m [pubKeys ...] n OP_CHECKMULTISIG
16939 function multisigOutput (m, pubKeys) {
16940 typeForce(['ECPubKey'], pubKeys)
16941
16942 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
16943
16944 var pubKeyBuffers = pubKeys.map(function (pubKey) {
16945 return pubKey.toBuffer()
16946 })
16947 var n = pubKeys.length
16948
16949 return Script.fromChunks([].concat(
16950 (ops.OP_1 - 1) + m,
16951 pubKeyBuffers,
16952 (ops.OP_1 - 1) + n,
16953 ops.OP_CHECKMULTISIG
16954 ))
16955 }
16956
16957 // {signature}
16958 function pubKeyInput (signature) {
16959 typeForce('Buffer', signature)
16960
16961 return Script.fromChunks([signature])
16962 }
16963
16964 // {signature} {pubKey}
16965 function pubKeyHashInput (signature, pubKey) {
16966 typeForce('Buffer', signature)
16967
16968 return Script.fromChunks([signature, pubKey.toBuffer()])
16969 }
16970
16971 // <scriptSig> {serialized scriptPubKey script}
16972 function scriptHashInput (scriptSig, scriptPubKey) {
16973 return Script.fromChunks([].concat(
16974 scriptSig.chunks,
16975 scriptPubKey.toBuffer()
16976 ))
16977 }
16978
16979 // OP_0 [signatures ...]
16980 function multisigInput (signatures, scriptPubKey) {
16981 if (scriptPubKey) {
16982 assert(isMultisigOutput(scriptPubKey))
16983
16984 var mOp = scriptPubKey.chunks[0]
16985 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
16986 var m = mOp - (ops.OP_1 - 1)
16987 var n = nOp - (ops.OP_1 - 1)
16988
16989 assert(signatures.length >= m, 'Not enough signatures provided')
16990 assert(signatures.length <= n, 'Too many signatures provided')
16991 }
16992
16993 return Script.fromChunks([].concat(ops.OP_0, signatures))
16994 }
16995
16996 function nullDataOutput (data) {
16997 return Script.fromChunks([ops.OP_RETURN, data])
16998 }
16999
17000 module.exports = {
17001 isCanonicalPubKey: isCanonicalPubKey,
17002 isCanonicalSignature: isCanonicalSignature,
17003 isPubKeyHashInput: isPubKeyHashInput,
17004 isPubKeyHashOutput: isPubKeyHashOutput,
17005 isPubKeyInput: isPubKeyInput,
17006 isPubKeyOutput: isPubKeyOutput,
17007 isScriptHashInput: isScriptHashInput,
17008 isScriptHashOutput: isScriptHashOutput,
17009 isMultisigInput: isMultisigInput,
17010 isMultisigOutput: isMultisigOutput,
17011 isNullDataOutput: isNullDataOutput,
17012 classifyOutput: classifyOutput,
17013 classifyInput: classifyInput,
17014 pubKeyOutput: pubKeyOutput,
17015 pubKeyHashOutput: pubKeyHashOutput,
17016 scriptHashOutput: scriptHashOutput,
17017 multisigOutput: multisigOutput,
17018 pubKeyInput: pubKeyInput,
17019 pubKeyHashInput: pubKeyHashInput,
17020 scriptHashInput: scriptHashInput,
17021 multisigInput: multisigInput,
17022 dataOutput: function (data) {
17023 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
17024 return nullDataOutput(data)
17025 },
17026 nullDataOutput: nullDataOutput
17027 }
17028
17029 }).call(this,require("buffer").Buffer)
17030 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
17031 (function (Buffer){
17032 var assert = require('assert')
17033 var bufferutils = require('./bufferutils')
17034 var crypto = require('./crypto')
17035 var typeForce = require('typeforce')
17036 var opcodes = require('./opcodes')
17037 var scripts = require('./scripts')
17038
17039 var Address = require('./address')
17040 var ECSignature = require('./ecsignature')
17041 var Script = require('./script')
17042
17043 function Transaction () {
17044 this.version = 1
17045 this.locktime = 0
17046 this.ins = []
17047 this.outs = []
17048 }
17049
17050 Transaction.DEFAULT_SEQUENCE = 0xffffffff
17051 Transaction.SIGHASH_ALL = 0x01
17052 Transaction.SIGHASH_NONE = 0x02
17053 Transaction.SIGHASH_SINGLE = 0x03
17054 Transaction.SIGHASH_ANYONECANPAY = 0x80
17055
17056 Transaction.fromBuffer = function (buffer, __disableAssert) {
17057 var offset = 0
17058 function readSlice (n) {
17059 offset += n
17060 return buffer.slice(offset - n, offset)
17061 }
17062
17063 function readUInt32 () {
17064 var i = buffer.readUInt32LE(offset)
17065 offset += 4
17066 return i
17067 }
17068
17069 function readUInt64 () {
17070 var i = bufferutils.readUInt64LE(buffer, offset)
17071 offset += 8
17072 return i
17073 }
17074
17075 function readVarInt () {
17076 var vi = bufferutils.readVarInt(buffer, offset)
17077 offset += vi.size
17078 return vi.number
17079 }
17080
17081 function readScript () {
17082 return Script.fromBuffer(readSlice(readVarInt()))
17083 }
17084
17085 function readGenerationScript () {
17086 return new Script(readSlice(readVarInt()), [])
17087 }
17088
17089 var tx = new Transaction()
17090 tx.version = readUInt32()
17091
17092 var vinLen = readVarInt()
17093 for (var i = 0; i < vinLen; ++i) {
17094 var hash = readSlice(32)
17095
17096 if (Transaction.isCoinbaseHash(hash)) {
17097 tx.ins.push({
17098 hash: hash,
17099 index: readUInt32(),
17100 script: readGenerationScript(),
17101 sequence: readUInt32()
17102 })
17103 } else {
17104 tx.ins.push({
17105 hash: hash,
17106 index: readUInt32(),
17107 script: readScript(),
17108 sequence: readUInt32()
17109 })
17110 }
17111 }
17112
17113 var voutLen = readVarInt()
17114 for (i = 0; i < voutLen; ++i) {
17115 tx.outs.push({
17116 value: readUInt64(),
17117 script: readScript()
17118 })
17119 }
17120
17121 tx.locktime = readUInt32()
17122
17123 if (!__disableAssert) {
17124 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
17125 }
17126
17127 return tx
17128 }
17129
17130 Transaction.fromHex = function (hex) {
17131 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
17132 }
17133
17134 Transaction.isCoinbaseHash = function (buffer) {
17135 return Array.prototype.every.call(buffer, function (x) {
17136 return x === 0
17137 })
17138 }
17139
17140 /**
17141 * Create a new txIn.
17142 *
17143 * Can be called with any of:
17144 *
17145 * - A transaction and an index
17146 * - A transaction hash and an index
17147 *
17148 * Note that this method does not sign the created input.
17149 */
17150 Transaction.prototype.addInput = function (hash, index, sequence, script) {
17151 if (sequence === undefined || sequence === null) {
17152 sequence = Transaction.DEFAULT_SEQUENCE
17153 }
17154
17155 script = script || Script.EMPTY
17156
17157 if (typeof hash === 'string') {
17158 // TxId hex is big-endian, we need little-endian
17159 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
17160 } else if (hash instanceof Transaction) {
17161 hash = hash.getHash()
17162 }
17163
17164 typeForce('Buffer', hash)
17165 typeForce('Number', index)
17166 typeForce('Number', sequence)
17167 typeForce('Script', script)
17168
17169 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
17170
17171 // Add the input and return the input's index
17172 return (this.ins.push({
17173 hash: hash,
17174 index: index,
17175 script: script,
17176 sequence: sequence
17177 }) - 1)
17178 }
17179
17180 /**
17181 * Create a new txOut.
17182 *
17183 * Can be called with:
17184 *
17185 * - A base58 address string and a value
17186 * - An Address object and a value
17187 * - A scriptPubKey Script and a value
17188 */
17189 Transaction.prototype.addOutput = function (scriptPubKey, value) {
17190 // Attempt to get a valid address if it's a base58 address string
17191 if (typeof scriptPubKey === 'string') {
17192 scriptPubKey = Address.fromBase58Check(scriptPubKey)
17193 }
17194
17195 // Attempt to get a valid script if it's an Address object
17196 if (scriptPubKey instanceof Address) {
17197 scriptPubKey = scriptPubKey.toOutputScript()
17198 }
17199
17200 typeForce('Script', scriptPubKey)
17201 typeForce('Number', value)
17202
17203 // Add the output and return the output's index
17204 return (this.outs.push({
17205 script: scriptPubKey,
17206 value: value
17207 }) - 1)
17208 }
17209
17210 Transaction.prototype.clone = function () {
17211 var newTx = new Transaction()
17212 newTx.version = this.version
17213 newTx.locktime = this.locktime
17214
17215 newTx.ins = this.ins.map(function (txIn) {
17216 return {
17217 hash: txIn.hash,
17218 index: txIn.index,
17219 script: txIn.script,
17220 sequence: txIn.sequence
17221 }
17222 })
17223
17224 newTx.outs = this.outs.map(function (txOut) {
17225 return {
17226 script: txOut.script,
17227 value: txOut.value
17228 }
17229 })
17230
17231 return newTx
17232 }
17233
17234 /**
17235 * Hash transaction for signing a specific input.
17236 *
17237 * Bitcoin uses a different hash for each signed transaction input. This
17238 * method copies the transaction, makes the necessary changes based on the
17239 * hashType, serializes and finally hashes the result. This hash can then be
17240 * used to sign the transaction input in question.
17241 */
17242 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
17243 // FIXME: remove in 2.x.y
17244 if (arguments[0] instanceof Script) {
17245 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
17246
17247 // swap the arguments (must be stored in tmp, arguments is special)
17248 var tmp = arguments[0]
17249 inIndex = arguments[1]
17250 prevOutScript = tmp
17251 }
17252
17253 typeForce('Number', inIndex)
17254 typeForce('Script', prevOutScript)
17255 typeForce('Number', hashType)
17256
17257 assert(inIndex >= 0, 'Invalid vin index')
17258 assert(inIndex < this.ins.length, 'Invalid vin index')
17259
17260 var txTmp = this.clone()
17261 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
17262
17263 // Blank out other inputs' signatures
17264 txTmp.ins.forEach(function (txIn) {
17265 txIn.script = Script.EMPTY
17266 })
17267 txTmp.ins[inIndex].script = hashScript
17268
17269 var hashTypeModifier = hashType & 0x1f
17270
17271 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
17272 assert(false, 'SIGHASH_NONE not yet supported')
17273 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
17274 assert(false, 'SIGHASH_SINGLE not yet supported')
17275 }
17276
17277 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
17278 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
17279 }
17280
17281 var hashTypeBuffer = new Buffer(4)
17282 hashTypeBuffer.writeInt32LE(hashType, 0)
17283
17284 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
17285 return crypto.hash256(buffer)
17286 }
17287
17288 Transaction.prototype.getHash = function () {
17289 return crypto.hash256(this.toBuffer())
17290 }
17291
17292 Transaction.prototype.getId = function () {
17293 // TxHash is little-endian, we need big-endian
17294 return bufferutils.reverse(this.getHash()).toString('hex')
17295 }
17296
17297 Transaction.prototype.toBuffer = function () {
17298 function scriptSize (script) {
17299 var length = script.buffer.length
17300
17301 return bufferutils.varIntSize(length) + length
17302 }
17303
17304 var buffer = new Buffer(
17305 8 +
17306 bufferutils.varIntSize(this.ins.length) +
17307 bufferutils.varIntSize(this.outs.length) +
17308 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
17309 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
17310 )
17311
17312 var offset = 0
17313 function writeSlice (slice) {
17314 slice.copy(buffer, offset)
17315 offset += slice.length
17316 }
17317
17318 function writeUInt32 (i) {
17319 buffer.writeUInt32LE(i, offset)
17320 offset += 4
17321 }
17322
17323 function writeUInt64 (i) {
17324 bufferutils.writeUInt64LE(buffer, i, offset)
17325 offset += 8
17326 }
17327
17328 function writeVarInt (i) {
17329 var n = bufferutils.writeVarInt(buffer, i, offset)
17330 offset += n
17331 }
17332
17333 writeUInt32(this.version)
17334 writeVarInt(this.ins.length)
17335
17336 this.ins.forEach(function (txIn) {
17337 writeSlice(txIn.hash)
17338 writeUInt32(txIn.index)
17339 writeVarInt(txIn.script.buffer.length)
17340 writeSlice(txIn.script.buffer)
17341 writeUInt32(txIn.sequence)
17342 })
17343
17344 writeVarInt(this.outs.length)
17345 this.outs.forEach(function (txOut) {
17346 writeUInt64(txOut.value)
17347 writeVarInt(txOut.script.buffer.length)
17348 writeSlice(txOut.script.buffer)
17349 })
17350
17351 writeUInt32(this.locktime)
17352
17353 return buffer
17354 }
17355
17356 Transaction.prototype.toHex = function () {
17357 return this.toBuffer().toString('hex')
17358 }
17359
17360 Transaction.prototype.setInputScript = function (index, script) {
17361 typeForce('Number', index)
17362 typeForce('Script', script)
17363
17364 this.ins[index].script = script
17365 }
17366
17367 // FIXME: remove in 2.x.y
17368 Transaction.prototype.sign = function (index, privKey, hashType) {
17369 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
17370
17371 var prevOutScript = privKey.pub.getAddress().toOutputScript()
17372 var signature = this.signInput(index, prevOutScript, privKey, hashType)
17373
17374 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
17375 this.setInputScript(index, scriptSig)
17376 }
17377
17378 // FIXME: remove in 2.x.y
17379 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
17380 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
17381
17382 hashType = hashType || Transaction.SIGHASH_ALL
17383
17384 var hash = this.hashForSignature(index, prevOutScript, hashType)
17385 var signature = privKey.sign(hash)
17386
17387 return signature.toScriptSignature(hashType)
17388 }
17389
17390 // FIXME: remove in 2.x.y
17391 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
17392 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
17393
17394 var parsed = ECSignature.parseScriptSignature(buffer)
17395 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
17396
17397 return pubKey.verify(hash, parsed.signature)
17398 }
17399
17400 module.exports = Transaction
17401
17402 }).call(this,require("buffer").Buffer)
17403 },{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
17404 (function (Buffer){
17405 var assert = require('assert')
17406 var ops = require('./opcodes')
17407 var scripts = require('./scripts')
17408
17409 var ECPubKey = require('./ecpubkey')
17410 var ECSignature = require('./ecsignature')
17411 var Script = require('./script')
17412 var Transaction = require('./transaction')
17413
17414 function extractInput (txIn) {
17415 var redeemScript
17416 var scriptSig = txIn.script
17417 var prevOutScript
17418 var prevOutType = scripts.classifyInput(scriptSig, true)
17419 var scriptType
17420
17421 // Re-classify if scriptHash
17422 if (prevOutType === 'scripthash') {
17423 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
17424 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17425
17426 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
17427 scriptType = scripts.classifyInput(scriptSig, true)
17428 } else {
17429 scriptType = prevOutType
17430 }
17431
17432 // Extract hashType, pubKeys and signatures
17433 var hashType, parsed, pubKeys, signatures
17434
17435 switch (scriptType) {
17436 case 'pubkeyhash': {
17437 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17438 hashType = parsed.hashType
17439 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
17440 signatures = [parsed.signature]
17441 prevOutScript = pubKeys[0].getAddress().toOutputScript()
17442
17443 break
17444 }
17445
17446 case 'pubkey': {
17447 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17448 hashType = parsed.hashType
17449 signatures = [parsed.signature]
17450
17451 if (redeemScript) {
17452 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
17453 }
17454
17455 break
17456 }
17457
17458 case 'multisig': {
17459 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
17460 if (chunk === ops.OP_0) return chunk
17461
17462 var parsed = ECSignature.parseScriptSignature(chunk)
17463 hashType = parsed.hashType
17464
17465 return parsed.signature
17466 })
17467
17468 if (redeemScript) {
17469 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17470 }
17471
17472 break
17473 }
17474 }
17475
17476 return {
17477 hashType: hashType,
17478 prevOutScript: prevOutScript,
17479 prevOutType: prevOutType,
17480 pubKeys: pubKeys,
17481 redeemScript: redeemScript,
17482 scriptType: scriptType,
17483 signatures: signatures
17484 }
17485 }
17486
17487 function TransactionBuilder () {
17488 this.prevTxMap = {}
17489 this.prevOutScripts = {}
17490 this.prevOutTypes = {}
17491
17492 this.inputs = []
17493 this.tx = new Transaction()
17494 }
17495
17496 TransactionBuilder.fromTransaction = function (transaction) {
17497 var txb = new TransactionBuilder()
17498
17499 // Copy other transaction fields
17500 txb.tx.version = transaction.version
17501 txb.tx.locktime = transaction.locktime
17502
17503 // Extract/add inputs
17504 transaction.ins.forEach(function (txIn) {
17505 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
17506 })
17507
17508 // Extract/add outputs
17509 transaction.outs.forEach(function (txOut) {
17510 txb.addOutput(txOut.script, txOut.value)
17511 })
17512
17513 // Extract/add signatures
17514 txb.inputs = transaction.ins.map(function (txIn) {
17515 // TODO: remove me after testcase added
17516 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
17517
17518 // Ignore empty scripts
17519 if (txIn.script.buffer.length === 0) return {}
17520
17521 return extractInput(txIn)
17522 })
17523
17524 return txb
17525 }
17526
17527 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
17528 var prevOutHash
17529
17530 // txId
17531 if (typeof prevTx === 'string') {
17532 prevOutHash = new Buffer(prevTx, 'hex')
17533
17534 // TxId hex is big-endian, we want little-endian hash
17535 Array.prototype.reverse.call(prevOutHash)
17536
17537 // Transaction
17538 } else if (prevTx instanceof Transaction) {
17539 prevOutHash = prevTx.getHash()
17540 prevOutScript = prevTx.outs[index].script
17541
17542 // txHash
17543 } else {
17544 prevOutHash = prevTx
17545 }
17546
17547 var input = {}
17548 if (prevOutScript) {
17549 var prevOutType = scripts.classifyOutput(prevOutScript)
17550
17551 // if we can, extract pubKey information
17552 switch (prevOutType) {
17553 case 'multisig': {
17554 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17555 break
17556 }
17557
17558 case 'pubkey': {
17559 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17560 break
17561 }
17562 }
17563
17564 if (prevOutType !== 'scripthash') {
17565 input.scriptType = prevOutType
17566 }
17567
17568 input.prevOutScript = prevOutScript
17569 input.prevOutType = prevOutType
17570 }
17571
17572 assert(this.inputs.every(function (input2) {
17573 if (input2.hashType === undefined) return true
17574
17575 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
17576 }), 'No, this would invalidate signatures')
17577
17578 var prevOut = prevOutHash.toString('hex') + ':' + index
17579 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
17580
17581 var vin = this.tx.addInput(prevOutHash, index, sequence)
17582 this.inputs[vin] = input
17583 this.prevTxMap[prevOut] = vin
17584
17585 return vin
17586 }
17587
17588 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
17589 assert(this.inputs.every(function (input) {
17590 if (input.hashType === undefined) return true
17591
17592 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
17593 }), 'No, this would invalidate signatures')
17594
17595 return this.tx.addOutput(scriptPubKey, value)
17596 }
17597
17598 TransactionBuilder.prototype.build = function () {
17599 return this.__build(false)
17600 }
17601 TransactionBuilder.prototype.buildIncomplete = function () {
17602 return this.__build(true)
17603 }
17604
17605 var canSignTypes = {
17606 'pubkeyhash': true,
17607 'multisig': true,
17608 'pubkey': true
17609 }
17610
17611 TransactionBuilder.prototype.__build = function (allowIncomplete) {
17612 if (!allowIncomplete) {
17613 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
17614 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
17615 }
17616
17617 var tx = this.tx.clone()
17618
17619 // Create script signatures from signature meta-data
17620 this.inputs.forEach(function (input, index) {
17621 var scriptType = input.scriptType
17622 var scriptSig
17623
17624 if (!allowIncomplete) {
17625 assert(!!scriptType, 'Transaction is not complete')
17626 assert(scriptType in canSignTypes, scriptType + ' not supported')
17627 assert(input.signatures, 'Transaction is missing signatures')
17628 }
17629
17630 if (input.signatures) {
17631 switch (scriptType) {
17632 case 'pubkeyhash': {
17633 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
17634 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
17635 break
17636 }
17637
17638 case 'multisig': {
17639 // Array.prototype.map is sparse-compatible
17640 var msSignatures = input.signatures.map(function (signature) {
17641 return signature && signature.toScriptSignature(input.hashType)
17642 })
17643
17644 // fill in blanks with OP_0
17645 if (allowIncomplete) {
17646 for (var i = 0; i < msSignatures.length; ++i) {
17647 if (msSignatures[i]) continue
17648
17649 msSignatures[i] = ops.OP_0
17650 }
17651 } else {
17652 // Array.prototype.filter returns non-sparse array
17653 msSignatures = msSignatures.filter(function (x) { return x })
17654 }
17655
17656 var redeemScript = allowIncomplete ? undefined : input.redeemScript
17657 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
17658 break
17659 }
17660
17661 case 'pubkey': {
17662 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
17663 scriptSig = scripts.pubKeyInput(pkSignature)
17664 break
17665 }
17666 }
17667 }
17668
17669 // did we build a scriptSig?
17670 if (scriptSig) {
17671 // wrap as scriptHash if necessary
17672 if (input.prevOutType === 'scripthash') {
17673 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
17674 }
17675
17676 tx.setInputScript(index, scriptSig)
17677 }
17678 })
17679
17680 return tx
17681 }
17682
17683 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
17684 assert(index in this.inputs, 'No input at index: ' + index)
17685 hashType = hashType || Transaction.SIGHASH_ALL
17686
17687 var input = this.inputs[index]
17688 var canSign = input.hashType &&
17689 input.prevOutScript &&
17690 input.prevOutType &&
17691 input.pubKeys &&
17692 input.scriptType &&
17693 input.signatures
17694
17695 // are we almost ready to sign?
17696 if (canSign) {
17697 // if redeemScript was provided, enforce consistency
17698 if (redeemScript) {
17699 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
17700 }
17701
17702 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
17703
17704 // no? prepare
17705 } else {
17706 // must be pay-to-scriptHash?
17707 if (redeemScript) {
17708 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
17709 if (input.prevOutScript) {
17710 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
17711
17712 var scriptHash = input.prevOutScript.chunks[1]
17713 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
17714 }
17715
17716 var scriptType = scripts.classifyOutput(redeemScript)
17717 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
17718
17719 var pubKeys = []
17720 switch (scriptType) {
17721 case 'multisig': {
17722 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17723 break
17724 }
17725
17726 case 'pubkeyhash': {
17727 var pkh1 = redeemScript.chunks[2]
17728 var pkh2 = privKey.pub.getAddress().hash
17729
17730 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
17731 pubKeys = [privKey.pub]
17732 break
17733 }
17734
17735 case 'pubkey': {
17736 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17737 break
17738 }
17739 }
17740
17741 if (!input.prevOutScript) {
17742 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17743 input.prevOutType = 'scripthash'
17744 }
17745
17746 input.pubKeys = pubKeys
17747 input.redeemScript = redeemScript
17748 input.scriptType = scriptType
17749
17750 // cannot be pay-to-scriptHash
17751 } else {
17752 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
17753
17754 // can we otherwise sign this?
17755 if (input.scriptType) {
17756 assert(input.pubKeys, input.scriptType + ' not supported')
17757
17758 // we know nothin' Jon Snow, assume pubKeyHash
17759 } else {
17760 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
17761 input.prevOutType = 'pubkeyhash'
17762 input.pubKeys = [privKey.pub]
17763 input.scriptType = input.prevOutType
17764 }
17765 }
17766
17767 input.hashType = hashType
17768 input.signatures = input.signatures || []
17769 }
17770
17771 var signatureScript = input.redeemScript || input.prevOutScript
17772 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
17773
17774 // enforce signature order matches public keys
17775 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
17776 // maintain a local copy of unmatched signatures
17777 var unmatched = input.signatures.slice()
17778
17779 input.signatures = input.pubKeys.map(function (pubKey) {
17780 var match
17781
17782 // check for any matching signatures
17783 unmatched.some(function (signature, i) {
17784 if (!pubKey.verify(signatureHash, signature)) return false
17785 match = signature
17786
17787 // remove matched signature from unmatched
17788 unmatched.splice(i, 1)
17789
17790 return true
17791 })
17792
17793 return match || undefined
17794 })
17795 }
17796
17797 // enforce in order signing of public keys
17798 assert(input.pubKeys.some(function (pubKey, i) {
17799 if (!privKey.pub.Q.equals(pubKey.Q)) return false
17800
17801 assert(!input.signatures[i], 'Signature already exists')
17802 var signature = privKey.sign(signatureHash)
17803 input.signatures[i] = signature
17804
17805 return true
17806 }, this), 'privateKey cannot sign for this input')
17807 }
17808
17809 module.exports = TransactionBuilder
17810
17811 }).call(this,require("buffer").Buffer)
17812 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
17813 (function (Buffer){
17814 var assert = require('assert')
17815 var bufferutils = require('./bufferutils')
17816 var typeForce = require('typeforce')
17817 var networks = require('./networks')
17818 var randomBytes = require('randombytes')
17819
17820 var Address = require('./address')
17821 var HDNode = require('./hdnode')
17822 var TransactionBuilder = require('./transaction_builder')
17823 var Script = require('./script')
17824
17825 function Wallet (seed, network) {
17826 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
17827
17828 seed = seed || randomBytes(32)
17829 network = network || networks.bitcoin
17830
17831 // Stored in a closure to make accidental serialization less likely
17832 var masterKey = HDNode.fromSeedBuffer(seed, network)
17833
17834 // HD first-level child derivation method should be hardened
17835 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
17836 var accountZero = masterKey.deriveHardened(0)
17837 var externalAccount = accountZero.derive(0)
17838 var internalAccount = accountZero.derive(1)
17839
17840 this.addresses = []
17841 this.changeAddresses = []
17842 this.network = network
17843 this.unspents = []
17844
17845 // FIXME: remove in 2.0.0
17846 this.unspentMap = {}
17847
17848 // FIXME: remove in 2.0.0
17849 var me = this
17850 this.newMasterKey = function (seed) {
17851 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
17852
17853 seed = seed || randomBytes(32)
17854 masterKey = HDNode.fromSeedBuffer(seed, network)
17855
17856 accountZero = masterKey.deriveHardened(0)
17857 externalAccount = accountZero.derive(0)
17858 internalAccount = accountZero.derive(1)
17859
17860 me.addresses = []
17861 me.changeAddresses = []
17862
17863 me.unspents = []
17864 me.unspentMap = {}
17865 }
17866
17867 this.getMasterKey = function () {
17868 return masterKey
17869 }
17870 this.getAccountZero = function () {
17871 return accountZero
17872 }
17873 this.getExternalAccount = function () {
17874 return externalAccount
17875 }
17876 this.getInternalAccount = function () {
17877 return internalAccount
17878 }
17879 }
17880
17881 Wallet.prototype.createTransaction = function (to, value, options) {
17882 // FIXME: remove in 2.0.0
17883 if (typeof options !== 'object') {
17884 if (options !== undefined) {
17885 console.warn('Non options object parameters are deprecated, use options object instead')
17886
17887 options = {
17888 fixedFee: arguments[2],
17889 changeAddress: arguments[3]
17890 }
17891 }
17892 }
17893
17894 options = options || {}
17895
17896 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
17897
17898 var changeAddress = options.changeAddress
17899 var fixedFee = options.fixedFee
17900 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
17901
17902 // filter by minConf, then pending and sort by descending value
17903 var unspents = this.unspents.filter(function (unspent) {
17904 return unspent.confirmations >= minConf
17905 }).filter(function (unspent) {
17906 return !unspent.pending
17907 }).sort(function (o1, o2) {
17908 return o2.value - o1.value
17909 })
17910
17911 var accum = 0
17912 var addresses = []
17913 var subTotal = value
17914
17915 var txb = new TransactionBuilder()
17916 txb.addOutput(to, value)
17917
17918 for (var i = 0; i < unspents.length; ++i) {
17919 var unspent = unspents[i]
17920 addresses.push(unspent.address)
17921
17922 txb.addInput(unspent.txHash, unspent.index)
17923
17924 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
17925
17926 accum += unspent.value
17927 subTotal = value + fee
17928
17929 if (accum >= subTotal) {
17930 var change = accum - subTotal
17931
17932 if (change > this.network.dustThreshold) {
17933 txb.addOutput(changeAddress || this.getChangeAddress(), change)
17934 }
17935
17936 break
17937 }
17938 }
17939
17940 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
17941
17942 return this.signWith(txb, addresses).build()
17943 }
17944
17945 // FIXME: remove in 2.0.0
17946 Wallet.prototype.processPendingTx = function (tx) {
17947 this.__processTx(tx, true)
17948 }
17949
17950 // FIXME: remove in 2.0.0
17951 Wallet.prototype.processConfirmedTx = function (tx) {
17952 this.__processTx(tx, false)
17953 }
17954
17955 // FIXME: remove in 2.0.0
17956 Wallet.prototype.__processTx = function (tx, isPending) {
17957 console.warn('processTransaction is considered harmful, see issue #260 for more information')
17958
17959 var txId = tx.getId()
17960 var txHash = tx.getHash()
17961
17962 tx.outs.forEach(function (txOut, i) {
17963 var address
17964
17965 try {
17966 address = Address.fromOutputScript(txOut.script, this.network).toString()
17967 } catch (e) {
17968 if (!(e.message.match(/has no matching Address/)))
17969 throw e
17970 }
17971
17972 var myAddresses = this.addresses.concat(this.changeAddresses)
17973 if (myAddresses.indexOf(address) > -1) {
17974 var lookup = txId + ':' + i
17975 if (lookup in this.unspentMap) return
17976
17977 // its unique, add it
17978 var unspent = {
17979 address: address,
17980 confirmations: 0, // no way to determine this without more information
17981 index: i,
17982 txHash: txHash,
17983 txId: txId,
17984 value: txOut.value,
17985 pending: isPending
17986 }
17987
17988 this.unspentMap[lookup] = unspent
17989 this.unspents.push(unspent)
17990 }
17991 }, this)
17992
17993 tx.ins.forEach(function (txIn) {
17994 // copy and convert to big-endian hex
17995 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
17996
17997 var lookup = txInId + ':' + txIn.index
17998 if (!(lookup in this.unspentMap)) return
17999
18000 var unspent = this.unspentMap[lookup]
18001
18002 if (isPending) {
18003 unspent.pending = true
18004 unspent.spent = true
18005 } else {
18006 delete this.unspentMap[lookup]
18007
18008 this.unspents = this.unspents.filter(function (unspent2) {
18009 return unspent !== unspent2
18010 })
18011 }
18012 }, this)
18013 }
18014
18015 Wallet.prototype.generateAddress = function () {
18016 var k = this.addresses.length
18017 var address = this.getExternalAccount().derive(k).getAddress()
18018
18019 this.addresses.push(address.toString())
18020
18021 return this.getReceiveAddress()
18022 }
18023
18024 Wallet.prototype.generateChangeAddress = function () {
18025 var k = this.changeAddresses.length
18026 var address = this.getInternalAccount().derive(k).getAddress()
18027
18028 this.changeAddresses.push(address.toString())
18029
18030 return this.getChangeAddress()
18031 }
18032
18033 Wallet.prototype.getAddress = function () {
18034 if (this.addresses.length === 0) {
18035 this.generateAddress()
18036 }
18037
18038 return this.addresses[this.addresses.length - 1]
18039 }
18040
18041 Wallet.prototype.getBalance = function (minConf) {
18042 minConf = minConf || 0
18043
18044 return this.unspents.filter(function (unspent) {
18045 return unspent.confirmations >= minConf
18046
18047 // FIXME: remove spent filter in 2.0.0
18048 }).filter(function (unspent) {
18049 return !unspent.spent
18050 }).reduce(function (accum, unspent) {
18051 return accum + unspent.value
18052 }, 0)
18053 }
18054
18055 Wallet.prototype.getChangeAddress = function () {
18056 if (this.changeAddresses.length === 0) {
18057 this.generateChangeAddress()
18058 }
18059
18060 return this.changeAddresses[this.changeAddresses.length - 1]
18061 }
18062
18063 Wallet.prototype.getInternalPrivateKey = function (index) {
18064 return this.getInternalAccount().derive(index).privKey
18065 }
18066
18067 Wallet.prototype.getPrivateKey = function (index) {
18068 return this.getExternalAccount().derive(index).privKey
18069 }
18070
18071 Wallet.prototype.getPrivateKeyForAddress = function (address) {
18072 var index
18073
18074 if ((index = this.addresses.indexOf(address)) > -1) {
18075 return this.getPrivateKey(index)
18076 }
18077
18078 if ((index = this.changeAddresses.indexOf(address)) > -1) {
18079 return this.getInternalPrivateKey(index)
18080 }
18081
18082 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
18083 }
18084
18085 Wallet.prototype.getUnspentOutputs = function (minConf) {
18086 minConf = minConf || 0
18087
18088 return this.unspents.filter(function (unspent) {
18089 return unspent.confirmations >= minConf
18090
18091 // FIXME: remove spent filter in 2.0.0
18092 }).filter(function (unspent) {
18093 return !unspent.spent
18094 }).map(function (unspent) {
18095 return {
18096 address: unspent.address,
18097 confirmations: unspent.confirmations,
18098 index: unspent.index,
18099 txId: unspent.txId,
18100 value: unspent.value,
18101
18102 // FIXME: remove in 2.0.0
18103 hash: unspent.txId,
18104 pending: unspent.pending
18105 }
18106 })
18107 }
18108
18109 Wallet.prototype.setUnspentOutputs = function (unspents) {
18110 this.unspentMap = {}
18111 this.unspents = unspents.map(function (unspent) {
18112 // FIXME: remove unspent.hash in 2.0.0
18113 var txId = unspent.txId || unspent.hash
18114 var index = unspent.index
18115
18116 // FIXME: remove in 2.0.0
18117 if (unspent.hash !== undefined) {
18118 console.warn('unspent.hash is deprecated, use unspent.txId instead')
18119 }
18120
18121 // FIXME: remove in 2.0.0
18122 if (index === undefined) {
18123 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
18124 index = unspent.outputIndex
18125 }
18126
18127 typeForce('String', txId)
18128 typeForce('Number', index)
18129 typeForce('Number', unspent.value)
18130
18131 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
18132 assert.doesNotThrow(function () {
18133 Address.fromBase58Check(unspent.address)
18134 }, 'Expected Base58 Address, got ' + unspent.address)
18135 assert(isFinite(index), 'Expected finite index, got ' + index)
18136
18137 // FIXME: remove branch in 2.0.0
18138 if (unspent.confirmations !== undefined) {
18139 typeForce('Number', unspent.confirmations)
18140 }
18141
18142 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
18143
18144 unspent = {
18145 address: unspent.address,
18146 confirmations: unspent.confirmations || 0,
18147 index: index,
18148 txHash: txHash,
18149 txId: txId,
18150 value: unspent.value,
18151
18152 // FIXME: remove in 2.0.0
18153 pending: unspent.pending || false
18154 }
18155
18156 // FIXME: remove in 2.0.0
18157 this.unspentMap[txId + ':' + index] = unspent
18158
18159 return unspent
18160 }, this)
18161 }
18162
18163 Wallet.prototype.signWith = function (tx, addresses) {
18164 addresses.forEach(function (address, i) {
18165 var privKey = this.getPrivateKeyForAddress(address)
18166
18167 tx.sign(i, privKey)
18168 }, this)
18169
18170 return tx
18171 }
18172
18173 function estimatePaddedFee (tx, network) {
18174 var tmpTx = tx.clone()
18175 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
18176
18177 return network.estimateFee(tmpTx)
18178 }
18179
18180 // FIXME: 1.0.0 shims, remove in 2.0.0
18181 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
18182 Wallet.prototype.createTx = Wallet.prototype.createTransaction
18183
18184 module.exports = Wallet
18185
18186 }).call(this,require("buffer").Buffer)
18187 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
18188 });</script>
18189 <script>bitcoin.networks.shadow = {
18190 magicPrefix: '\x19ShadowCash Signed Message:\n',
18191 bip32: {
18192 public: 0xEE80286A,
18193 private: 0xEE8031E8
18194 },
18195 pubKeyHash: 0x3f,
18196 scriptHash: 0x7d,
18197 wif: 0xbf,
18198 dustThreshold: 0,
18199 feePerKb: 1000,
18200 estimateFee: function() { return "unused in this app" },
18201 };
18202
18203 bitcoin.networks.shadowtn = {
18204 magicPrefix: '\x19ShadowCash Signed Message:\n',
18205 bip32: {
18206 public: 0x76C0FDFB,
18207 private: 0x76C1077A
18208 },
18209 pubKeyHash: 0x7f,
18210 scriptHash: 0xc4,
18211 wif: 0xff,
18212 dustThreshold: 0,
18213 feePerKb: 1000,
18214 estimateFee: function() { return "unused in this app" },
18215 };
18216
18217 bitcoin.networks.clam = {
18218 bip32: {
18219 public: 0xa8c26d64,
18220 private: 0xa8c17826
18221 },
18222 pubKeyHash: 0x89,
18223 wif: 0x85,
18224 };
18225
18226 bitcoin.networks.dash = {
18227 bip32: {
18228 public: 0x0488b21e,
18229 private: 0x0488ade4
18230 },
18231 pubKeyHash: 0x4c,
18232 scriptHash: 0x10,
18233 wif: 0xcc,
18234 };
18235
18236 bitcoin.networks.game = {
18237 bip32: {
18238 public: 0x0488b21e,
18239 private: 0x0488ade4
18240 },
18241 pubKeyHash: 0x26,
18242 scriptHash: 0x05,
18243 wif: 0xa6,
18244 };
18245
18246 bitcoin.networks.namecoin = {
18247 bip32: {
18248 public: 0x0488b21e,
18249 private: 0x0488ade4
18250 },
18251 pubKeyHash: 0x34,
18252 //scriptHash: 0x10,
18253 wif: 0x80,
18254 };
18255
18256 bitcoin.networks.peercoin = {
18257 bip32: {
18258 public: 0x0488b21e,
18259 private: 0x0488ade4
18260 },
18261 pubKeyHash: 0x37,
18262 //scriptHash: 0x10,
18263 wif: 0xb7,
18264 };
18265
18266 </script>
18267 <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){
18268 (function (global){
18269 'use strict';
18270
18271 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
18272 // original notice:
18273
18274 /*!
18275 * The buffer module from node.js, for the browser.
18276 *
18277 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18278 * @license MIT
18279 */
18280 function compare(a, b) {
18281 if (a === b) {
18282 return 0;
18283 }
18284
18285 var x = a.length;
18286 var y = b.length;
18287
18288 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
18289 if (a[i] !== b[i]) {
18290 x = a[i];
18291 y = b[i];
18292 break;
18293 }
18294 }
18295
18296 if (x < y) {
18297 return -1;
18298 }
18299 if (y < x) {
18300 return 1;
18301 }
18302 return 0;
18303 }
18304 function isBuffer(b) {
18305 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
18306 return global.Buffer.isBuffer(b);
18307 }
18308 return !!(b != null && b._isBuffer);
18309 }
18310
18311 // based on node assert, original notice:
18312
18313 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
18314 //
18315 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
18316 //
18317 // Originally from narwhal.js (http://narwhaljs.org)
18318 // Copyright (c) 2009 Thomas Robinson <280north.com>
18319 //
18320 // Permission is hereby granted, free of charge, to any person obtaining a copy
18321 // of this software and associated documentation files (the 'Software'), to
18322 // deal in the Software without restriction, including without limitation the
18323 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18324 // sell copies of the Software, and to permit persons to whom the Software is
18325 // furnished to do so, subject to the following conditions:
18326 //
18327 // The above copyright notice and this permission notice shall be included in
18328 // all copies or substantial portions of the Software.
18329 //
18330 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18331 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18332 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18333 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18334 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18335 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18336
18337 var util = require('util/');
18338 var hasOwn = Object.prototype.hasOwnProperty;
18339 var pSlice = Array.prototype.slice;
18340 var functionsHaveNames = (function () {
18341 return function foo() {}.name === 'foo';
18342 }());
18343 function pToString (obj) {
18344 return Object.prototype.toString.call(obj);
18345 }
18346 function isView(arrbuf) {
18347 if (isBuffer(arrbuf)) {
18348 return false;
18349 }
18350 if (typeof global.ArrayBuffer !== 'function') {
18351 return false;
18352 }
18353 if (typeof ArrayBuffer.isView === 'function') {
18354 return ArrayBuffer.isView(arrbuf);
18355 }
18356 if (!arrbuf) {
18357 return false;
18358 }
18359 if (arrbuf instanceof DataView) {
18360 return true;
18361 }
18362 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
18363 return true;
18364 }
18365 return false;
18366 }
18367 // 1. The assert module provides functions that throw
18368 // AssertionError's when particular conditions are not met. The
18369 // assert module must conform to the following interface.
18370
18371 var assert = module.exports = ok;
18372
18373 // 2. The AssertionError is defined in assert.
18374 // new assert.AssertionError({ message: message,
18375 // actual: actual,
18376 // expected: expected })
18377
18378 var regex = /\s*function\s+([^\(\s]*)\s*/;
18379 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
18380 function getName(func) {
18381 if (!util.isFunction(func)) {
18382 return;
18383 }
18384 if (functionsHaveNames) {
18385 return func.name;
18386 }
18387 var str = func.toString();
18388 var match = str.match(regex);
18389 return match && match[1];
18390 }
18391 assert.AssertionError = function AssertionError(options) {
18392 this.name = 'AssertionError';
18393 this.actual = options.actual;
18394 this.expected = options.expected;
18395 this.operator = options.operator;
18396 if (options.message) {
18397 this.message = options.message;
18398 this.generatedMessage = false;
18399 } else {
18400 this.message = getMessage(this);
18401 this.generatedMessage = true;
18402 }
18403 var stackStartFunction = options.stackStartFunction || fail;
18404 if (Error.captureStackTrace) {
18405 Error.captureStackTrace(this, stackStartFunction);
18406 } else {
18407 // non v8 browsers so we can have a stacktrace
18408 var err = new Error();
18409 if (err.stack) {
18410 var out = err.stack;
18411
18412 // try to strip useless frames
18413 var fn_name = getName(stackStartFunction);
18414 var idx = out.indexOf('\n' + fn_name);
18415 if (idx >= 0) {
18416 // once we have located the function frame
18417 // we need to strip out everything before it (and its line)
18418 var next_line = out.indexOf('\n', idx + 1);
18419 out = out.substring(next_line + 1);
18420 }
18421
18422 this.stack = out;
18423 }
18424 }
18425 };
18426
18427 // assert.AssertionError instanceof Error
18428 util.inherits(assert.AssertionError, Error);
18429
18430 function truncate(s, n) {
18431 if (typeof s === 'string') {
18432 return s.length < n ? s : s.slice(0, n);
18433 } else {
18434 return s;
18435 }
18436 }
18437 function inspect(something) {
18438 if (functionsHaveNames || !util.isFunction(something)) {
18439 return util.inspect(something);
18440 }
18441 var rawname = getName(something);
18442 var name = rawname ? ': ' + rawname : '';
18443 return '[Function' + name + ']';
18444 }
18445 function getMessage(self) {
18446 return truncate(inspect(self.actual), 128) + ' ' +
18447 self.operator + ' ' +
18448 truncate(inspect(self.expected), 128);
18449 }
18450
18451 // At present only the three keys mentioned above are used and
18452 // understood by the spec. Implementations or sub modules can pass
18453 // other keys to the AssertionError's constructor - they will be
18454 // ignored.
18455
18456 // 3. All of the following functions must throw an AssertionError
18457 // when a corresponding condition is not met, with a message that
18458 // may be undefined if not provided. All assertion methods provide
18459 // both the actual and expected values to the assertion error for
18460 // display purposes.
18461
18462 function fail(actual, expected, message, operator, stackStartFunction) {
18463 throw new assert.AssertionError({
18464 message: message,
18465 actual: actual,
18466 expected: expected,
18467 operator: operator,
18468 stackStartFunction: stackStartFunction
18469 });
18470 }
18471
18472 // EXTENSION! allows for well behaved errors defined elsewhere.
18473 assert.fail = fail;
18474
18475 // 4. Pure assertion tests whether a value is truthy, as determined
18476 // by !!guard.
18477 // assert.ok(guard, message_opt);
18478 // This statement is equivalent to assert.equal(true, !!guard,
18479 // message_opt);. To test strictly for the value true, use
18480 // assert.strictEqual(true, guard, message_opt);.
18481
18482 function ok(value, message) {
18483 if (!value) fail(value, true, message, '==', assert.ok);
18484 }
18485 assert.ok = ok;
18486
18487 // 5. The equality assertion tests shallow, coercive equality with
18488 // ==.
18489 // assert.equal(actual, expected, message_opt);
18490
18491 assert.equal = function equal(actual, expected, message) {
18492 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
18493 };
18494
18495 // 6. The non-equality assertion tests for whether two objects are not equal
18496 // with != assert.notEqual(actual, expected, message_opt);
18497
18498 assert.notEqual = function notEqual(actual, expected, message) {
18499 if (actual == expected) {
18500 fail(actual, expected, message, '!=', assert.notEqual);
18501 }
18502 };
18503
18504 // 7. The equivalence assertion tests a deep equality relation.
18505 // assert.deepEqual(actual, expected, message_opt);
18506
18507 assert.deepEqual = function deepEqual(actual, expected, message) {
18508 if (!_deepEqual(actual, expected, false)) {
18509 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
18510 }
18511 };
18512
18513 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
18514 if (!_deepEqual(actual, expected, true)) {
18515 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
18516 }
18517 };
18518
18519 function _deepEqual(actual, expected, strict, memos) {
18520 // 7.1. All identical values are equivalent, as determined by ===.
18521 if (actual === expected) {
18522 return true;
18523 } else if (isBuffer(actual) && isBuffer(expected)) {
18524 return compare(actual, expected) === 0;
18525
18526 // 7.2. If the expected value is a Date object, the actual value is
18527 // equivalent if it is also a Date object that refers to the same time.
18528 } else if (util.isDate(actual) && util.isDate(expected)) {
18529 return actual.getTime() === expected.getTime();
18530
18531 // 7.3 If the expected value is a RegExp object, the actual value is
18532 // equivalent if it is also a RegExp object with the same source and
18533 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
18534 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
18535 return actual.source === expected.source &&
18536 actual.global === expected.global &&
18537 actual.multiline === expected.multiline &&
18538 actual.lastIndex === expected.lastIndex &&
18539 actual.ignoreCase === expected.ignoreCase;
18540
18541 // 7.4. Other pairs that do not both pass typeof value == 'object',
18542 // equivalence is determined by ==.
18543 } else if ((actual === null || typeof actual !== 'object') &&
18544 (expected === null || typeof expected !== 'object')) {
18545 return strict ? actual === expected : actual == expected;
18546
18547 // If both values are instances of typed arrays, wrap their underlying
18548 // ArrayBuffers in a Buffer each to increase performance
18549 // This optimization requires the arrays to have the same type as checked by
18550 // Object.prototype.toString (aka pToString). Never perform binary
18551 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
18552 // bit patterns are not identical.
18553 } else if (isView(actual) && isView(expected) &&
18554 pToString(actual) === pToString(expected) &&
18555 !(actual instanceof Float32Array ||
18556 actual instanceof Float64Array)) {
18557 return compare(new Uint8Array(actual.buffer),
18558 new Uint8Array(expected.buffer)) === 0;
18559
18560 // 7.5 For all other Object pairs, including Array objects, equivalence is
18561 // determined by having the same number of owned properties (as verified
18562 // with Object.prototype.hasOwnProperty.call), the same set of keys
18563 // (although not necessarily the same order), equivalent values for every
18564 // corresponding key, and an identical 'prototype' property. Note: this
18565 // accounts for both named and indexed properties on Arrays.
18566 } else if (isBuffer(actual) !== isBuffer(expected)) {
18567 return false;
18568 } else {
18569 memos = memos || {actual: [], expected: []};
18570
18571 var actualIndex = memos.actual.indexOf(actual);
18572 if (actualIndex !== -1) {
18573 if (actualIndex === memos.expected.indexOf(expected)) {
18574 return true;
18575 }
18576 }
18577
18578 memos.actual.push(actual);
18579 memos.expected.push(expected);
18580
18581 return objEquiv(actual, expected, strict, memos);
18582 }
18583 }
18584
18585 function isArguments(object) {
18586 return Object.prototype.toString.call(object) == '[object Arguments]';
18587 }
18588
18589 function objEquiv(a, b, strict, actualVisitedObjects) {
18590 if (a === null || a === undefined || b === null || b === undefined)
18591 return false;
18592 // if one is a primitive, the other must be same
18593 if (util.isPrimitive(a) || util.isPrimitive(b))
18594 return a === b;
18595 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
18596 return false;
18597 var aIsArgs = isArguments(a);
18598 var bIsArgs = isArguments(b);
18599 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
18600 return false;
18601 if (aIsArgs) {
18602 a = pSlice.call(a);
18603 b = pSlice.call(b);
18604 return _deepEqual(a, b, strict);
18605 }
18606 var ka = objectKeys(a);
18607 var kb = objectKeys(b);
18608 var key, i;
18609 // having the same number of owned properties (keys incorporates
18610 // hasOwnProperty)
18611 if (ka.length !== kb.length)
18612 return false;
18613 //the same set of keys (although not necessarily the same order),
18614 ka.sort();
18615 kb.sort();
18616 //~~~cheap key test
18617 for (i = ka.length - 1; i >= 0; i--) {
18618 if (ka[i] !== kb[i])
18619 return false;
18620 }
18621 //equivalent values for every corresponding key, and
18622 //~~~possibly expensive deep test
18623 for (i = ka.length - 1; i >= 0; i--) {
18624 key = ka[i];
18625 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
18626 return false;
18627 }
18628 return true;
18629 }
18630
18631 // 8. The non-equivalence assertion tests for any deep inequality.
18632 // assert.notDeepEqual(actual, expected, message_opt);
18633
18634 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
18635 if (_deepEqual(actual, expected, false)) {
18636 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
18637 }
18638 };
18639
18640 assert.notDeepStrictEqual = notDeepStrictEqual;
18641 function notDeepStrictEqual(actual, expected, message) {
18642 if (_deepEqual(actual, expected, true)) {
18643 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
18644 }
18645 }
18646
18647
18648 // 9. The strict equality assertion tests strict equality, as determined by ===.
18649 // assert.strictEqual(actual, expected, message_opt);
18650
18651 assert.strictEqual = function strictEqual(actual, expected, message) {
18652 if (actual !== expected) {
18653 fail(actual, expected, message, '===', assert.strictEqual);
18654 }
18655 };
18656
18657 // 10. The strict non-equality assertion tests for strict inequality, as
18658 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
18659
18660 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
18661 if (actual === expected) {
18662 fail(actual, expected, message, '!==', assert.notStrictEqual);
18663 }
18664 };
18665
18666 function expectedException(actual, expected) {
18667 if (!actual || !expected) {
18668 return false;
18669 }
18670
18671 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
18672 return expected.test(actual);
18673 }
18674
18675 try {
18676 if (actual instanceof expected) {
18677 return true;
18678 }
18679 } catch (e) {
18680 // Ignore. The instanceof check doesn't work for arrow functions.
18681 }
18682
18683 if (Error.isPrototypeOf(expected)) {
18684 return false;
18685 }
18686
18687 return expected.call({}, actual) === true;
18688 }
18689
18690 function _tryBlock(block) {
18691 var error;
18692 try {
18693 block();
18694 } catch (e) {
18695 error = e;
18696 }
18697 return error;
18698 }
18699
18700 function _throws(shouldThrow, block, expected, message) {
18701 var actual;
18702
18703 if (typeof block !== 'function') {
18704 throw new TypeError('"block" argument must be a function');
18705 }
18706
18707 if (typeof expected === 'string') {
18708 message = expected;
18709 expected = null;
18710 }
18711
18712 actual = _tryBlock(block);
18713
18714 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
18715 (message ? ' ' + message : '.');
18716
18717 if (shouldThrow && !actual) {
18718 fail(actual, expected, 'Missing expected exception' + message);
18719 }
18720
18721 var userProvidedMessage = typeof message === 'string';
18722 var isUnwantedException = !shouldThrow && util.isError(actual);
18723 var isUnexpectedException = !shouldThrow && actual && !expected;
18724
18725 if ((isUnwantedException &&
18726 userProvidedMessage &&
18727 expectedException(actual, expected)) ||
18728 isUnexpectedException) {
18729 fail(actual, expected, 'Got unwanted exception' + message);
18730 }
18731
18732 if ((shouldThrow && actual && expected &&
18733 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
18734 throw actual;
18735 }
18736 }
18737
18738 // 11. Expected to throw an error:
18739 // assert.throws(block, Error_opt, message_opt);
18740
18741 assert.throws = function(block, /*optional*/error, /*optional*/message) {
18742 _throws(true, block, error, message);
18743 };
18744
18745 // EXTENSION! This is annoying to write outside this module.
18746 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
18747 _throws(false, block, error, message);
18748 };
18749
18750 assert.ifError = function(err) { if (err) throw err; };
18751
18752 var objectKeys = Object.keys || function (obj) {
18753 var keys = [];
18754 for (var key in obj) {
18755 if (hasOwn.call(obj, key)) keys.push(key);
18756 }
18757 return keys;
18758 };
18759
18760 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18761 },{"util/":30}],2:[function(require,module,exports){
18762 'use strict'
18763
18764 exports.byteLength = byteLength
18765 exports.toByteArray = toByteArray
18766 exports.fromByteArray = fromByteArray
18767
18768 var lookup = []
18769 var revLookup = []
18770 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
18771
18772 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
18773 for (var i = 0, len = code.length; i < len; ++i) {
18774 lookup[i] = code[i]
18775 revLookup[code.charCodeAt(i)] = i
18776 }
18777
18778 revLookup['-'.charCodeAt(0)] = 62
18779 revLookup['_'.charCodeAt(0)] = 63
18780
18781 function placeHoldersCount (b64) {
18782 var len = b64.length
18783 if (len % 4 > 0) {
18784 throw new Error('Invalid string. Length must be a multiple of 4')
18785 }
18786
18787 // the number of equal signs (place holders)
18788 // if there are two placeholders, than the two characters before it
18789 // represent one byte
18790 // if there is only one, then the three characters before it represent 2 bytes
18791 // this is just a cheap hack to not do indexOf twice
18792 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
18793 }
18794
18795 function byteLength (b64) {
18796 // base64 is 4/3 + up to two characters of the original data
18797 return b64.length * 3 / 4 - placeHoldersCount(b64)
18798 }
18799
18800 function toByteArray (b64) {
18801 var i, j, l, tmp, placeHolders, arr
18802 var len = b64.length
18803 placeHolders = placeHoldersCount(b64)
18804
18805 arr = new Arr(len * 3 / 4 - placeHolders)
18806
18807 // if there are placeholders, only get up to the last complete 4 chars
18808 l = placeHolders > 0 ? len - 4 : len
18809
18810 var L = 0
18811
18812 for (i = 0, j = 0; i < l; i += 4, j += 3) {
18813 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
18814 arr[L++] = (tmp >> 16) & 0xFF
18815 arr[L++] = (tmp >> 8) & 0xFF
18816 arr[L++] = tmp & 0xFF
18817 }
18818
18819 if (placeHolders === 2) {
18820 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
18821 arr[L++] = tmp & 0xFF
18822 } else if (placeHolders === 1) {
18823 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
18824 arr[L++] = (tmp >> 8) & 0xFF
18825 arr[L++] = tmp & 0xFF
18826 }
18827
18828 return arr
18829 }
18830
18831 function tripletToBase64 (num) {
18832 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
18833 }
18834
18835 function encodeChunk (uint8, start, end) {
18836 var tmp
18837 var output = []
18838 for (var i = start; i < end; i += 3) {
18839 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
18840 output.push(tripletToBase64(tmp))
18841 }
18842 return output.join('')
18843 }
18844
18845 function fromByteArray (uint8) {
18846 var tmp
18847 var len = uint8.length
18848 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
18849 var output = ''
18850 var parts = []
18851 var maxChunkLength = 16383 // must be multiple of 3
18852
18853 // go through the array every three bytes, we'll deal with trailing stuff later
18854 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
18855 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
18856 }
18857
18858 // pad the end with zeros, but make sure to not forget the extra bytes
18859 if (extraBytes === 1) {
18860 tmp = uint8[len - 1]
18861 output += lookup[tmp >> 2]
18862 output += lookup[(tmp << 4) & 0x3F]
18863 output += '=='
18864 } else if (extraBytes === 2) {
18865 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
18866 output += lookup[tmp >> 10]
18867 output += lookup[(tmp >> 4) & 0x3F]
18868 output += lookup[(tmp << 2) & 0x3F]
18869 output += '='
18870 }
18871
18872 parts.push(output)
18873
18874 return parts.join('')
18875 }
18876
18877 },{}],3:[function(require,module,exports){
18878
18879 },{}],4:[function(require,module,exports){
18880 (function (global){
18881 'use strict';
18882
18883 var buffer = require('buffer');
18884 var Buffer = buffer.Buffer;
18885 var SlowBuffer = buffer.SlowBuffer;
18886 var MAX_LEN = buffer.kMaxLength || 2147483647;
18887 exports.alloc = function alloc(size, fill, encoding) {
18888 if (typeof Buffer.alloc === 'function') {
18889 return Buffer.alloc(size, fill, encoding);
18890 }
18891 if (typeof encoding === 'number') {
18892 throw new TypeError('encoding must not be number');
18893 }
18894 if (typeof size !== 'number') {
18895 throw new TypeError('size must be a number');
18896 }
18897 if (size > MAX_LEN) {
18898 throw new RangeError('size is too large');
18899 }
18900 var enc = encoding;
18901 var _fill = fill;
18902 if (_fill === undefined) {
18903 enc = undefined;
18904 _fill = 0;
18905 }
18906 var buf = new Buffer(size);
18907 if (typeof _fill === 'string') {
18908 var fillBuf = new Buffer(_fill, enc);
18909 var flen = fillBuf.length;
18910 var i = -1;
18911 while (++i < size) {
18912 buf[i] = fillBuf[i % flen];
18913 }
18914 } else {
18915 buf.fill(_fill);
18916 }
18917 return buf;
18918 }
18919 exports.allocUnsafe = function allocUnsafe(size) {
18920 if (typeof Buffer.allocUnsafe === 'function') {
18921 return Buffer.allocUnsafe(size);
18922 }
18923 if (typeof size !== 'number') {
18924 throw new TypeError('size must be a number');
18925 }
18926 if (size > MAX_LEN) {
18927 throw new RangeError('size is too large');
18928 }
18929 return new Buffer(size);
18930 }
18931 exports.from = function from(value, encodingOrOffset, length) {
18932 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
18933 return Buffer.from(value, encodingOrOffset, length);
18934 }
18935 if (typeof value === 'number') {
18936 throw new TypeError('"value" argument must not be a number');
18937 }
18938 if (typeof value === 'string') {
18939 return new Buffer(value, encodingOrOffset);
18940 }
18941 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
18942 var offset = encodingOrOffset;
18943 if (arguments.length === 1) {
18944 return new Buffer(value);
18945 }
18946 if (typeof offset === 'undefined') {
18947 offset = 0;
18948 }
18949 var len = length;
18950 if (typeof len === 'undefined') {
18951 len = value.byteLength - offset;
18952 }
18953 if (offset >= value.byteLength) {
18954 throw new RangeError('\'offset\' is out of bounds');
18955 }
18956 if (len > value.byteLength - offset) {
18957 throw new RangeError('\'length\' is out of bounds');
18958 }
18959 return new Buffer(value.slice(offset, offset + len));
18960 }
18961 if (Buffer.isBuffer(value)) {
18962 var out = new Buffer(value.length);
18963 value.copy(out, 0, 0, value.length);
18964 return out;
18965 }
18966 if (value) {
18967 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
18968 return new Buffer(value);
18969 }
18970 if (value.type === 'Buffer' && Array.isArray(value.data)) {
18971 return new Buffer(value.data);
18972 }
18973 }
18974
18975 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
18976 }
18977 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
18978 if (typeof Buffer.allocUnsafeSlow === 'function') {
18979 return Buffer.allocUnsafeSlow(size);
18980 }
18981 if (typeof size !== 'number') {
18982 throw new TypeError('size must be a number');
18983 }
18984 if (size >= MAX_LEN) {
18985 throw new RangeError('size is too large');
18986 }
18987 return new SlowBuffer(size);
18988 }
18989
18990 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18991 },{"buffer":5}],5:[function(require,module,exports){
18992 /*!
18993 * The buffer module from node.js, for the browser.
18994 *
18995 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18996 * @license MIT
18997 */
18998 /* eslint-disable no-proto */
18999
19000 'use strict'
19001
19002 var base64 = require('base64-js')
19003 var ieee754 = require('ieee754')
19004
19005 exports.Buffer = Buffer
19006 exports.SlowBuffer = SlowBuffer
19007 exports.INSPECT_MAX_BYTES = 50
19008
19009 var K_MAX_LENGTH = 0x7fffffff
19010 exports.kMaxLength = K_MAX_LENGTH
19011
19012 /**
19013 * If `Buffer.TYPED_ARRAY_SUPPORT`:
19014 * === true Use Uint8Array implementation (fastest)
19015 * === false Print warning and recommend using `buffer` v4.x which has an Object
19016 * implementation (most compatible, even IE6)
19017 *
19018 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
19019 * Opera 11.6+, iOS 4.2+.
19020 *
19021 * We report that the browser does not support typed arrays if the are not subclassable
19022 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
19023 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
19024 * for __proto__ and has a buggy typed array implementation.
19025 */
19026 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
19027
19028 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
19029 typeof console.error === 'function') {
19030 console.error(
19031 'This browser lacks typed array (Uint8Array) support which is required by ' +
19032 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
19033 )
19034 }
19035
19036 function typedArraySupport () {
19037 // Can typed array instances can be augmented?
19038 try {
19039 var arr = new Uint8Array(1)
19040 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
19041 return arr.foo() === 42
19042 } catch (e) {
19043 return false
19044 }
19045 }
19046
19047 function createBuffer (length) {
19048 if (length > K_MAX_LENGTH) {
19049 throw new RangeError('Invalid typed array length')
19050 }
19051 // Return an augmented `Uint8Array` instance
19052 var buf = new Uint8Array(length)
19053 buf.__proto__ = Buffer.prototype
19054 return buf
19055 }
19056
19057 /**
19058 * The Buffer constructor returns instances of `Uint8Array` that have their
19059 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
19060 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
19061 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
19062 * returns a single octet.
19063 *
19064 * The `Uint8Array` prototype remains unmodified.
19065 */
19066
19067 function Buffer (arg, encodingOrOffset, length) {
19068 // Common case.
19069 if (typeof arg === 'number') {
19070 if (typeof encodingOrOffset === 'string') {
19071 throw new Error(
19072 'If encoding is specified then the first argument must be a string'
19073 )
19074 }
19075 return allocUnsafe(arg)
19076 }
19077 return from(arg, encodingOrOffset, length)
19078 }
19079
19080 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
19081 if (typeof Symbol !== 'undefined' && Symbol.species &&
19082 Buffer[Symbol.species] === Buffer) {
19083 Object.defineProperty(Buffer, Symbol.species, {
19084 value: null,
19085 configurable: true,
19086 enumerable: false,
19087 writable: false
19088 })
19089 }
19090
19091 Buffer.poolSize = 8192 // not used by this implementation
19092
19093 function from (value, encodingOrOffset, length) {
19094 if (typeof value === 'number') {
19095 throw new TypeError('"value" argument must not be a number')
19096 }
19097
19098 if (value instanceof ArrayBuffer) {
19099 return fromArrayBuffer(value, encodingOrOffset, length)
19100 }
19101
19102 if (typeof value === 'string') {
19103 return fromString(value, encodingOrOffset)
19104 }
19105
19106 return fromObject(value)
19107 }
19108
19109 /**
19110 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
19111 * if value is a number.
19112 * Buffer.from(str[, encoding])
19113 * Buffer.from(array)
19114 * Buffer.from(buffer)
19115 * Buffer.from(arrayBuffer[, byteOffset[, length]])
19116 **/
19117 Buffer.from = function (value, encodingOrOffset, length) {
19118 return from(value, encodingOrOffset, length)
19119 }
19120
19121 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
19122 // https://github.com/feross/buffer/pull/148
19123 Buffer.prototype.__proto__ = Uint8Array.prototype
19124 Buffer.__proto__ = Uint8Array
19125
19126 function assertSize (size) {
19127 if (typeof size !== 'number') {
19128 throw new TypeError('"size" argument must be a number')
19129 } else if (size < 0) {
19130 throw new RangeError('"size" argument must not be negative')
19131 }
19132 }
19133
19134 function alloc (size, fill, encoding) {
19135 assertSize(size)
19136 if (size <= 0) {
19137 return createBuffer(size)
19138 }
19139 if (fill !== undefined) {
19140 // Only pay attention to encoding if it's a string. This
19141 // prevents accidentally sending in a number that would
19142 // be interpretted as a start offset.
19143 return typeof encoding === 'string'
19144 ? createBuffer(size).fill(fill, encoding)
19145 : createBuffer(size).fill(fill)
19146 }
19147 return createBuffer(size)
19148 }
19149
19150 /**
19151 * Creates a new filled Buffer instance.
19152 * alloc(size[, fill[, encoding]])
19153 **/
19154 Buffer.alloc = function (size, fill, encoding) {
19155 return alloc(size, fill, encoding)
19156 }
19157
19158 function allocUnsafe (size) {
19159 assertSize(size)
19160 return createBuffer(size < 0 ? 0 : checked(size) | 0)
19161 }
19162
19163 /**
19164 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
19165 * */
19166 Buffer.allocUnsafe = function (size) {
19167 return allocUnsafe(size)
19168 }
19169 /**
19170 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
19171 */
19172 Buffer.allocUnsafeSlow = function (size) {
19173 return allocUnsafe(size)
19174 }
19175
19176 function fromString (string, encoding) {
19177 if (typeof encoding !== 'string' || encoding === '') {
19178 encoding = 'utf8'
19179 }
19180
19181 if (!Buffer.isEncoding(encoding)) {
19182 throw new TypeError('"encoding" must be a valid string encoding')
19183 }
19184
19185 var length = byteLength(string, encoding) | 0
19186 var buf = createBuffer(length)
19187
19188 var actual = buf.write(string, encoding)
19189
19190 if (actual !== length) {
19191 // Writing a hex string, for example, that contains invalid characters will
19192 // cause everything after the first invalid character to be ignored. (e.g.
19193 // 'abxxcd' will be treated as 'ab')
19194 buf = buf.slice(0, actual)
19195 }
19196
19197 return buf
19198 }
19199
19200 function fromArrayLike (array) {
19201 var length = array.length < 0 ? 0 : checked(array.length) | 0
19202 var buf = createBuffer(length)
19203 for (var i = 0; i < length; i += 1) {
19204 buf[i] = array[i] & 255
19205 }
19206 return buf
19207 }
19208
19209 function fromArrayBuffer (array, byteOffset, length) {
19210 if (byteOffset < 0 || array.byteLength < byteOffset) {
19211 throw new RangeError('\'offset\' is out of bounds')
19212 }
19213
19214 if (array.byteLength < byteOffset + (length || 0)) {
19215 throw new RangeError('\'length\' is out of bounds')
19216 }
19217
19218 var buf
19219 if (byteOffset === undefined && length === undefined) {
19220 buf = new Uint8Array(array)
19221 } else if (length === undefined) {
19222 buf = new Uint8Array(array, byteOffset)
19223 } else {
19224 buf = new Uint8Array(array, byteOffset, length)
19225 }
19226
19227 // Return an augmented `Uint8Array` instance
19228 buf.__proto__ = Buffer.prototype
19229 return buf
19230 }
19231
19232 function fromObject (obj) {
19233 if (Buffer.isBuffer(obj)) {
19234 var len = checked(obj.length) | 0
19235 var buf = createBuffer(len)
19236
19237 if (buf.length === 0) {
19238 return buf
19239 }
19240
19241 obj.copy(buf, 0, 0, len)
19242 return buf
19243 }
19244
19245 if (obj) {
19246 if (ArrayBuffer.isView(obj) || 'length' in obj) {
19247 if (typeof obj.length !== 'number' || isnan(obj.length)) {
19248 return createBuffer(0)
19249 }
19250 return fromArrayLike(obj)
19251 }
19252
19253 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
19254 return fromArrayLike(obj.data)
19255 }
19256 }
19257
19258 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
19259 }
19260
19261 function checked (length) {
19262 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
19263 // length is NaN (which is otherwise coerced to zero.)
19264 if (length >= K_MAX_LENGTH) {
19265 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
19266 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
19267 }
19268 return length | 0
19269 }
19270
19271 function SlowBuffer (length) {
19272 if (+length != length) { // eslint-disable-line eqeqeq
19273 length = 0
19274 }
19275 return Buffer.alloc(+length)
19276 }
19277
19278 Buffer.isBuffer = function isBuffer (b) {
19279 return b != null && b._isBuffer === true
19280 }
19281
19282 Buffer.compare = function compare (a, b) {
19283 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
19284 throw new TypeError('Arguments must be Buffers')
19285 }
19286
19287 if (a === b) return 0
19288
19289 var x = a.length
19290 var y = b.length
19291
19292 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
19293 if (a[i] !== b[i]) {
19294 x = a[i]
19295 y = b[i]
19296 break
19297 }
19298 }
19299
19300 if (x < y) return -1
19301 if (y < x) return 1
19302 return 0
19303 }
19304
19305 Buffer.isEncoding = function isEncoding (encoding) {
19306 switch (String(encoding).toLowerCase()) {
19307 case 'hex':
19308 case 'utf8':
19309 case 'utf-8':
19310 case 'ascii':
19311 case 'latin1':
19312 case 'binary':
19313 case 'base64':
19314 case 'ucs2':
19315 case 'ucs-2':
19316 case 'utf16le':
19317 case 'utf-16le':
19318 return true
19319 default:
19320 return false
19321 }
19322 }
19323
19324 Buffer.concat = function concat (list, length) {
19325 if (!Array.isArray(list)) {
19326 throw new TypeError('"list" argument must be an Array of Buffers')
19327 }
19328
19329 if (list.length === 0) {
19330 return Buffer.alloc(0)
19331 }
19332
19333 var i
19334 if (length === undefined) {
19335 length = 0
19336 for (i = 0; i < list.length; ++i) {
19337 length += list[i].length
19338 }
19339 }
19340
19341 var buffer = Buffer.allocUnsafe(length)
19342 var pos = 0
19343 for (i = 0; i < list.length; ++i) {
19344 var buf = list[i]
19345 if (!Buffer.isBuffer(buf)) {
19346 throw new TypeError('"list" argument must be an Array of Buffers')
19347 }
19348 buf.copy(buffer, pos)
19349 pos += buf.length
19350 }
19351 return buffer
19352 }
19353
19354 function byteLength (string, encoding) {
19355 if (Buffer.isBuffer(string)) {
19356 return string.length
19357 }
19358 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
19359 return string.byteLength
19360 }
19361 if (typeof string !== 'string') {
19362 string = '' + string
19363 }
19364
19365 var len = string.length
19366 if (len === 0) return 0
19367
19368 // Use a for loop to avoid recursion
19369 var loweredCase = false
19370 for (;;) {
19371 switch (encoding) {
19372 case 'ascii':
19373 case 'latin1':
19374 case 'binary':
19375 return len
19376 case 'utf8':
19377 case 'utf-8':
19378 case undefined:
19379 return utf8ToBytes(string).length
19380 case 'ucs2':
19381 case 'ucs-2':
19382 case 'utf16le':
19383 case 'utf-16le':
19384 return len * 2
19385 case 'hex':
19386 return len >>> 1
19387 case 'base64':
19388 return base64ToBytes(string).length
19389 default:
19390 if (loweredCase) return utf8ToBytes(string).length // assume utf8
19391 encoding = ('' + encoding).toLowerCase()
19392 loweredCase = true
19393 }
19394 }
19395 }
19396 Buffer.byteLength = byteLength
19397
19398 function slowToString (encoding, start, end) {
19399 var loweredCase = false
19400
19401 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
19402 // property of a typed array.
19403
19404 // This behaves neither like String nor Uint8Array in that we set start/end
19405 // to their upper/lower bounds if the value passed is out of range.
19406 // undefined is handled specially as per ECMA-262 6th Edition,
19407 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
19408 if (start === undefined || start < 0) {
19409 start = 0
19410 }
19411 // Return early if start > this.length. Done here to prevent potential uint32
19412 // coercion fail below.
19413 if (start > this.length) {
19414 return ''
19415 }
19416
19417 if (end === undefined || end > this.length) {
19418 end = this.length
19419 }
19420
19421 if (end <= 0) {
19422 return ''
19423 }
19424
19425 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
19426 end >>>= 0
19427 start >>>= 0
19428
19429 if (end <= start) {
19430 return ''
19431 }
19432
19433 if (!encoding) encoding = 'utf8'
19434
19435 while (true) {
19436 switch (encoding) {
19437 case 'hex':
19438 return hexSlice(this, start, end)
19439
19440 case 'utf8':
19441 case 'utf-8':
19442 return utf8Slice(this, start, end)
19443
19444 case 'ascii':
19445 return asciiSlice(this, start, end)
19446
19447 case 'latin1':
19448 case 'binary':
19449 return latin1Slice(this, start, end)
19450
19451 case 'base64':
19452 return base64Slice(this, start, end)
19453
19454 case 'ucs2':
19455 case 'ucs-2':
19456 case 'utf16le':
19457 case 'utf-16le':
19458 return utf16leSlice(this, start, end)
19459
19460 default:
19461 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19462 encoding = (encoding + '').toLowerCase()
19463 loweredCase = true
19464 }
19465 }
19466 }
19467
19468 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
19469 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
19470 // reliably in a browserify context because there could be multiple different
19471 // copies of the 'buffer' package in use. This method works even for Buffer
19472 // instances that were created from another copy of the `buffer` package.
19473 // See: https://github.com/feross/buffer/issues/154
19474 Buffer.prototype._isBuffer = true
19475
19476 function swap (b, n, m) {
19477 var i = b[n]
19478 b[n] = b[m]
19479 b[m] = i
19480 }
19481
19482 Buffer.prototype.swap16 = function swap16 () {
19483 var len = this.length
19484 if (len % 2 !== 0) {
19485 throw new RangeError('Buffer size must be a multiple of 16-bits')
19486 }
19487 for (var i = 0; i < len; i += 2) {
19488 swap(this, i, i + 1)
19489 }
19490 return this
19491 }
19492
19493 Buffer.prototype.swap32 = function swap32 () {
19494 var len = this.length
19495 if (len % 4 !== 0) {
19496 throw new RangeError('Buffer size must be a multiple of 32-bits')
19497 }
19498 for (var i = 0; i < len; i += 4) {
19499 swap(this, i, i + 3)
19500 swap(this, i + 1, i + 2)
19501 }
19502 return this
19503 }
19504
19505 Buffer.prototype.swap64 = function swap64 () {
19506 var len = this.length
19507 if (len % 8 !== 0) {
19508 throw new RangeError('Buffer size must be a multiple of 64-bits')
19509 }
19510 for (var i = 0; i < len; i += 8) {
19511 swap(this, i, i + 7)
19512 swap(this, i + 1, i + 6)
19513 swap(this, i + 2, i + 5)
19514 swap(this, i + 3, i + 4)
19515 }
19516 return this
19517 }
19518
19519 Buffer.prototype.toString = function toString () {
19520 var length = this.length
19521 if (length === 0) return ''
19522 if (arguments.length === 0) return utf8Slice(this, 0, length)
19523 return slowToString.apply(this, arguments)
19524 }
19525
19526 Buffer.prototype.equals = function equals (b) {
19527 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
19528 if (this === b) return true
19529 return Buffer.compare(this, b) === 0
19530 }
19531
19532 Buffer.prototype.inspect = function inspect () {
19533 var str = ''
19534 var max = exports.INSPECT_MAX_BYTES
19535 if (this.length > 0) {
19536 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
19537 if (this.length > max) str += ' ... '
19538 }
19539 return '<Buffer ' + str + '>'
19540 }
19541
19542 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
19543 if (!Buffer.isBuffer(target)) {
19544 throw new TypeError('Argument must be a Buffer')
19545 }
19546
19547 if (start === undefined) {
19548 start = 0
19549 }
19550 if (end === undefined) {
19551 end = target ? target.length : 0
19552 }
19553 if (thisStart === undefined) {
19554 thisStart = 0
19555 }
19556 if (thisEnd === undefined) {
19557 thisEnd = this.length
19558 }
19559
19560 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
19561 throw new RangeError('out of range index')
19562 }
19563
19564 if (thisStart >= thisEnd && start >= end) {
19565 return 0
19566 }
19567 if (thisStart >= thisEnd) {
19568 return -1
19569 }
19570 if (start >= end) {
19571 return 1
19572 }
19573
19574 start >>>= 0
19575 end >>>= 0
19576 thisStart >>>= 0
19577 thisEnd >>>= 0
19578
19579 if (this === target) return 0
19580
19581 var x = thisEnd - thisStart
19582 var y = end - start
19583 var len = Math.min(x, y)
19584
19585 var thisCopy = this.slice(thisStart, thisEnd)
19586 var targetCopy = target.slice(start, end)
19587
19588 for (var i = 0; i < len; ++i) {
19589 if (thisCopy[i] !== targetCopy[i]) {
19590 x = thisCopy[i]
19591 y = targetCopy[i]
19592 break
19593 }
19594 }
19595
19596 if (x < y) return -1
19597 if (y < x) return 1
19598 return 0
19599 }
19600
19601 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
19602 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
19603 //
19604 // Arguments:
19605 // - buffer - a Buffer to search
19606 // - val - a string, Buffer, or number
19607 // - byteOffset - an index into `buffer`; will be clamped to an int32
19608 // - encoding - an optional encoding, relevant is val is a string
19609 // - dir - true for indexOf, false for lastIndexOf
19610 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
19611 // Empty buffer means no match
19612 if (buffer.length === 0) return -1
19613
19614 // Normalize byteOffset
19615 if (typeof byteOffset === 'string') {
19616 encoding = byteOffset
19617 byteOffset = 0
19618 } else if (byteOffset > 0x7fffffff) {
19619 byteOffset = 0x7fffffff
19620 } else if (byteOffset < -0x80000000) {
19621 byteOffset = -0x80000000
19622 }
19623 byteOffset = +byteOffset // Coerce to Number.
19624 if (isNaN(byteOffset)) {
19625 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
19626 byteOffset = dir ? 0 : (buffer.length - 1)
19627 }
19628
19629 // Normalize byteOffset: negative offsets start from the end of the buffer
19630 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
19631 if (byteOffset >= buffer.length) {
19632 if (dir) return -1
19633 else byteOffset = buffer.length - 1
19634 } else if (byteOffset < 0) {
19635 if (dir) byteOffset = 0
19636 else return -1
19637 }
19638
19639 // Normalize val
19640 if (typeof val === 'string') {
19641 val = Buffer.from(val, encoding)
19642 }
19643
19644 // Finally, search either indexOf (if dir is true) or lastIndexOf
19645 if (Buffer.isBuffer(val)) {
19646 // Special case: looking for empty string/buffer always fails
19647 if (val.length === 0) {
19648 return -1
19649 }
19650 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
19651 } else if (typeof val === 'number') {
19652 val = val & 0xFF // Search for a byte value [0-255]
19653 if (typeof Uint8Array.prototype.indexOf === 'function') {
19654 if (dir) {
19655 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
19656 } else {
19657 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
19658 }
19659 }
19660 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
19661 }
19662
19663 throw new TypeError('val must be string, number or Buffer')
19664 }
19665
19666 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
19667 var indexSize = 1
19668 var arrLength = arr.length
19669 var valLength = val.length
19670
19671 if (encoding !== undefined) {
19672 encoding = String(encoding).toLowerCase()
19673 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
19674 encoding === 'utf16le' || encoding === 'utf-16le') {
19675 if (arr.length < 2 || val.length < 2) {
19676 return -1
19677 }
19678 indexSize = 2
19679 arrLength /= 2
19680 valLength /= 2
19681 byteOffset /= 2
19682 }
19683 }
19684
19685 function read (buf, i) {
19686 if (indexSize === 1) {
19687 return buf[i]
19688 } else {
19689 return buf.readUInt16BE(i * indexSize)
19690 }
19691 }
19692
19693 var i
19694 if (dir) {
19695 var foundIndex = -1
19696 for (i = byteOffset; i < arrLength; i++) {
19697 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
19698 if (foundIndex === -1) foundIndex = i
19699 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
19700 } else {
19701 if (foundIndex !== -1) i -= i - foundIndex
19702 foundIndex = -1
19703 }
19704 }
19705 } else {
19706 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
19707 for (i = byteOffset; i >= 0; i--) {
19708 var found = true
19709 for (var j = 0; j < valLength; j++) {
19710 if (read(arr, i + j) !== read(val, j)) {
19711 found = false
19712 break
19713 }
19714 }
19715 if (found) return i
19716 }
19717 }
19718
19719 return -1
19720 }
19721
19722 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
19723 return this.indexOf(val, byteOffset, encoding) !== -1
19724 }
19725
19726 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
19727 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
19728 }
19729
19730 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
19731 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
19732 }
19733
19734 function hexWrite (buf, string, offset, length) {
19735 offset = Number(offset) || 0
19736 var remaining = buf.length - offset
19737 if (!length) {
19738 length = remaining
19739 } else {
19740 length = Number(length)
19741 if (length > remaining) {
19742 length = remaining
19743 }
19744 }
19745
19746 // must be an even number of digits
19747 var strLen = string.length
19748 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
19749
19750 if (length > strLen / 2) {
19751 length = strLen / 2
19752 }
19753 for (var i = 0; i < length; ++i) {
19754 var parsed = parseInt(string.substr(i * 2, 2), 16)
19755 if (isNaN(parsed)) return i
19756 buf[offset + i] = parsed
19757 }
19758 return i
19759 }
19760
19761 function utf8Write (buf, string, offset, length) {
19762 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
19763 }
19764
19765 function asciiWrite (buf, string, offset, length) {
19766 return blitBuffer(asciiToBytes(string), buf, offset, length)
19767 }
19768
19769 function latin1Write (buf, string, offset, length) {
19770 return asciiWrite(buf, string, offset, length)
19771 }
19772
19773 function base64Write (buf, string, offset, length) {
19774 return blitBuffer(base64ToBytes(string), buf, offset, length)
19775 }
19776
19777 function ucs2Write (buf, string, offset, length) {
19778 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
19779 }
19780
19781 Buffer.prototype.write = function write (string, offset, length, encoding) {
19782 // Buffer#write(string)
19783 if (offset === undefined) {
19784 encoding = 'utf8'
19785 length = this.length
19786 offset = 0
19787 // Buffer#write(string, encoding)
19788 } else if (length === undefined && typeof offset === 'string') {
19789 encoding = offset
19790 length = this.length
19791 offset = 0
19792 // Buffer#write(string, offset[, length][, encoding])
19793 } else if (isFinite(offset)) {
19794 offset = offset >>> 0
19795 if (isFinite(length)) {
19796 length = length >>> 0
19797 if (encoding === undefined) encoding = 'utf8'
19798 } else {
19799 encoding = length
19800 length = undefined
19801 }
19802 } else {
19803 throw new Error(
19804 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
19805 )
19806 }
19807
19808 var remaining = this.length - offset
19809 if (length === undefined || length > remaining) length = remaining
19810
19811 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
19812 throw new RangeError('Attempt to write outside buffer bounds')
19813 }
19814
19815 if (!encoding) encoding = 'utf8'
19816
19817 var loweredCase = false
19818 for (;;) {
19819 switch (encoding) {
19820 case 'hex':
19821 return hexWrite(this, string, offset, length)
19822
19823 case 'utf8':
19824 case 'utf-8':
19825 return utf8Write(this, string, offset, length)
19826
19827 case 'ascii':
19828 return asciiWrite(this, string, offset, length)
19829
19830 case 'latin1':
19831 case 'binary':
19832 return latin1Write(this, string, offset, length)
19833
19834 case 'base64':
19835 // Warning: maxLength not taken into account in base64Write
19836 return base64Write(this, string, offset, length)
19837
19838 case 'ucs2':
19839 case 'ucs-2':
19840 case 'utf16le':
19841 case 'utf-16le':
19842 return ucs2Write(this, string, offset, length)
19843
19844 default:
19845 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19846 encoding = ('' + encoding).toLowerCase()
19847 loweredCase = true
19848 }
19849 }
19850 }
19851
19852 Buffer.prototype.toJSON = function toJSON () {
19853 return {
19854 type: 'Buffer',
19855 data: Array.prototype.slice.call(this._arr || this, 0)
19856 }
19857 }
19858
19859 function base64Slice (buf, start, end) {
19860 if (start === 0 && end === buf.length) {
19861 return base64.fromByteArray(buf)
19862 } else {
19863 return base64.fromByteArray(buf.slice(start, end))
19864 }
19865 }
19866
19867 function utf8Slice (buf, start, end) {
19868 end = Math.min(buf.length, end)
19869 var res = []
19870
19871 var i = start
19872 while (i < end) {
19873 var firstByte = buf[i]
19874 var codePoint = null
19875 var bytesPerSequence = (firstByte > 0xEF) ? 4
19876 : (firstByte > 0xDF) ? 3
19877 : (firstByte > 0xBF) ? 2
19878 : 1
19879
19880 if (i + bytesPerSequence <= end) {
19881 var secondByte, thirdByte, fourthByte, tempCodePoint
19882
19883 switch (bytesPerSequence) {
19884 case 1:
19885 if (firstByte < 0x80) {
19886 codePoint = firstByte
19887 }
19888 break
19889 case 2:
19890 secondByte = buf[i + 1]
19891 if ((secondByte & 0xC0) === 0x80) {
19892 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
19893 if (tempCodePoint > 0x7F) {
19894 codePoint = tempCodePoint
19895 }
19896 }
19897 break
19898 case 3:
19899 secondByte = buf[i + 1]
19900 thirdByte = buf[i + 2]
19901 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
19902 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
19903 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
19904 codePoint = tempCodePoint
19905 }
19906 }
19907 break
19908 case 4:
19909 secondByte = buf[i + 1]
19910 thirdByte = buf[i + 2]
19911 fourthByte = buf[i + 3]
19912 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
19913 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
19914 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
19915 codePoint = tempCodePoint
19916 }
19917 }
19918 }
19919 }
19920
19921 if (codePoint === null) {
19922 // we did not generate a valid codePoint so insert a
19923 // replacement char (U+FFFD) and advance only 1 byte
19924 codePoint = 0xFFFD
19925 bytesPerSequence = 1
19926 } else if (codePoint > 0xFFFF) {
19927 // encode to utf16 (surrogate pair dance)
19928 codePoint -= 0x10000
19929 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
19930 codePoint = 0xDC00 | codePoint & 0x3FF
19931 }
19932
19933 res.push(codePoint)
19934 i += bytesPerSequence
19935 }
19936
19937 return decodeCodePointsArray(res)
19938 }
19939
19940 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
19941 // the lowest limit is Chrome, with 0x10000 args.
19942 // We go 1 magnitude less, for safety
19943 var MAX_ARGUMENTS_LENGTH = 0x1000
19944
19945 function decodeCodePointsArray (codePoints) {
19946 var len = codePoints.length
19947 if (len <= MAX_ARGUMENTS_LENGTH) {
19948 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
19949 }
19950
19951 // Decode in chunks to avoid "call stack size exceeded".
19952 var res = ''
19953 var i = 0
19954 while (i < len) {
19955 res += String.fromCharCode.apply(
19956 String,
19957 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
19958 )
19959 }
19960 return res
19961 }
19962
19963 function asciiSlice (buf, start, end) {
19964 var ret = ''
19965 end = Math.min(buf.length, end)
19966
19967 for (var i = start; i < end; ++i) {
19968 ret += String.fromCharCode(buf[i] & 0x7F)
19969 }
19970 return ret
19971 }
19972
19973 function latin1Slice (buf, start, end) {
19974 var ret = ''
19975 end = Math.min(buf.length, end)
19976
19977 for (var i = start; i < end; ++i) {
19978 ret += String.fromCharCode(buf[i])
19979 }
19980 return ret
19981 }
19982
19983 function hexSlice (buf, start, end) {
19984 var len = buf.length
19985
19986 if (!start || start < 0) start = 0
19987 if (!end || end < 0 || end > len) end = len
19988
19989 var out = ''
19990 for (var i = start; i < end; ++i) {
19991 out += toHex(buf[i])
19992 }
19993 return out
19994 }
19995
19996 function utf16leSlice (buf, start, end) {
19997 var bytes = buf.slice(start, end)
19998 var res = ''
19999 for (var i = 0; i < bytes.length; i += 2) {
20000 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
20001 }
20002 return res
20003 }
20004
20005 Buffer.prototype.slice = function slice (start, end) {
20006 var len = this.length
20007 start = ~~start
20008 end = end === undefined ? len : ~~end
20009
20010 if (start < 0) {
20011 start += len
20012 if (start < 0) start = 0
20013 } else if (start > len) {
20014 start = len
20015 }
20016
20017 if (end < 0) {
20018 end += len
20019 if (end < 0) end = 0
20020 } else if (end > len) {
20021 end = len
20022 }
20023
20024 if (end < start) end = start
20025
20026 var newBuf = this.subarray(start, end)
20027 // Return an augmented `Uint8Array` instance
20028 newBuf.__proto__ = Buffer.prototype
20029 return newBuf
20030 }
20031
20032 /*
20033 * Need to make sure that buffer isn't trying to write out of bounds.
20034 */
20035 function checkOffset (offset, ext, length) {
20036 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
20037 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
20038 }
20039
20040 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
20041 offset = offset >>> 0
20042 byteLength = byteLength >>> 0
20043 if (!noAssert) checkOffset(offset, byteLength, this.length)
20044
20045 var val = this[offset]
20046 var mul = 1
20047 var i = 0
20048 while (++i < byteLength && (mul *= 0x100)) {
20049 val += this[offset + i] * mul
20050 }
20051
20052 return val
20053 }
20054
20055 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
20056 offset = offset >>> 0
20057 byteLength = byteLength >>> 0
20058 if (!noAssert) {
20059 checkOffset(offset, byteLength, this.length)
20060 }
20061
20062 var val = this[offset + --byteLength]
20063 var mul = 1
20064 while (byteLength > 0 && (mul *= 0x100)) {
20065 val += this[offset + --byteLength] * mul
20066 }
20067
20068 return val
20069 }
20070
20071 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
20072 offset = offset >>> 0
20073 if (!noAssert) checkOffset(offset, 1, this.length)
20074 return this[offset]
20075 }
20076
20077 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
20078 offset = offset >>> 0
20079 if (!noAssert) checkOffset(offset, 2, this.length)
20080 return this[offset] | (this[offset + 1] << 8)
20081 }
20082
20083 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
20084 offset = offset >>> 0
20085 if (!noAssert) checkOffset(offset, 2, this.length)
20086 return (this[offset] << 8) | this[offset + 1]
20087 }
20088
20089 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
20090 offset = offset >>> 0
20091 if (!noAssert) checkOffset(offset, 4, this.length)
20092
20093 return ((this[offset]) |
20094 (this[offset + 1] << 8) |
20095 (this[offset + 2] << 16)) +
20096 (this[offset + 3] * 0x1000000)
20097 }
20098
20099 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
20100 offset = offset >>> 0
20101 if (!noAssert) checkOffset(offset, 4, this.length)
20102
20103 return (this[offset] * 0x1000000) +
20104 ((this[offset + 1] << 16) |
20105 (this[offset + 2] << 8) |
20106 this[offset + 3])
20107 }
20108
20109 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
20110 offset = offset >>> 0
20111 byteLength = byteLength >>> 0
20112 if (!noAssert) checkOffset(offset, byteLength, this.length)
20113
20114 var val = this[offset]
20115 var mul = 1
20116 var i = 0
20117 while (++i < byteLength && (mul *= 0x100)) {
20118 val += this[offset + i] * mul
20119 }
20120 mul *= 0x80
20121
20122 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
20123
20124 return val
20125 }
20126
20127 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
20128 offset = offset >>> 0
20129 byteLength = byteLength >>> 0
20130 if (!noAssert) checkOffset(offset, byteLength, this.length)
20131
20132 var i = byteLength
20133 var mul = 1
20134 var val = this[offset + --i]
20135 while (i > 0 && (mul *= 0x100)) {
20136 val += this[offset + --i] * mul
20137 }
20138 mul *= 0x80
20139
20140 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
20141
20142 return val
20143 }
20144
20145 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
20146 offset = offset >>> 0
20147 if (!noAssert) checkOffset(offset, 1, this.length)
20148 if (!(this[offset] & 0x80)) return (this[offset])
20149 return ((0xff - this[offset] + 1) * -1)
20150 }
20151
20152 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
20153 offset = offset >>> 0
20154 if (!noAssert) checkOffset(offset, 2, this.length)
20155 var val = this[offset] | (this[offset + 1] << 8)
20156 return (val & 0x8000) ? val | 0xFFFF0000 : val
20157 }
20158
20159 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
20160 offset = offset >>> 0
20161 if (!noAssert) checkOffset(offset, 2, this.length)
20162 var val = this[offset + 1] | (this[offset] << 8)
20163 return (val & 0x8000) ? val | 0xFFFF0000 : val
20164 }
20165
20166 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
20167 offset = offset >>> 0
20168 if (!noAssert) checkOffset(offset, 4, this.length)
20169
20170 return (this[offset]) |
20171 (this[offset + 1] << 8) |
20172 (this[offset + 2] << 16) |
20173 (this[offset + 3] << 24)
20174 }
20175
20176 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
20177 offset = offset >>> 0
20178 if (!noAssert) checkOffset(offset, 4, this.length)
20179
20180 return (this[offset] << 24) |
20181 (this[offset + 1] << 16) |
20182 (this[offset + 2] << 8) |
20183 (this[offset + 3])
20184 }
20185
20186 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
20187 offset = offset >>> 0
20188 if (!noAssert) checkOffset(offset, 4, this.length)
20189 return ieee754.read(this, offset, true, 23, 4)
20190 }
20191
20192 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
20193 offset = offset >>> 0
20194 if (!noAssert) checkOffset(offset, 4, this.length)
20195 return ieee754.read(this, offset, false, 23, 4)
20196 }
20197
20198 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
20199 offset = offset >>> 0
20200 if (!noAssert) checkOffset(offset, 8, this.length)
20201 return ieee754.read(this, offset, true, 52, 8)
20202 }
20203
20204 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
20205 offset = offset >>> 0
20206 if (!noAssert) checkOffset(offset, 8, this.length)
20207 return ieee754.read(this, offset, false, 52, 8)
20208 }
20209
20210 function checkInt (buf, value, offset, ext, max, min) {
20211 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
20212 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
20213 if (offset + ext > buf.length) throw new RangeError('Index out of range')
20214 }
20215
20216 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
20217 value = +value
20218 offset = offset >>> 0
20219 byteLength = byteLength >>> 0
20220 if (!noAssert) {
20221 var maxBytes = Math.pow(2, 8 * byteLength) - 1
20222 checkInt(this, value, offset, byteLength, maxBytes, 0)
20223 }
20224
20225 var mul = 1
20226 var i = 0
20227 this[offset] = value & 0xFF
20228 while (++i < byteLength && (mul *= 0x100)) {
20229 this[offset + i] = (value / mul) & 0xFF
20230 }
20231
20232 return offset + byteLength
20233 }
20234
20235 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
20236 value = +value
20237 offset = offset >>> 0
20238 byteLength = byteLength >>> 0
20239 if (!noAssert) {
20240 var maxBytes = Math.pow(2, 8 * byteLength) - 1
20241 checkInt(this, value, offset, byteLength, maxBytes, 0)
20242 }
20243
20244 var i = byteLength - 1
20245 var mul = 1
20246 this[offset + i] = value & 0xFF
20247 while (--i >= 0 && (mul *= 0x100)) {
20248 this[offset + i] = (value / mul) & 0xFF
20249 }
20250
20251 return offset + byteLength
20252 }
20253
20254 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
20255 value = +value
20256 offset = offset >>> 0
20257 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
20258 this[offset] = (value & 0xff)
20259 return offset + 1
20260 }
20261
20262 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
20263 value = +value
20264 offset = offset >>> 0
20265 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
20266 this[offset] = (value & 0xff)
20267 this[offset + 1] = (value >>> 8)
20268 return offset + 2
20269 }
20270
20271 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
20272 value = +value
20273 offset = offset >>> 0
20274 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
20275 this[offset] = (value >>> 8)
20276 this[offset + 1] = (value & 0xff)
20277 return offset + 2
20278 }
20279
20280 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
20281 value = +value
20282 offset = offset >>> 0
20283 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
20284 this[offset + 3] = (value >>> 24)
20285 this[offset + 2] = (value >>> 16)
20286 this[offset + 1] = (value >>> 8)
20287 this[offset] = (value & 0xff)
20288 return offset + 4
20289 }
20290
20291 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
20292 value = +value
20293 offset = offset >>> 0
20294 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
20295 this[offset] = (value >>> 24)
20296 this[offset + 1] = (value >>> 16)
20297 this[offset + 2] = (value >>> 8)
20298 this[offset + 3] = (value & 0xff)
20299 return offset + 4
20300 }
20301
20302 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
20303 value = +value
20304 offset = offset >>> 0
20305 if (!noAssert) {
20306 var limit = Math.pow(2, (8 * byteLength) - 1)
20307
20308 checkInt(this, value, offset, byteLength, limit - 1, -limit)
20309 }
20310
20311 var i = 0
20312 var mul = 1
20313 var sub = 0
20314 this[offset] = value & 0xFF
20315 while (++i < byteLength && (mul *= 0x100)) {
20316 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
20317 sub = 1
20318 }
20319 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
20320 }
20321
20322 return offset + byteLength
20323 }
20324
20325 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
20326 value = +value
20327 offset = offset >>> 0
20328 if (!noAssert) {
20329 var limit = Math.pow(2, (8 * byteLength) - 1)
20330
20331 checkInt(this, value, offset, byteLength, limit - 1, -limit)
20332 }
20333
20334 var i = byteLength - 1
20335 var mul = 1
20336 var sub = 0
20337 this[offset + i] = value & 0xFF
20338 while (--i >= 0 && (mul *= 0x100)) {
20339 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
20340 sub = 1
20341 }
20342 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
20343 }
20344
20345 return offset + byteLength
20346 }
20347
20348 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
20349 value = +value
20350 offset = offset >>> 0
20351 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
20352 if (value < 0) value = 0xff + value + 1
20353 this[offset] = (value & 0xff)
20354 return offset + 1
20355 }
20356
20357 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
20358 value = +value
20359 offset = offset >>> 0
20360 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20361 this[offset] = (value & 0xff)
20362 this[offset + 1] = (value >>> 8)
20363 return offset + 2
20364 }
20365
20366 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
20367 value = +value
20368 offset = offset >>> 0
20369 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20370 this[offset] = (value >>> 8)
20371 this[offset + 1] = (value & 0xff)
20372 return offset + 2
20373 }
20374
20375 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
20376 value = +value
20377 offset = offset >>> 0
20378 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20379 this[offset] = (value & 0xff)
20380 this[offset + 1] = (value >>> 8)
20381 this[offset + 2] = (value >>> 16)
20382 this[offset + 3] = (value >>> 24)
20383 return offset + 4
20384 }
20385
20386 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
20387 value = +value
20388 offset = offset >>> 0
20389 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20390 if (value < 0) value = 0xffffffff + value + 1
20391 this[offset] = (value >>> 24)
20392 this[offset + 1] = (value >>> 16)
20393 this[offset + 2] = (value >>> 8)
20394 this[offset + 3] = (value & 0xff)
20395 return offset + 4
20396 }
20397
20398 function checkIEEE754 (buf, value, offset, ext, max, min) {
20399 if (offset + ext > buf.length) throw new RangeError('Index out of range')
20400 if (offset < 0) throw new RangeError('Index out of range')
20401 }
20402
20403 function writeFloat (buf, value, offset, littleEndian, noAssert) {
20404 value = +value
20405 offset = offset >>> 0
20406 if (!noAssert) {
20407 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
20408 }
20409 ieee754.write(buf, value, offset, littleEndian, 23, 4)
20410 return offset + 4
20411 }
20412
20413 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
20414 return writeFloat(this, value, offset, true, noAssert)
20415 }
20416
20417 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
20418 return writeFloat(this, value, offset, false, noAssert)
20419 }
20420
20421 function writeDouble (buf, value, offset, littleEndian, noAssert) {
20422 value = +value
20423 offset = offset >>> 0
20424 if (!noAssert) {
20425 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
20426 }
20427 ieee754.write(buf, value, offset, littleEndian, 52, 8)
20428 return offset + 8
20429 }
20430
20431 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
20432 return writeDouble(this, value, offset, true, noAssert)
20433 }
20434
20435 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
20436 return writeDouble(this, value, offset, false, noAssert)
20437 }
20438
20439 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
20440 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
20441 if (!start) start = 0
20442 if (!end && end !== 0) end = this.length
20443 if (targetStart >= target.length) targetStart = target.length
20444 if (!targetStart) targetStart = 0
20445 if (end > 0 && end < start) end = start
20446
20447 // Copy 0 bytes; we're done
20448 if (end === start) return 0
20449 if (target.length === 0 || this.length === 0) return 0
20450
20451 // Fatal error conditions
20452 if (targetStart < 0) {
20453 throw new RangeError('targetStart out of bounds')
20454 }
20455 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
20456 if (end < 0) throw new RangeError('sourceEnd out of bounds')
20457
20458 // Are we oob?
20459 if (end > this.length) end = this.length
20460 if (target.length - targetStart < end - start) {
20461 end = target.length - targetStart + start
20462 }
20463
20464 var len = end - start
20465 var i
20466
20467 if (this === target && start < targetStart && targetStart < end) {
20468 // descending copy from end
20469 for (i = len - 1; i >= 0; --i) {
20470 target[i + targetStart] = this[i + start]
20471 }
20472 } else if (len < 1000) {
20473 // ascending copy from start
20474 for (i = 0; i < len; ++i) {
20475 target[i + targetStart] = this[i + start]
20476 }
20477 } else {
20478 Uint8Array.prototype.set.call(
20479 target,
20480 this.subarray(start, start + len),
20481 targetStart
20482 )
20483 }
20484
20485 return len
20486 }
20487
20488 // Usage:
20489 // buffer.fill(number[, offset[, end]])
20490 // buffer.fill(buffer[, offset[, end]])
20491 // buffer.fill(string[, offset[, end]][, encoding])
20492 Buffer.prototype.fill = function fill (val, start, end, encoding) {
20493 // Handle string cases:
20494 if (typeof val === 'string') {
20495 if (typeof start === 'string') {
20496 encoding = start
20497 start = 0
20498 end = this.length
20499 } else if (typeof end === 'string') {
20500 encoding = end
20501 end = this.length
20502 }
20503 if (val.length === 1) {
20504 var code = val.charCodeAt(0)
20505 if (code < 256) {
20506 val = code
20507 }
20508 }
20509 if (encoding !== undefined && typeof encoding !== 'string') {
20510 throw new TypeError('encoding must be a string')
20511 }
20512 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
20513 throw new TypeError('Unknown encoding: ' + encoding)
20514 }
20515 } else if (typeof val === 'number') {
20516 val = val & 255
20517 }
20518
20519 // Invalid ranges are not set to a default, so can range check early.
20520 if (start < 0 || this.length < start || this.length < end) {
20521 throw new RangeError('Out of range index')
20522 }
20523
20524 if (end <= start) {
20525 return this
20526 }
20527
20528 start = start >>> 0
20529 end = end === undefined ? this.length : end >>> 0
20530
20531 if (!val) val = 0
20532
20533 var i
20534 if (typeof val === 'number') {
20535 for (i = start; i < end; ++i) {
20536 this[i] = val
20537 }
20538 } else {
20539 var bytes = Buffer.isBuffer(val)
20540 ? val
20541 : new Buffer(val, encoding)
20542 var len = bytes.length
20543 for (i = 0; i < end - start; ++i) {
20544 this[i + start] = bytes[i % len]
20545 }
20546 }
20547
20548 return this
20549 }
20550
20551 // HELPER FUNCTIONS
20552 // ================
20553
20554 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
20555
20556 function base64clean (str) {
20557 // Node strips out invalid characters like \n and \t from the string, base64-js does not
20558 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
20559 // Node converts strings with length < 2 to ''
20560 if (str.length < 2) return ''
20561 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
20562 while (str.length % 4 !== 0) {
20563 str = str + '='
20564 }
20565 return str
20566 }
20567
20568 function stringtrim (str) {
20569 if (str.trim) return str.trim()
20570 return str.replace(/^\s+|\s+$/g, '')
20571 }
20572
20573 function toHex (n) {
20574 if (n < 16) return '0' + n.toString(16)
20575 return n.toString(16)
20576 }
20577
20578 function utf8ToBytes (string, units) {
20579 units = units || Infinity
20580 var codePoint
20581 var length = string.length
20582 var leadSurrogate = null
20583 var bytes = []
20584
20585 for (var i = 0; i < length; ++i) {
20586 codePoint = string.charCodeAt(i)
20587
20588 // is surrogate component
20589 if (codePoint > 0xD7FF && codePoint < 0xE000) {
20590 // last char was a lead
20591 if (!leadSurrogate) {
20592 // no lead yet
20593 if (codePoint > 0xDBFF) {
20594 // unexpected trail
20595 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20596 continue
20597 } else if (i + 1 === length) {
20598 // unpaired lead
20599 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20600 continue
20601 }
20602
20603 // valid lead
20604 leadSurrogate = codePoint
20605
20606 continue
20607 }
20608
20609 // 2 leads in a row
20610 if (codePoint < 0xDC00) {
20611 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20612 leadSurrogate = codePoint
20613 continue
20614 }
20615
20616 // valid surrogate pair
20617 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
20618 } else if (leadSurrogate) {
20619 // valid bmp char, but last char was a lead
20620 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20621 }
20622
20623 leadSurrogate = null
20624
20625 // encode utf8
20626 if (codePoint < 0x80) {
20627 if ((units -= 1) < 0) break
20628 bytes.push(codePoint)
20629 } else if (codePoint < 0x800) {
20630 if ((units -= 2) < 0) break
20631 bytes.push(
20632 codePoint >> 0x6 | 0xC0,
20633 codePoint & 0x3F | 0x80
20634 )
20635 } else if (codePoint < 0x10000) {
20636 if ((units -= 3) < 0) break
20637 bytes.push(
20638 codePoint >> 0xC | 0xE0,
20639 codePoint >> 0x6 & 0x3F | 0x80,
20640 codePoint & 0x3F | 0x80
20641 )
20642 } else if (codePoint < 0x110000) {
20643 if ((units -= 4) < 0) break
20644 bytes.push(
20645 codePoint >> 0x12 | 0xF0,
20646 codePoint >> 0xC & 0x3F | 0x80,
20647 codePoint >> 0x6 & 0x3F | 0x80,
20648 codePoint & 0x3F | 0x80
20649 )
20650 } else {
20651 throw new Error('Invalid code point')
20652 }
20653 }
20654
20655 return bytes
20656 }
20657
20658 function asciiToBytes (str) {
20659 var byteArray = []
20660 for (var i = 0; i < str.length; ++i) {
20661 // Node's code seems to be doing this and not & 0x7F..
20662 byteArray.push(str.charCodeAt(i) & 0xFF)
20663 }
20664 return byteArray
20665 }
20666
20667 function utf16leToBytes (str, units) {
20668 var c, hi, lo
20669 var byteArray = []
20670 for (var i = 0; i < str.length; ++i) {
20671 if ((units -= 2) < 0) break
20672
20673 c = str.charCodeAt(i)
20674 hi = c >> 8
20675 lo = c % 256
20676 byteArray.push(lo)
20677 byteArray.push(hi)
20678 }
20679
20680 return byteArray
20681 }
20682
20683 function base64ToBytes (str) {
20684 return base64.toByteArray(base64clean(str))
20685 }
20686
20687 function blitBuffer (src, dst, offset, length) {
20688 for (var i = 0; i < length; ++i) {
20689 if ((i + offset >= dst.length) || (i >= src.length)) break
20690 dst[i + offset] = src[i]
20691 }
20692 return i
20693 }
20694
20695 function isnan (val) {
20696 return val !== val // eslint-disable-line no-self-compare
20697 }
20698
20699 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
20700 (function (Buffer){
20701 // Copyright Joyent, Inc. and other Node contributors.
20702 //
20703 // Permission is hereby granted, free of charge, to any person obtaining a
20704 // copy of this software and associated documentation files (the
20705 // "Software"), to deal in the Software without restriction, including
20706 // without limitation the rights to use, copy, modify, merge, publish,
20707 // distribute, sublicense, and/or sell copies of the Software, and to permit
20708 // persons to whom the Software is furnished to do so, subject to the
20709 // following conditions:
20710 //
20711 // The above copyright notice and this permission notice shall be included
20712 // in all copies or substantial portions of the Software.
20713 //
20714 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20715 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20716 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20717 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20718 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20719 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20720 // USE OR OTHER DEALINGS IN THE SOFTWARE.
20721
20722 // NOTE: These type checking functions intentionally don't use `instanceof`
20723 // because it is fragile and can be easily faked with `Object.create()`.
20724
20725 function isArray(arg) {
20726 if (Array.isArray) {
20727 return Array.isArray(arg);
20728 }
20729 return objectToString(arg) === '[object Array]';
20730 }
20731 exports.isArray = isArray;
20732
20733 function isBoolean(arg) {
20734 return typeof arg === 'boolean';
20735 }
20736 exports.isBoolean = isBoolean;
20737
20738 function isNull(arg) {
20739 return arg === null;
20740 }
20741 exports.isNull = isNull;
20742
20743 function isNullOrUndefined(arg) {
20744 return arg == null;
20745 }
20746 exports.isNullOrUndefined = isNullOrUndefined;
20747
20748 function isNumber(arg) {
20749 return typeof arg === 'number';
20750 }
20751 exports.isNumber = isNumber;
20752
20753 function isString(arg) {
20754 return typeof arg === 'string';
20755 }
20756 exports.isString = isString;
20757
20758 function isSymbol(arg) {
20759 return typeof arg === 'symbol';
20760 }
20761 exports.isSymbol = isSymbol;
20762
20763 function isUndefined(arg) {
20764 return arg === void 0;
20765 }
20766 exports.isUndefined = isUndefined;
20767
20768 function isRegExp(re) {
20769 return objectToString(re) === '[object RegExp]';
20770 }
20771 exports.isRegExp = isRegExp;
20772
20773 function isObject(arg) {
20774 return typeof arg === 'object' && arg !== null;
20775 }
20776 exports.isObject = isObject;
20777
20778 function isDate(d) {
20779 return objectToString(d) === '[object Date]';
20780 }
20781 exports.isDate = isDate;
20782
20783 function isError(e) {
20784 return (objectToString(e) === '[object Error]' || e instanceof Error);
20785 }
20786 exports.isError = isError;
20787
20788 function isFunction(arg) {
20789 return typeof arg === 'function';
20790 }
20791 exports.isFunction = isFunction;
20792
20793 function isPrimitive(arg) {
20794 return arg === null ||
20795 typeof arg === 'boolean' ||
20796 typeof arg === 'number' ||
20797 typeof arg === 'string' ||
20798 typeof arg === 'symbol' || // ES6 symbol
20799 typeof arg === 'undefined';
20800 }
20801 exports.isPrimitive = isPrimitive;
20802
20803 exports.isBuffer = Buffer.isBuffer;
20804
20805 function objectToString(o) {
20806 return Object.prototype.toString.call(o);
20807 }
20808
20809 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
20810 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
20811 // Copyright Joyent, Inc. and other Node contributors.
20812 //
20813 // Permission is hereby granted, free of charge, to any person obtaining a
20814 // copy of this software and associated documentation files (the
20815 // "Software"), to deal in the Software without restriction, including
20816 // without limitation the rights to use, copy, modify, merge, publish,
20817 // distribute, sublicense, and/or sell copies of the Software, and to permit
20818 // persons to whom the Software is furnished to do so, subject to the
20819 // following conditions:
20820 //
20821 // The above copyright notice and this permission notice shall be included
20822 // in all copies or substantial portions of the Software.
20823 //
20824 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20825 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20826 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20827 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20828 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20829 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20830 // USE OR OTHER DEALINGS IN THE SOFTWARE.
20831
20832 function EventEmitter() {
20833 this._events = this._events || {};
20834 this._maxListeners = this._maxListeners || undefined;
20835 }
20836 module.exports = EventEmitter;
20837
20838 // Backwards-compat with node 0.10.x
20839 EventEmitter.EventEmitter = EventEmitter;
20840
20841 EventEmitter.prototype._events = undefined;
20842 EventEmitter.prototype._maxListeners = undefined;
20843
20844 // By default EventEmitters will print a warning if more than 10 listeners are
20845 // added to it. This is a useful default which helps finding memory leaks.
20846 EventEmitter.defaultMaxListeners = 10;
20847
20848 // Obviously not all Emitters should be limited to 10. This function allows
20849 // that to be increased. Set to zero for unlimited.
20850 EventEmitter.prototype.setMaxListeners = function(n) {
20851 if (!isNumber(n) || n < 0 || isNaN(n))
20852 throw TypeError('n must be a positive number');
20853 this._maxListeners = n;
20854 return this;
20855 };
20856
20857 EventEmitter.prototype.emit = function(type) {
20858 var er, handler, len, args, i, listeners;
20859
20860 if (!this._events)
20861 this._events = {};
20862
20863 // If there is no 'error' event listener then throw.
20864 if (type === 'error') {
20865 if (!this._events.error ||
20866 (isObject(this._events.error) && !this._events.error.length)) {
20867 er = arguments[1];
20868 if (er instanceof Error) {
20869 throw er; // Unhandled 'error' event
20870 } else {
20871 // At least give some kind of context to the user
20872 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
20873 err.context = er;
20874 throw err;
20875 }
20876 }
20877 }
20878
20879 handler = this._events[type];
20880
20881 if (isUndefined(handler))
20882 return false;
20883
20884 if (isFunction(handler)) {
20885 switch (arguments.length) {
20886 // fast cases
20887 case 1:
20888 handler.call(this);
20889 break;
20890 case 2:
20891 handler.call(this, arguments[1]);
20892 break;
20893 case 3:
20894 handler.call(this, arguments[1], arguments[2]);
20895 break;
20896 // slower
20897 default:
20898 args = Array.prototype.slice.call(arguments, 1);
20899 handler.apply(this, args);
20900 }
20901 } else if (isObject(handler)) {
20902 args = Array.prototype.slice.call(arguments, 1);
20903 listeners = handler.slice();
20904 len = listeners.length;
20905 for (i = 0; i < len; i++)
20906 listeners[i].apply(this, args);
20907 }
20908
20909 return true;
20910 };
20911
20912 EventEmitter.prototype.addListener = function(type, listener) {
20913 var m;
20914
20915 if (!isFunction(listener))
20916 throw TypeError('listener must be a function');
20917
20918 if (!this._events)
20919 this._events = {};
20920
20921 // To avoid recursion in the case that type === "newListener"! Before
20922 // adding it to the listeners, first emit "newListener".
20923 if (this._events.newListener)
20924 this.emit('newListener', type,
20925 isFunction(listener.listener) ?
20926 listener.listener : listener);
20927
20928 if (!this._events[type])
20929 // Optimize the case of one listener. Don't need the extra array object.
20930 this._events[type] = listener;
20931 else if (isObject(this._events[type]))
20932 // If we've already got an array, just append.
20933 this._events[type].push(listener);
20934 else
20935 // Adding the second element, need to change to array.
20936 this._events[type] = [this._events[type], listener];
20937
20938 // Check for listener leak
20939 if (isObject(this._events[type]) && !this._events[type].warned) {
20940 if (!isUndefined(this._maxListeners)) {
20941 m = this._maxListeners;
20942 } else {
20943 m = EventEmitter.defaultMaxListeners;
20944 }
20945
20946 if (m && m > 0 && this._events[type].length > m) {
20947 this._events[type].warned = true;
20948 console.error('(node) warning: possible EventEmitter memory ' +
20949 'leak detected. %d listeners added. ' +
20950 'Use emitter.setMaxListeners() to increase limit.',
20951 this._events[type].length);
20952 if (typeof console.trace === 'function') {
20953 // not supported in IE 10
20954 console.trace();
20955 }
20956 }
20957 }
20958
20959 return this;
20960 };
20961
20962 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
20963
20964 EventEmitter.prototype.once = function(type, listener) {
20965 if (!isFunction(listener))
20966 throw TypeError('listener must be a function');
20967
20968 var fired = false;
20969
20970 function g() {
20971 this.removeListener(type, g);
20972
20973 if (!fired) {
20974 fired = true;
20975 listener.apply(this, arguments);
20976 }
20977 }
20978
20979 g.listener = listener;
20980 this.on(type, g);
20981
20982 return this;
20983 };
20984
20985 // emits a 'removeListener' event iff the listener was removed
20986 EventEmitter.prototype.removeListener = function(type, listener) {
20987 var list, position, length, i;
20988
20989 if (!isFunction(listener))
20990 throw TypeError('listener must be a function');
20991
20992 if (!this._events || !this._events[type])
20993 return this;
20994
20995 list = this._events[type];
20996 length = list.length;
20997 position = -1;
20998
20999 if (list === listener ||
21000 (isFunction(list.listener) && list.listener === listener)) {
21001 delete this._events[type];
21002 if (this._events.removeListener)
21003 this.emit('removeListener', type, listener);
21004
21005 } else if (isObject(list)) {
21006 for (i = length; i-- > 0;) {
21007 if (list[i] === listener ||
21008 (list[i].listener && list[i].listener === listener)) {
21009 position = i;
21010 break;
21011 }
21012 }
21013
21014 if (position < 0)
21015 return this;
21016
21017 if (list.length === 1) {
21018 list.length = 0;
21019 delete this._events[type];
21020 } else {
21021 list.splice(position, 1);
21022 }
21023
21024 if (this._events.removeListener)
21025 this.emit('removeListener', type, listener);
21026 }
21027
21028 return this;
21029 };
21030
21031 EventEmitter.prototype.removeAllListeners = function(type) {
21032 var key, listeners;
21033
21034 if (!this._events)
21035 return this;
21036
21037 // not listening for removeListener, no need to emit
21038 if (!this._events.removeListener) {
21039 if (arguments.length === 0)
21040 this._events = {};
21041 else if (this._events[type])
21042 delete this._events[type];
21043 return this;
21044 }
21045
21046 // emit removeListener for all listeners on all events
21047 if (arguments.length === 0) {
21048 for (key in this._events) {
21049 if (key === 'removeListener') continue;
21050 this.removeAllListeners(key);
21051 }
21052 this.removeAllListeners('removeListener');
21053 this._events = {};
21054 return this;
21055 }
21056
21057 listeners = this._events[type];
21058
21059 if (isFunction(listeners)) {
21060 this.removeListener(type, listeners);
21061 } else if (listeners) {
21062 // LIFO order
21063 while (listeners.length)
21064 this.removeListener(type, listeners[listeners.length - 1]);
21065 }
21066 delete this._events[type];
21067
21068 return this;
21069 };
21070
21071 EventEmitter.prototype.listeners = function(type) {
21072 var ret;
21073 if (!this._events || !this._events[type])
21074 ret = [];
21075 else if (isFunction(this._events[type]))
21076 ret = [this._events[type]];
21077 else
21078 ret = this._events[type].slice();
21079 return ret;
21080 };
21081
21082 EventEmitter.prototype.listenerCount = function(type) {
21083 if (this._events) {
21084 var evlistener = this._events[type];
21085
21086 if (isFunction(evlistener))
21087 return 1;
21088 else if (evlistener)
21089 return evlistener.length;
21090 }
21091 return 0;
21092 };
21093
21094 EventEmitter.listenerCount = function(emitter, type) {
21095 return emitter.listenerCount(type);
21096 };
21097
21098 function isFunction(arg) {
21099 return typeof arg === 'function';
21100 }
21101
21102 function isNumber(arg) {
21103 return typeof arg === 'number';
21104 }
21105
21106 function isObject(arg) {
21107 return typeof arg === 'object' && arg !== null;
21108 }
21109
21110 function isUndefined(arg) {
21111 return arg === void 0;
21112 }
21113
21114 },{}],8:[function(require,module,exports){
21115 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
21116 var e, m
21117 var eLen = nBytes * 8 - mLen - 1
21118 var eMax = (1 << eLen) - 1
21119 var eBias = eMax >> 1
21120 var nBits = -7
21121 var i = isLE ? (nBytes - 1) : 0
21122 var d = isLE ? -1 : 1
21123 var s = buffer[offset + i]
21124
21125 i += d
21126
21127 e = s & ((1 << (-nBits)) - 1)
21128 s >>= (-nBits)
21129 nBits += eLen
21130 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
21131
21132 m = e & ((1 << (-nBits)) - 1)
21133 e >>= (-nBits)
21134 nBits += mLen
21135 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
21136
21137 if (e === 0) {
21138 e = 1 - eBias
21139 } else if (e === eMax) {
21140 return m ? NaN : ((s ? -1 : 1) * Infinity)
21141 } else {
21142 m = m + Math.pow(2, mLen)
21143 e = e - eBias
21144 }
21145 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
21146 }
21147
21148 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
21149 var e, m, c
21150 var eLen = nBytes * 8 - mLen - 1
21151 var eMax = (1 << eLen) - 1
21152 var eBias = eMax >> 1
21153 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
21154 var i = isLE ? 0 : (nBytes - 1)
21155 var d = isLE ? 1 : -1
21156 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
21157
21158 value = Math.abs(value)
21159
21160 if (isNaN(value) || value === Infinity) {
21161 m = isNaN(value) ? 1 : 0
21162 e = eMax
21163 } else {
21164 e = Math.floor(Math.log(value) / Math.LN2)
21165 if (value * (c = Math.pow(2, -e)) < 1) {
21166 e--
21167 c *= 2
21168 }
21169 if (e + eBias >= 1) {
21170 value += rt / c
21171 } else {
21172 value += rt * Math.pow(2, 1 - eBias)
21173 }
21174 if (value * c >= 2) {
21175 e++
21176 c /= 2
21177 }
21178
21179 if (e + eBias >= eMax) {
21180 m = 0
21181 e = eMax
21182 } else if (e + eBias >= 1) {
21183 m = (value * c - 1) * Math.pow(2, mLen)
21184 e = e + eBias
21185 } else {
21186 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
21187 e = 0
21188 }
21189 }
21190
21191 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
21192
21193 e = (e << mLen) | m
21194 eLen += mLen
21195 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
21196
21197 buffer[offset + i - d] |= s * 128
21198 }
21199
21200 },{}],9:[function(require,module,exports){
21201 if (typeof Object.create === 'function') {
21202 // implementation from standard node.js 'util' module
21203 module.exports = function inherits(ctor, superCtor) {
21204 ctor.super_ = superCtor
21205 ctor.prototype = Object.create(superCtor.prototype, {
21206 constructor: {
21207 value: ctor,
21208 enumerable: false,
21209 writable: true,
21210 configurable: true
21211 }
21212 });
21213 };
21214 } else {
21215 // old school shim for old browsers
21216 module.exports = function inherits(ctor, superCtor) {
21217 ctor.super_ = superCtor
21218 var TempCtor = function () {}
21219 TempCtor.prototype = superCtor.prototype
21220 ctor.prototype = new TempCtor()
21221 ctor.prototype.constructor = ctor
21222 }
21223 }
21224
21225 },{}],10:[function(require,module,exports){
21226 /*!
21227 * Determine if an object is a Buffer
21228 *
21229 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
21230 * @license MIT
21231 */
21232
21233 // The _isBuffer check is for Safari 5-7 support, because it's missing
21234 // Object.prototype.constructor. Remove this eventually
21235 module.exports = function (obj) {
21236 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
21237 }
21238
21239 function isBuffer (obj) {
21240 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
21241 }
21242
21243 // For Node v0.10 support. Remove this eventually.
21244 function isSlowBuffer (obj) {
21245 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
21246 }
21247
21248 },{}],11:[function(require,module,exports){
21249 var toString = {}.toString;
21250
21251 module.exports = Array.isArray || function (arr) {
21252 return toString.call(arr) == '[object Array]';
21253 };
21254
21255 },{}],12:[function(require,module,exports){
21256 (function (process){
21257 'use strict';
21258
21259 if (!process.version ||
21260 process.version.indexOf('v0.') === 0 ||
21261 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
21262 module.exports = nextTick;
21263 } else {
21264 module.exports = process.nextTick;
21265 }
21266
21267 function nextTick(fn, arg1, arg2, arg3) {
21268 if (typeof fn !== 'function') {
21269 throw new TypeError('"callback" argument must be a function');
21270 }
21271 var len = arguments.length;
21272 var args, i;
21273 switch (len) {
21274 case 0:
21275 case 1:
21276 return process.nextTick(fn);
21277 case 2:
21278 return process.nextTick(function afterTickOne() {
21279 fn.call(null, arg1);
21280 });
21281 case 3:
21282 return process.nextTick(function afterTickTwo() {
21283 fn.call(null, arg1, arg2);
21284 });
21285 case 4:
21286 return process.nextTick(function afterTickThree() {
21287 fn.call(null, arg1, arg2, arg3);
21288 });
21289 default:
21290 args = new Array(len - 1);
21291 i = 0;
21292 while (i < args.length) {
21293 args[i++] = arguments[i];
21294 }
21295 return process.nextTick(function afterTick() {
21296 fn.apply(null, args);
21297 });
21298 }
21299 }
21300
21301 }).call(this,require('_process'))
21302 },{"_process":13}],13:[function(require,module,exports){
21303 // shim for using process in browser
21304 var process = module.exports = {};
21305
21306 // cached from whatever global is present so that test runners that stub it
21307 // don't break things. But we need to wrap it in a try catch in case it is
21308 // wrapped in strict mode code which doesn't define any globals. It's inside a
21309 // function because try/catches deoptimize in certain engines.
21310
21311 var cachedSetTimeout;
21312 var cachedClearTimeout;
21313
21314 function defaultSetTimout() {
21315 throw new Error('setTimeout has not been defined');
21316 }
21317 function defaultClearTimeout () {
21318 throw new Error('clearTimeout has not been defined');
21319 }
21320 (function () {
21321 try {
21322 if (typeof setTimeout === 'function') {
21323 cachedSetTimeout = setTimeout;
21324 } else {
21325 cachedSetTimeout = defaultSetTimout;
21326 }
21327 } catch (e) {
21328 cachedSetTimeout = defaultSetTimout;
21329 }
21330 try {
21331 if (typeof clearTimeout === 'function') {
21332 cachedClearTimeout = clearTimeout;
21333 } else {
21334 cachedClearTimeout = defaultClearTimeout;
21335 }
21336 } catch (e) {
21337 cachedClearTimeout = defaultClearTimeout;
21338 }
21339 } ())
21340 function runTimeout(fun) {
21341 if (cachedSetTimeout === setTimeout) {
21342 //normal enviroments in sane situations
21343 return setTimeout(fun, 0);
21344 }
21345 // if setTimeout wasn't available but was latter defined
21346 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
21347 cachedSetTimeout = setTimeout;
21348 return setTimeout(fun, 0);
21349 }
21350 try {
21351 // when when somebody has screwed with setTimeout but no I.E. maddness
21352 return cachedSetTimeout(fun, 0);
21353 } catch(e){
21354 try {
21355 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21356 return cachedSetTimeout.call(null, fun, 0);
21357 } catch(e){
21358 // 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
21359 return cachedSetTimeout.call(this, fun, 0);
21360 }
21361 }
21362
21363
21364 }
21365 function runClearTimeout(marker) {
21366 if (cachedClearTimeout === clearTimeout) {
21367 //normal enviroments in sane situations
21368 return clearTimeout(marker);
21369 }
21370 // if clearTimeout wasn't available but was latter defined
21371 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
21372 cachedClearTimeout = clearTimeout;
21373 return clearTimeout(marker);
21374 }
21375 try {
21376 // when when somebody has screwed with setTimeout but no I.E. maddness
21377 return cachedClearTimeout(marker);
21378 } catch (e){
21379 try {
21380 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21381 return cachedClearTimeout.call(null, marker);
21382 } catch (e){
21383 // 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.
21384 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
21385 return cachedClearTimeout.call(this, marker);
21386 }
21387 }
21388
21389
21390
21391 }
21392 var queue = [];
21393 var draining = false;
21394 var currentQueue;
21395 var queueIndex = -1;
21396
21397 function cleanUpNextTick() {
21398 if (!draining || !currentQueue) {
21399 return;
21400 }
21401 draining = false;
21402 if (currentQueue.length) {
21403 queue = currentQueue.concat(queue);
21404 } else {
21405 queueIndex = -1;
21406 }
21407 if (queue.length) {
21408 drainQueue();
21409 }
21410 }
21411
21412 function drainQueue() {
21413 if (draining) {
21414 return;
21415 }
21416 var timeout = runTimeout(cleanUpNextTick);
21417 draining = true;
21418
21419 var len = queue.length;
21420 while(len) {
21421 currentQueue = queue;
21422 queue = [];
21423 while (++queueIndex < len) {
21424 if (currentQueue) {
21425 currentQueue[queueIndex].run();
21426 }
21427 }
21428 queueIndex = -1;
21429 len = queue.length;
21430 }
21431 currentQueue = null;
21432 draining = false;
21433 runClearTimeout(timeout);
21434 }
21435
21436 process.nextTick = function (fun) {
21437 var args = new Array(arguments.length - 1);
21438 if (arguments.length > 1) {
21439 for (var i = 1; i < arguments.length; i++) {
21440 args[i - 1] = arguments[i];
21441 }
21442 }
21443 queue.push(new Item(fun, args));
21444 if (queue.length === 1 && !draining) {
21445 runTimeout(drainQueue);
21446 }
21447 };
21448
21449 // v8 likes predictible objects
21450 function Item(fun, array) {
21451 this.fun = fun;
21452 this.array = array;
21453 }
21454 Item.prototype.run = function () {
21455 this.fun.apply(null, this.array);
21456 };
21457 process.title = 'browser';
21458 process.browser = true;
21459 process.env = {};
21460 process.argv = [];
21461 process.version = ''; // empty string to avoid regexp issues
21462 process.versions = {};
21463
21464 function noop() {}
21465
21466 process.on = noop;
21467 process.addListener = noop;
21468 process.once = noop;
21469 process.off = noop;
21470 process.removeListener = noop;
21471 process.removeAllListeners = noop;
21472 process.emit = noop;
21473
21474 process.binding = function (name) {
21475 throw new Error('process.binding is not supported');
21476 };
21477
21478 process.cwd = function () { return '/' };
21479 process.chdir = function (dir) {
21480 throw new Error('process.chdir is not supported');
21481 };
21482 process.umask = function() { return 0; };
21483
21484 },{}],14:[function(require,module,exports){
21485 module.exports = require("./lib/_stream_duplex.js")
21486
21487 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
21488 // a duplex stream is just a stream that is both readable and writable.
21489 // Since JS doesn't have multiple prototypal inheritance, this class
21490 // prototypally inherits from Readable, and then parasitically from
21491 // Writable.
21492
21493 'use strict';
21494
21495 /*<replacement>*/
21496
21497 var objectKeys = Object.keys || function (obj) {
21498 var keys = [];
21499 for (var key in obj) {
21500 keys.push(key);
21501 }return keys;
21502 };
21503 /*</replacement>*/
21504
21505 module.exports = Duplex;
21506
21507 /*<replacement>*/
21508 var processNextTick = require('process-nextick-args');
21509 /*</replacement>*/
21510
21511 /*<replacement>*/
21512 var util = require('core-util-is');
21513 util.inherits = require('inherits');
21514 /*</replacement>*/
21515
21516 var Readable = require('./_stream_readable');
21517 var Writable = require('./_stream_writable');
21518
21519 util.inherits(Duplex, Readable);
21520
21521 var keys = objectKeys(Writable.prototype);
21522 for (var v = 0; v < keys.length; v++) {
21523 var method = keys[v];
21524 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
21525 }
21526
21527 function Duplex(options) {
21528 if (!(this instanceof Duplex)) return new Duplex(options);
21529
21530 Readable.call(this, options);
21531 Writable.call(this, options);
21532
21533 if (options && options.readable === false) this.readable = false;
21534
21535 if (options && options.writable === false) this.writable = false;
21536
21537 this.allowHalfOpen = true;
21538 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
21539
21540 this.once('end', onend);
21541 }
21542
21543 // the no-half-open enforcer
21544 function onend() {
21545 // if we allow half-open state, or if the writable side ended,
21546 // then we're ok.
21547 if (this.allowHalfOpen || this._writableState.ended) return;
21548
21549 // no more data can be written.
21550 // But allow more writes to happen in this tick.
21551 processNextTick(onEndNT, this);
21552 }
21553
21554 function onEndNT(self) {
21555 self.end();
21556 }
21557
21558 function forEach(xs, f) {
21559 for (var i = 0, l = xs.length; i < l; i++) {
21560 f(xs[i], i);
21561 }
21562 }
21563 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
21564 // a passthrough stream.
21565 // basically just the most minimal sort of Transform stream.
21566 // Every written chunk gets output as-is.
21567
21568 'use strict';
21569
21570 module.exports = PassThrough;
21571
21572 var Transform = require('./_stream_transform');
21573
21574 /*<replacement>*/
21575 var util = require('core-util-is');
21576 util.inherits = require('inherits');
21577 /*</replacement>*/
21578
21579 util.inherits(PassThrough, Transform);
21580
21581 function PassThrough(options) {
21582 if (!(this instanceof PassThrough)) return new PassThrough(options);
21583
21584 Transform.call(this, options);
21585 }
21586
21587 PassThrough.prototype._transform = function (chunk, encoding, cb) {
21588 cb(null, chunk);
21589 };
21590 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
21591 (function (process){
21592 'use strict';
21593
21594 module.exports = Readable;
21595
21596 /*<replacement>*/
21597 var processNextTick = require('process-nextick-args');
21598 /*</replacement>*/
21599
21600 /*<replacement>*/
21601 var isArray = require('isarray');
21602 /*</replacement>*/
21603
21604 /*<replacement>*/
21605 var Duplex;
21606 /*</replacement>*/
21607
21608 Readable.ReadableState = ReadableState;
21609
21610 /*<replacement>*/
21611 var EE = require('events').EventEmitter;
21612
21613 var EElistenerCount = function (emitter, type) {
21614 return emitter.listeners(type).length;
21615 };
21616 /*</replacement>*/
21617
21618 /*<replacement>*/
21619 var Stream;
21620 (function () {
21621 try {
21622 Stream = require('st' + 'ream');
21623 } catch (_) {} finally {
21624 if (!Stream) Stream = require('events').EventEmitter;
21625 }
21626 })();
21627 /*</replacement>*/
21628
21629 var Buffer = require('buffer').Buffer;
21630 /*<replacement>*/
21631 var bufferShim = require('buffer-shims');
21632 /*</replacement>*/
21633
21634 /*<replacement>*/
21635 var util = require('core-util-is');
21636 util.inherits = require('inherits');
21637 /*</replacement>*/
21638
21639 /*<replacement>*/
21640 var debugUtil = require('util');
21641 var debug = void 0;
21642 if (debugUtil && debugUtil.debuglog) {
21643 debug = debugUtil.debuglog('stream');
21644 } else {
21645 debug = function () {};
21646 }
21647 /*</replacement>*/
21648
21649 var BufferList = require('./internal/streams/BufferList');
21650 var StringDecoder;
21651
21652 util.inherits(Readable, Stream);
21653
21654 function prependListener(emitter, event, fn) {
21655 // Sadly this is not cacheable as some libraries bundle their own
21656 // event emitter implementation with them.
21657 if (typeof emitter.prependListener === 'function') {
21658 return emitter.prependListener(event, fn);
21659 } else {
21660 // This is a hack to make sure that our error handler is attached before any
21661 // userland ones. NEVER DO THIS. This is here only because this code needs
21662 // to continue to work with older versions of Node.js that do not include
21663 // the prependListener() method. The goal is to eventually remove this hack.
21664 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]];
21665 }
21666 }
21667
21668 function ReadableState(options, stream) {
21669 Duplex = Duplex || require('./_stream_duplex');
21670
21671 options = options || {};
21672
21673 // object stream flag. Used to make read(n) ignore n and to
21674 // make all the buffer merging and length checks go away
21675 this.objectMode = !!options.objectMode;
21676
21677 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
21678
21679 // the point at which it stops calling _read() to fill the buffer
21680 // Note: 0 is a valid value, means "don't call _read preemptively ever"
21681 var hwm = options.highWaterMark;
21682 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
21683 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
21684
21685 // cast to ints.
21686 this.highWaterMark = ~ ~this.highWaterMark;
21687
21688 // A linked list is used to store data chunks instead of an array because the
21689 // linked list can remove elements from the beginning faster than
21690 // array.shift()
21691 this.buffer = new BufferList();
21692 this.length = 0;
21693 this.pipes = null;
21694 this.pipesCount = 0;
21695 this.flowing = null;
21696 this.ended = false;
21697 this.endEmitted = false;
21698 this.reading = false;
21699
21700 // a flag to be able to tell if the onwrite cb is called immediately,
21701 // or on a later tick. We set this to true at first, because any
21702 // actions that shouldn't happen until "later" should generally also
21703 // not happen before the first write call.
21704 this.sync = true;
21705
21706 // whenever we return null, then we set a flag to say
21707 // that we're awaiting a 'readable' event emission.
21708 this.needReadable = false;
21709 this.emittedReadable = false;
21710 this.readableListening = false;
21711 this.resumeScheduled = false;
21712
21713 // Crypto is kind of old and crusty. Historically, its default string
21714 // encoding is 'binary' so we have to make this configurable.
21715 // Everything else in the universe uses 'utf8', though.
21716 this.defaultEncoding = options.defaultEncoding || 'utf8';
21717
21718 // when piping, we only care about 'readable' events that happen
21719 // after read()ing all the bytes and not getting any pushback.
21720 this.ranOut = false;
21721
21722 // the number of writers that are awaiting a drain event in .pipe()s
21723 this.awaitDrain = 0;
21724
21725 // if true, a maybeReadMore has been scheduled
21726 this.readingMore = false;
21727
21728 this.decoder = null;
21729 this.encoding = null;
21730 if (options.encoding) {
21731 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21732 this.decoder = new StringDecoder(options.encoding);
21733 this.encoding = options.encoding;
21734 }
21735 }
21736
21737 function Readable(options) {
21738 Duplex = Duplex || require('./_stream_duplex');
21739
21740 if (!(this instanceof Readable)) return new Readable(options);
21741
21742 this._readableState = new ReadableState(options, this);
21743
21744 // legacy
21745 this.readable = true;
21746
21747 if (options && typeof options.read === 'function') this._read = options.read;
21748
21749 Stream.call(this);
21750 }
21751
21752 // Manually shove something into the read() buffer.
21753 // This returns true if the highWaterMark has not been hit yet,
21754 // similar to how Writable.write() returns true if you should
21755 // write() some more.
21756 Readable.prototype.push = function (chunk, encoding) {
21757 var state = this._readableState;
21758
21759 if (!state.objectMode && typeof chunk === 'string') {
21760 encoding = encoding || state.defaultEncoding;
21761 if (encoding !== state.encoding) {
21762 chunk = bufferShim.from(chunk, encoding);
21763 encoding = '';
21764 }
21765 }
21766
21767 return readableAddChunk(this, state, chunk, encoding, false);
21768 };
21769
21770 // Unshift should *always* be something directly out of read()
21771 Readable.prototype.unshift = function (chunk) {
21772 var state = this._readableState;
21773 return readableAddChunk(this, state, chunk, '', true);
21774 };
21775
21776 Readable.prototype.isPaused = function () {
21777 return this._readableState.flowing === false;
21778 };
21779
21780 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
21781 var er = chunkInvalid(state, chunk);
21782 if (er) {
21783 stream.emit('error', er);
21784 } else if (chunk === null) {
21785 state.reading = false;
21786 onEofChunk(stream, state);
21787 } else if (state.objectMode || chunk && chunk.length > 0) {
21788 if (state.ended && !addToFront) {
21789 var e = new Error('stream.push() after EOF');
21790 stream.emit('error', e);
21791 } else if (state.endEmitted && addToFront) {
21792 var _e = new Error('stream.unshift() after end event');
21793 stream.emit('error', _e);
21794 } else {
21795 var skipAdd;
21796 if (state.decoder && !addToFront && !encoding) {
21797 chunk = state.decoder.write(chunk);
21798 skipAdd = !state.objectMode && chunk.length === 0;
21799 }
21800
21801 if (!addToFront) state.reading = false;
21802
21803 // Don't add to the buffer if we've decoded to an empty string chunk and
21804 // we're not in object mode
21805 if (!skipAdd) {
21806 // if we want the data now, just emit it.
21807 if (state.flowing && state.length === 0 && !state.sync) {
21808 stream.emit('data', chunk);
21809 stream.read(0);
21810 } else {
21811 // update the buffer info.
21812 state.length += state.objectMode ? 1 : chunk.length;
21813 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
21814
21815 if (state.needReadable) emitReadable(stream);
21816 }
21817 }
21818
21819 maybeReadMore(stream, state);
21820 }
21821 } else if (!addToFront) {
21822 state.reading = false;
21823 }
21824
21825 return needMoreData(state);
21826 }
21827
21828 // if it's past the high water mark, we can push in some more.
21829 // Also, if we have no data yet, we can stand some
21830 // more bytes. This is to work around cases where hwm=0,
21831 // such as the repl. Also, if the push() triggered a
21832 // readable event, and the user called read(largeNumber) such that
21833 // needReadable was set, then we ought to push more, so that another
21834 // 'readable' event will be triggered.
21835 function needMoreData(state) {
21836 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
21837 }
21838
21839 // backwards compatibility.
21840 Readable.prototype.setEncoding = function (enc) {
21841 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21842 this._readableState.decoder = new StringDecoder(enc);
21843 this._readableState.encoding = enc;
21844 return this;
21845 };
21846
21847 // Don't raise the hwm > 8MB
21848 var MAX_HWM = 0x800000;
21849 function computeNewHighWaterMark(n) {
21850 if (n >= MAX_HWM) {
21851 n = MAX_HWM;
21852 } else {
21853 // Get the next highest power of 2 to prevent increasing hwm excessively in
21854 // tiny amounts
21855 n--;
21856 n |= n >>> 1;
21857 n |= n >>> 2;
21858 n |= n >>> 4;
21859 n |= n >>> 8;
21860 n |= n >>> 16;
21861 n++;
21862 }
21863 return n;
21864 }
21865
21866 // This function is designed to be inlinable, so please take care when making
21867 // changes to the function body.
21868 function howMuchToRead(n, state) {
21869 if (n <= 0 || state.length === 0 && state.ended) return 0;
21870 if (state.objectMode) return 1;
21871 if (n !== n) {
21872 // Only flow one buffer at a time
21873 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
21874 }
21875 // If we're asking for more than the current hwm, then raise the hwm.
21876 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
21877 if (n <= state.length) return n;
21878 // Don't have enough
21879 if (!state.ended) {
21880 state.needReadable = true;
21881 return 0;
21882 }
21883 return state.length;
21884 }
21885
21886 // you can override either this method, or the async _read(n) below.
21887 Readable.prototype.read = function (n) {
21888 debug('read', n);
21889 n = parseInt(n, 10);
21890 var state = this._readableState;
21891 var nOrig = n;
21892
21893 if (n !== 0) state.emittedReadable = false;
21894
21895 // if we're doing read(0) to trigger a readable event, but we
21896 // already have a bunch of data in the buffer, then just trigger
21897 // the 'readable' event and move on.
21898 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
21899 debug('read: emitReadable', state.length, state.ended);
21900 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
21901 return null;
21902 }
21903
21904 n = howMuchToRead(n, state);
21905
21906 // if we've ended, and we're now clear, then finish it up.
21907 if (n === 0 && state.ended) {
21908 if (state.length === 0) endReadable(this);
21909 return null;
21910 }
21911
21912 // All the actual chunk generation logic needs to be
21913 // *below* the call to _read. The reason is that in certain
21914 // synthetic stream cases, such as passthrough streams, _read
21915 // may be a completely synchronous operation which may change
21916 // the state of the read buffer, providing enough data when
21917 // before there was *not* enough.
21918 //
21919 // So, the steps are:
21920 // 1. Figure out what the state of things will be after we do
21921 // a read from the buffer.
21922 //
21923 // 2. If that resulting state will trigger a _read, then call _read.
21924 // Note that this may be asynchronous, or synchronous. Yes, it is
21925 // deeply ugly to write APIs this way, but that still doesn't mean
21926 // that the Readable class should behave improperly, as streams are
21927 // designed to be sync/async agnostic.
21928 // Take note if the _read call is sync or async (ie, if the read call
21929 // has returned yet), so that we know whether or not it's safe to emit
21930 // 'readable' etc.
21931 //
21932 // 3. Actually pull the requested chunks out of the buffer and return.
21933
21934 // if we need a readable event, then we need to do some reading.
21935 var doRead = state.needReadable;
21936 debug('need readable', doRead);
21937
21938 // if we currently have less than the highWaterMark, then also read some
21939 if (state.length === 0 || state.length - n < state.highWaterMark) {
21940 doRead = true;
21941 debug('length less than watermark', doRead);
21942 }
21943
21944 // however, if we've ended, then there's no point, and if we're already
21945 // reading, then it's unnecessary.
21946 if (state.ended || state.reading) {
21947 doRead = false;
21948 debug('reading or ended', doRead);
21949 } else if (doRead) {
21950 debug('do read');
21951 state.reading = true;
21952 state.sync = true;
21953 // if the length is currently zero, then we *need* a readable event.
21954 if (state.length === 0) state.needReadable = true;
21955 // call internal read method
21956 this._read(state.highWaterMark);
21957 state.sync = false;
21958 // If _read pushed data synchronously, then `reading` will be false,
21959 // and we need to re-evaluate how much data we can return to the user.
21960 if (!state.reading) n = howMuchToRead(nOrig, state);
21961 }
21962
21963 var ret;
21964 if (n > 0) ret = fromList(n, state);else ret = null;
21965
21966 if (ret === null) {
21967 state.needReadable = true;
21968 n = 0;
21969 } else {
21970 state.length -= n;
21971 }
21972
21973 if (state.length === 0) {
21974 // If we have nothing in the buffer, then we want to know
21975 // as soon as we *do* get something into the buffer.
21976 if (!state.ended) state.needReadable = true;
21977
21978 // If we tried to read() past the EOF, then emit end on the next tick.
21979 if (nOrig !== n && state.ended) endReadable(this);
21980 }
21981
21982 if (ret !== null) this.emit('data', ret);
21983
21984 return ret;
21985 };
21986
21987 function chunkInvalid(state, chunk) {
21988 var er = null;
21989 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
21990 er = new TypeError('Invalid non-string/buffer chunk');
21991 }
21992 return er;
21993 }
21994
21995 function onEofChunk(stream, state) {
21996 if (state.ended) return;
21997 if (state.decoder) {
21998 var chunk = state.decoder.end();
21999 if (chunk && chunk.length) {
22000 state.buffer.push(chunk);
22001 state.length += state.objectMode ? 1 : chunk.length;
22002 }
22003 }
22004 state.ended = true;
22005
22006 // emit 'readable' now to make sure it gets picked up.
22007 emitReadable(stream);
22008 }
22009
22010 // Don't emit readable right away in sync mode, because this can trigger
22011 // another read() call => stack overflow. This way, it might trigger
22012 // a nextTick recursion warning, but that's not so bad.
22013 function emitReadable(stream) {
22014 var state = stream._readableState;
22015 state.needReadable = false;
22016 if (!state.emittedReadable) {
22017 debug('emitReadable', state.flowing);
22018 state.emittedReadable = true;
22019 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
22020 }
22021 }
22022
22023 function emitReadable_(stream) {
22024 debug('emit readable');
22025 stream.emit('readable');
22026 flow(stream);
22027 }
22028
22029 // at this point, the user has presumably seen the 'readable' event,
22030 // and called read() to consume some data. that may have triggered
22031 // in turn another _read(n) call, in which case reading = true if
22032 // it's in progress.
22033 // However, if we're not ended, or reading, and the length < hwm,
22034 // then go ahead and try to read some more preemptively.
22035 function maybeReadMore(stream, state) {
22036 if (!state.readingMore) {
22037 state.readingMore = true;
22038 processNextTick(maybeReadMore_, stream, state);
22039 }
22040 }
22041
22042 function maybeReadMore_(stream, state) {
22043 var len = state.length;
22044 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
22045 debug('maybeReadMore read 0');
22046 stream.read(0);
22047 if (len === state.length)
22048 // didn't get any data, stop spinning.
22049 break;else len = state.length;
22050 }
22051 state.readingMore = false;
22052 }
22053
22054 // abstract method. to be overridden in specific implementation classes.
22055 // call cb(er, data) where data is <= n in length.
22056 // for virtual (non-string, non-buffer) streams, "length" is somewhat
22057 // arbitrary, and perhaps not very meaningful.
22058 Readable.prototype._read = function (n) {
22059 this.emit('error', new Error('_read() is not implemented'));
22060 };
22061
22062 Readable.prototype.pipe = function (dest, pipeOpts) {
22063 var src = this;
22064 var state = this._readableState;
22065
22066 switch (state.pipesCount) {
22067 case 0:
22068 state.pipes = dest;
22069 break;
22070 case 1:
22071 state.pipes = [state.pipes, dest];
22072 break;
22073 default:
22074 state.pipes.push(dest);
22075 break;
22076 }
22077 state.pipesCount += 1;
22078 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
22079
22080 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
22081
22082 var endFn = doEnd ? onend : cleanup;
22083 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
22084
22085 dest.on('unpipe', onunpipe);
22086 function onunpipe(readable) {
22087 debug('onunpipe');
22088 if (readable === src) {
22089 cleanup();
22090 }
22091 }
22092
22093 function onend() {
22094 debug('onend');
22095 dest.end();
22096 }
22097
22098 // when the dest drains, it reduces the awaitDrain counter
22099 // on the source. This would be more elegant with a .once()
22100 // handler in flow(), but adding and removing repeatedly is
22101 // too slow.
22102 var ondrain = pipeOnDrain(src);
22103 dest.on('drain', ondrain);
22104
22105 var cleanedUp = false;
22106 function cleanup() {
22107 debug('cleanup');
22108 // cleanup event handlers once the pipe is broken
22109 dest.removeListener('close', onclose);
22110 dest.removeListener('finish', onfinish);
22111 dest.removeListener('drain', ondrain);
22112 dest.removeListener('error', onerror);
22113 dest.removeListener('unpipe', onunpipe);
22114 src.removeListener('end', onend);
22115 src.removeListener('end', cleanup);
22116 src.removeListener('data', ondata);
22117
22118 cleanedUp = true;
22119
22120 // if the reader is waiting for a drain event from this
22121 // specific writer, then it would cause it to never start
22122 // flowing again.
22123 // So, if this is awaiting a drain, then we just call it now.
22124 // If we don't know, then assume that we are waiting for one.
22125 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
22126 }
22127
22128 // If the user pushes more data while we're writing to dest then we'll end up
22129 // in ondata again. However, we only want to increase awaitDrain once because
22130 // dest will only emit one 'drain' event for the multiple writes.
22131 // => Introduce a guard on increasing awaitDrain.
22132 var increasedAwaitDrain = false;
22133 src.on('data', ondata);
22134 function ondata(chunk) {
22135 debug('ondata');
22136 increasedAwaitDrain = false;
22137 var ret = dest.write(chunk);
22138 if (false === ret && !increasedAwaitDrain) {
22139 // If the user unpiped during `dest.write()`, it is possible
22140 // to get stuck in a permanently paused state if that write
22141 // also returned false.
22142 // => Check whether `dest` is still a piping destination.
22143 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
22144 debug('false write response, pause', src._readableState.awaitDrain);
22145 src._readableState.awaitDrain++;
22146 increasedAwaitDrain = true;
22147 }
22148 src.pause();
22149 }
22150 }
22151
22152 // if the dest has an error, then stop piping into it.
22153 // however, don't suppress the throwing behavior for this.
22154 function onerror(er) {
22155 debug('onerror', er);
22156 unpipe();
22157 dest.removeListener('error', onerror);
22158 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
22159 }
22160
22161 // Make sure our error handler is attached before userland ones.
22162 prependListener(dest, 'error', onerror);
22163
22164 // Both close and finish should trigger unpipe, but only once.
22165 function onclose() {
22166 dest.removeListener('finish', onfinish);
22167 unpipe();
22168 }
22169 dest.once('close', onclose);
22170 function onfinish() {
22171 debug('onfinish');
22172 dest.removeListener('close', onclose);
22173 unpipe();
22174 }
22175 dest.once('finish', onfinish);
22176
22177 function unpipe() {
22178 debug('unpipe');
22179 src.unpipe(dest);
22180 }
22181
22182 // tell the dest that it's being piped to
22183 dest.emit('pipe', src);
22184
22185 // start the flow if it hasn't been started already.
22186 if (!state.flowing) {
22187 debug('pipe resume');
22188 src.resume();
22189 }
22190
22191 return dest;
22192 };
22193
22194 function pipeOnDrain(src) {
22195 return function () {
22196 var state = src._readableState;
22197 debug('pipeOnDrain', state.awaitDrain);
22198 if (state.awaitDrain) state.awaitDrain--;
22199 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
22200 state.flowing = true;
22201 flow(src);
22202 }
22203 };
22204 }
22205
22206 Readable.prototype.unpipe = function (dest) {
22207 var state = this._readableState;
22208
22209 // if we're not piping anywhere, then do nothing.
22210 if (state.pipesCount === 0) return this;
22211
22212 // just one destination. most common case.
22213 if (state.pipesCount === 1) {
22214 // passed in one, but it's not the right one.
22215 if (dest && dest !== state.pipes) return this;
22216
22217 if (!dest) dest = state.pipes;
22218
22219 // got a match.
22220 state.pipes = null;
22221 state.pipesCount = 0;
22222 state.flowing = false;
22223 if (dest) dest.emit('unpipe', this);
22224 return this;
22225 }
22226
22227 // slow case. multiple pipe destinations.
22228
22229 if (!dest) {
22230 // remove all.
22231 var dests = state.pipes;
22232 var len = state.pipesCount;
22233 state.pipes = null;
22234 state.pipesCount = 0;
22235 state.flowing = false;
22236
22237 for (var i = 0; i < len; i++) {
22238 dests[i].emit('unpipe', this);
22239 }return this;
22240 }
22241
22242 // try to find the right one.
22243 var index = indexOf(state.pipes, dest);
22244 if (index === -1) return this;
22245
22246 state.pipes.splice(index, 1);
22247 state.pipesCount -= 1;
22248 if (state.pipesCount === 1) state.pipes = state.pipes[0];
22249
22250 dest.emit('unpipe', this);
22251
22252 return this;
22253 };
22254
22255 // set up data events if they are asked for
22256 // Ensure readable listeners eventually get something
22257 Readable.prototype.on = function (ev, fn) {
22258 var res = Stream.prototype.on.call(this, ev, fn);
22259
22260 if (ev === 'data') {
22261 // Start flowing on next tick if stream isn't explicitly paused
22262 if (this._readableState.flowing !== false) this.resume();
22263 } else if (ev === 'readable') {
22264 var state = this._readableState;
22265 if (!state.endEmitted && !state.readableListening) {
22266 state.readableListening = state.needReadable = true;
22267 state.emittedReadable = false;
22268 if (!state.reading) {
22269 processNextTick(nReadingNextTick, this);
22270 } else if (state.length) {
22271 emitReadable(this, state);
22272 }
22273 }
22274 }
22275
22276 return res;
22277 };
22278 Readable.prototype.addListener = Readable.prototype.on;
22279
22280 function nReadingNextTick(self) {
22281 debug('readable nexttick read 0');
22282 self.read(0);
22283 }
22284
22285 // pause() and resume() are remnants of the legacy readable stream API
22286 // If the user uses them, then switch into old mode.
22287 Readable.prototype.resume = function () {
22288 var state = this._readableState;
22289 if (!state.flowing) {
22290 debug('resume');
22291 state.flowing = true;
22292 resume(this, state);
22293 }
22294 return this;
22295 };
22296
22297 function resume(stream, state) {
22298 if (!state.resumeScheduled) {
22299 state.resumeScheduled = true;
22300 processNextTick(resume_, stream, state);
22301 }
22302 }
22303
22304 function resume_(stream, state) {
22305 if (!state.reading) {
22306 debug('resume read 0');
22307 stream.read(0);
22308 }
22309
22310 state.resumeScheduled = false;
22311 state.awaitDrain = 0;
22312 stream.emit('resume');
22313 flow(stream);
22314 if (state.flowing && !state.reading) stream.read(0);
22315 }
22316
22317 Readable.prototype.pause = function () {
22318 debug('call pause flowing=%j', this._readableState.flowing);
22319 if (false !== this._readableState.flowing) {
22320 debug('pause');
22321 this._readableState.flowing = false;
22322 this.emit('pause');
22323 }
22324 return this;
22325 };
22326
22327 function flow(stream) {
22328 var state = stream._readableState;
22329 debug('flow', state.flowing);
22330 while (state.flowing && stream.read() !== null) {}
22331 }
22332
22333 // wrap an old-style stream as the async data source.
22334 // This is *not* part of the readable stream interface.
22335 // It is an ugly unfortunate mess of history.
22336 Readable.prototype.wrap = function (stream) {
22337 var state = this._readableState;
22338 var paused = false;
22339
22340 var self = this;
22341 stream.on('end', function () {
22342 debug('wrapped end');
22343 if (state.decoder && !state.ended) {
22344 var chunk = state.decoder.end();
22345 if (chunk && chunk.length) self.push(chunk);
22346 }
22347
22348 self.push(null);
22349 });
22350
22351 stream.on('data', function (chunk) {
22352 debug('wrapped data');
22353 if (state.decoder) chunk = state.decoder.write(chunk);
22354
22355 // don't skip over falsy values in objectMode
22356 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
22357
22358 var ret = self.push(chunk);
22359 if (!ret) {
22360 paused = true;
22361 stream.pause();
22362 }
22363 });
22364
22365 // proxy all the other methods.
22366 // important when wrapping filters and duplexes.
22367 for (var i in stream) {
22368 if (this[i] === undefined && typeof stream[i] === 'function') {
22369 this[i] = function (method) {
22370 return function () {
22371 return stream[method].apply(stream, arguments);
22372 };
22373 }(i);
22374 }
22375 }
22376
22377 // proxy certain important events.
22378 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
22379 forEach(events, function (ev) {
22380 stream.on(ev, self.emit.bind(self, ev));
22381 });
22382
22383 // when we try to consume some more bytes, simply unpause the
22384 // underlying stream.
22385 self._read = function (n) {
22386 debug('wrapped _read', n);
22387 if (paused) {
22388 paused = false;
22389 stream.resume();
22390 }
22391 };
22392
22393 return self;
22394 };
22395
22396 // exposed for testing purposes only.
22397 Readable._fromList = fromList;
22398
22399 // Pluck off n bytes from an array of buffers.
22400 // Length is the combined lengths of all the buffers in the list.
22401 // This function is designed to be inlinable, so please take care when making
22402 // changes to the function body.
22403 function fromList(n, state) {
22404 // nothing buffered
22405 if (state.length === 0) return null;
22406
22407 var ret;
22408 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
22409 // read it all, truncate the list
22410 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);
22411 state.buffer.clear();
22412 } else {
22413 // read part of list
22414 ret = fromListPartial(n, state.buffer, state.decoder);
22415 }
22416
22417 return ret;
22418 }
22419
22420 // Extracts only enough buffered data to satisfy the amount requested.
22421 // This function is designed to be inlinable, so please take care when making
22422 // changes to the function body.
22423 function fromListPartial(n, list, hasStrings) {
22424 var ret;
22425 if (n < list.head.data.length) {
22426 // slice is the same for buffers and strings
22427 ret = list.head.data.slice(0, n);
22428 list.head.data = list.head.data.slice(n);
22429 } else if (n === list.head.data.length) {
22430 // first chunk is a perfect match
22431 ret = list.shift();
22432 } else {
22433 // result spans more than one buffer
22434 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
22435 }
22436 return ret;
22437 }
22438
22439 // Copies a specified amount of characters from the list of buffered data
22440 // chunks.
22441 // This function is designed to be inlinable, so please take care when making
22442 // changes to the function body.
22443 function copyFromBufferString(n, list) {
22444 var p = list.head;
22445 var c = 1;
22446 var ret = p.data;
22447 n -= ret.length;
22448 while (p = p.next) {
22449 var str = p.data;
22450 var nb = n > str.length ? str.length : n;
22451 if (nb === str.length) ret += str;else ret += str.slice(0, n);
22452 n -= nb;
22453 if (n === 0) {
22454 if (nb === str.length) {
22455 ++c;
22456 if (p.next) list.head = p.next;else list.head = list.tail = null;
22457 } else {
22458 list.head = p;
22459 p.data = str.slice(nb);
22460 }
22461 break;
22462 }
22463 ++c;
22464 }
22465 list.length -= c;
22466 return ret;
22467 }
22468
22469 // Copies a specified amount of bytes from the list of buffered data chunks.
22470 // This function is designed to be inlinable, so please take care when making
22471 // changes to the function body.
22472 function copyFromBuffer(n, list) {
22473 var ret = bufferShim.allocUnsafe(n);
22474 var p = list.head;
22475 var c = 1;
22476 p.data.copy(ret);
22477 n -= p.data.length;
22478 while (p = p.next) {
22479 var buf = p.data;
22480 var nb = n > buf.length ? buf.length : n;
22481 buf.copy(ret, ret.length - n, 0, nb);
22482 n -= nb;
22483 if (n === 0) {
22484 if (nb === buf.length) {
22485 ++c;
22486 if (p.next) list.head = p.next;else list.head = list.tail = null;
22487 } else {
22488 list.head = p;
22489 p.data = buf.slice(nb);
22490 }
22491 break;
22492 }
22493 ++c;
22494 }
22495 list.length -= c;
22496 return ret;
22497 }
22498
22499 function endReadable(stream) {
22500 var state = stream._readableState;
22501
22502 // If we get here before consuming all the bytes, then that is a
22503 // bug in node. Should never happen.
22504 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
22505
22506 if (!state.endEmitted) {
22507 state.ended = true;
22508 processNextTick(endReadableNT, state, stream);
22509 }
22510 }
22511
22512 function endReadableNT(state, stream) {
22513 // Check that we didn't get one last unshift.
22514 if (!state.endEmitted && state.length === 0) {
22515 state.endEmitted = true;
22516 stream.readable = false;
22517 stream.emit('end');
22518 }
22519 }
22520
22521 function forEach(xs, f) {
22522 for (var i = 0, l = xs.length; i < l; i++) {
22523 f(xs[i], i);
22524 }
22525 }
22526
22527 function indexOf(xs, x) {
22528 for (var i = 0, l = xs.length; i < l; i++) {
22529 if (xs[i] === x) return i;
22530 }
22531 return -1;
22532 }
22533 }).call(this,require('_process'))
22534 },{"./_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){
22535 // a transform stream is a readable/writable stream where you do
22536 // something with the data. Sometimes it's called a "filter",
22537 // but that's not a great name for it, since that implies a thing where
22538 // some bits pass through, and others are simply ignored. (That would
22539 // be a valid example of a transform, of course.)
22540 //
22541 // While the output is causally related to the input, it's not a
22542 // necessarily symmetric or synchronous transformation. For example,
22543 // a zlib stream might take multiple plain-text writes(), and then
22544 // emit a single compressed chunk some time in the future.
22545 //
22546 // Here's how this works:
22547 //
22548 // The Transform stream has all the aspects of the readable and writable
22549 // stream classes. When you write(chunk), that calls _write(chunk,cb)
22550 // internally, and returns false if there's a lot of pending writes
22551 // buffered up. When you call read(), that calls _read(n) until
22552 // there's enough pending readable data buffered up.
22553 //
22554 // In a transform stream, the written data is placed in a buffer. When
22555 // _read(n) is called, it transforms the queued up data, calling the
22556 // buffered _write cb's as it consumes chunks. If consuming a single
22557 // written chunk would result in multiple output chunks, then the first
22558 // outputted bit calls the readcb, and subsequent chunks just go into
22559 // the read buffer, and will cause it to emit 'readable' if necessary.
22560 //
22561 // This way, back-pressure is actually determined by the reading side,
22562 // since _read has to be called to start processing a new chunk. However,
22563 // a pathological inflate type of transform can cause excessive buffering
22564 // here. For example, imagine a stream where every byte of input is
22565 // interpreted as an integer from 0-255, and then results in that many
22566 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
22567 // 1kb of data being output. In this case, you could write a very small
22568 // amount of input, and end up with a very large amount of output. In
22569 // such a pathological inflating mechanism, there'd be no way to tell
22570 // the system to stop doing the transform. A single 4MB write could
22571 // cause the system to run out of memory.
22572 //
22573 // However, even in such a pathological case, only a single written chunk
22574 // would be consumed, and then the rest would wait (un-transformed) until
22575 // the results of the previous transformed chunk were consumed.
22576
22577 'use strict';
22578
22579 module.exports = Transform;
22580
22581 var Duplex = require('./_stream_duplex');
22582
22583 /*<replacement>*/
22584 var util = require('core-util-is');
22585 util.inherits = require('inherits');
22586 /*</replacement>*/
22587
22588 util.inherits(Transform, Duplex);
22589
22590 function TransformState(stream) {
22591 this.afterTransform = function (er, data) {
22592 return afterTransform(stream, er, data);
22593 };
22594
22595 this.needTransform = false;
22596 this.transforming = false;
22597 this.writecb = null;
22598 this.writechunk = null;
22599 this.writeencoding = null;
22600 }
22601
22602 function afterTransform(stream, er, data) {
22603 var ts = stream._transformState;
22604 ts.transforming = false;
22605
22606 var cb = ts.writecb;
22607
22608 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
22609
22610 ts.writechunk = null;
22611 ts.writecb = null;
22612
22613 if (data !== null && data !== undefined) stream.push(data);
22614
22615 cb(er);
22616
22617 var rs = stream._readableState;
22618 rs.reading = false;
22619 if (rs.needReadable || rs.length < rs.highWaterMark) {
22620 stream._read(rs.highWaterMark);
22621 }
22622 }
22623
22624 function Transform(options) {
22625 if (!(this instanceof Transform)) return new Transform(options);
22626
22627 Duplex.call(this, options);
22628
22629 this._transformState = new TransformState(this);
22630
22631 var stream = this;
22632
22633 // start out asking for a readable event once data is transformed.
22634 this._readableState.needReadable = true;
22635
22636 // we have implemented the _read method, and done the other things
22637 // that Readable wants before the first _read call, so unset the
22638 // sync guard flag.
22639 this._readableState.sync = false;
22640
22641 if (options) {
22642 if (typeof options.transform === 'function') this._transform = options.transform;
22643
22644 if (typeof options.flush === 'function') this._flush = options.flush;
22645 }
22646
22647 // When the writable side finishes, then flush out anything remaining.
22648 this.once('prefinish', function () {
22649 if (typeof this._flush === 'function') this._flush(function (er, data) {
22650 done(stream, er, data);
22651 });else done(stream);
22652 });
22653 }
22654
22655 Transform.prototype.push = function (chunk, encoding) {
22656 this._transformState.needTransform = false;
22657 return Duplex.prototype.push.call(this, chunk, encoding);
22658 };
22659
22660 // This is the part where you do stuff!
22661 // override this function in implementation classes.
22662 // 'chunk' is an input chunk.
22663 //
22664 // Call `push(newChunk)` to pass along transformed output
22665 // to the readable side. You may call 'push' zero or more times.
22666 //
22667 // Call `cb(err)` when you are done with this chunk. If you pass
22668 // an error, then that'll put the hurt on the whole operation. If you
22669 // never call cb(), then you'll never get another chunk.
22670 Transform.prototype._transform = function (chunk, encoding, cb) {
22671 throw new Error('_transform() is not implemented');
22672 };
22673
22674 Transform.prototype._write = function (chunk, encoding, cb) {
22675 var ts = this._transformState;
22676 ts.writecb = cb;
22677 ts.writechunk = chunk;
22678 ts.writeencoding = encoding;
22679 if (!ts.transforming) {
22680 var rs = this._readableState;
22681 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
22682 }
22683 };
22684
22685 // Doesn't matter what the args are here.
22686 // _transform does all the work.
22687 // That we got here means that the readable side wants more data.
22688 Transform.prototype._read = function (n) {
22689 var ts = this._transformState;
22690
22691 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
22692 ts.transforming = true;
22693 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
22694 } else {
22695 // mark that we need a transform, so that any data that comes in
22696 // will get processed, now that we've asked for it.
22697 ts.needTransform = true;
22698 }
22699 };
22700
22701 function done(stream, er, data) {
22702 if (er) return stream.emit('error', er);
22703
22704 if (data !== null && data !== undefined) stream.push(data);
22705
22706 // if there's nothing in the write buffer, then that means
22707 // that nothing more will ever be provided
22708 var ws = stream._writableState;
22709 var ts = stream._transformState;
22710
22711 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
22712
22713 if (ts.transforming) throw new Error('Calling transform done when still transforming');
22714
22715 return stream.push(null);
22716 }
22717 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
22718 (function (process){
22719 // A bit simpler than readable streams.
22720 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
22721 // the drain event emission and buffering.
22722
22723 'use strict';
22724
22725 module.exports = Writable;
22726
22727 /*<replacement>*/
22728 var processNextTick = require('process-nextick-args');
22729 /*</replacement>*/
22730
22731 /*<replacement>*/
22732 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
22733 /*</replacement>*/
22734
22735 /*<replacement>*/
22736 var Duplex;
22737 /*</replacement>*/
22738
22739 Writable.WritableState = WritableState;
22740
22741 /*<replacement>*/
22742 var util = require('core-util-is');
22743 util.inherits = require('inherits');
22744 /*</replacement>*/
22745
22746 /*<replacement>*/
22747 var internalUtil = {
22748 deprecate: require('util-deprecate')
22749 };
22750 /*</replacement>*/
22751
22752 /*<replacement>*/
22753 var Stream;
22754 (function () {
22755 try {
22756 Stream = require('st' + 'ream');
22757 } catch (_) {} finally {
22758 if (!Stream) Stream = require('events').EventEmitter;
22759 }
22760 })();
22761 /*</replacement>*/
22762
22763 var Buffer = require('buffer').Buffer;
22764 /*<replacement>*/
22765 var bufferShim = require('buffer-shims');
22766 /*</replacement>*/
22767
22768 util.inherits(Writable, Stream);
22769
22770 function nop() {}
22771
22772 function WriteReq(chunk, encoding, cb) {
22773 this.chunk = chunk;
22774 this.encoding = encoding;
22775 this.callback = cb;
22776 this.next = null;
22777 }
22778
22779 function WritableState(options, stream) {
22780 Duplex = Duplex || require('./_stream_duplex');
22781
22782 options = options || {};
22783
22784 // object stream flag to indicate whether or not this stream
22785 // contains buffers or objects.
22786 this.objectMode = !!options.objectMode;
22787
22788 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
22789
22790 // the point at which write() starts returning false
22791 // Note: 0 is a valid value, means that we always return false if
22792 // the entire buffer is not flushed immediately on write()
22793 var hwm = options.highWaterMark;
22794 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
22795 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
22796
22797 // cast to ints.
22798 this.highWaterMark = ~ ~this.highWaterMark;
22799
22800 // drain event flag.
22801 this.needDrain = false;
22802 // at the start of calling end()
22803 this.ending = false;
22804 // when end() has been called, and returned
22805 this.ended = false;
22806 // when 'finish' is emitted
22807 this.finished = false;
22808
22809 // should we decode strings into buffers before passing to _write?
22810 // this is here so that some node-core streams can optimize string
22811 // handling at a lower level.
22812 var noDecode = options.decodeStrings === false;
22813 this.decodeStrings = !noDecode;
22814
22815 // Crypto is kind of old and crusty. Historically, its default string
22816 // encoding is 'binary' so we have to make this configurable.
22817 // Everything else in the universe uses 'utf8', though.
22818 this.defaultEncoding = options.defaultEncoding || 'utf8';
22819
22820 // not an actual buffer we keep track of, but a measurement
22821 // of how much we're waiting to get pushed to some underlying
22822 // socket or file.
22823 this.length = 0;
22824
22825 // a flag to see when we're in the middle of a write.
22826 this.writing = false;
22827
22828 // when true all writes will be buffered until .uncork() call
22829 this.corked = 0;
22830
22831 // a flag to be able to tell if the onwrite cb is called immediately,
22832 // or on a later tick. We set this to true at first, because any
22833 // actions that shouldn't happen until "later" should generally also
22834 // not happen before the first write call.
22835 this.sync = true;
22836
22837 // a flag to know if we're processing previously buffered items, which
22838 // may call the _write() callback in the same tick, so that we don't
22839 // end up in an overlapped onwrite situation.
22840 this.bufferProcessing = false;
22841
22842 // the callback that's passed to _write(chunk,cb)
22843 this.onwrite = function (er) {
22844 onwrite(stream, er);
22845 };
22846
22847 // the callback that the user supplies to write(chunk,encoding,cb)
22848 this.writecb = null;
22849
22850 // the amount that is being written when _write is called.
22851 this.writelen = 0;
22852
22853 this.bufferedRequest = null;
22854 this.lastBufferedRequest = null;
22855
22856 // number of pending user-supplied write callbacks
22857 // this must be 0 before 'finish' can be emitted
22858 this.pendingcb = 0;
22859
22860 // emit prefinish if the only thing we're waiting for is _write cbs
22861 // This is relevant for synchronous Transform streams
22862 this.prefinished = false;
22863
22864 // True if the error was already emitted and should not be thrown again
22865 this.errorEmitted = false;
22866
22867 // count buffered requests
22868 this.bufferedRequestCount = 0;
22869
22870 // allocate the first CorkedRequest, there is always
22871 // one allocated and free to use, and we maintain at most two
22872 this.corkedRequestsFree = new CorkedRequest(this);
22873 }
22874
22875 WritableState.prototype.getBuffer = function getBuffer() {
22876 var current = this.bufferedRequest;
22877 var out = [];
22878 while (current) {
22879 out.push(current);
22880 current = current.next;
22881 }
22882 return out;
22883 };
22884
22885 (function () {
22886 try {
22887 Object.defineProperty(WritableState.prototype, 'buffer', {
22888 get: internalUtil.deprecate(function () {
22889 return this.getBuffer();
22890 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
22891 });
22892 } catch (_) {}
22893 })();
22894
22895 // Test _writableState for inheritance to account for Duplex streams,
22896 // whose prototype chain only points to Readable.
22897 var realHasInstance;
22898 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
22899 realHasInstance = Function.prototype[Symbol.hasInstance];
22900 Object.defineProperty(Writable, Symbol.hasInstance, {
22901 value: function (object) {
22902 if (realHasInstance.call(this, object)) return true;
22903
22904 return object && object._writableState instanceof WritableState;
22905 }
22906 });
22907 } else {
22908 realHasInstance = function (object) {
22909 return object instanceof this;
22910 };
22911 }
22912
22913 function Writable(options) {
22914 Duplex = Duplex || require('./_stream_duplex');
22915
22916 // Writable ctor is applied to Duplexes, too.
22917 // `realHasInstance` is necessary because using plain `instanceof`
22918 // would return false, as no `_writableState` property is attached.
22919
22920 // Trying to use the custom `instanceof` for Writable here will also break the
22921 // Node.js LazyTransform implementation, which has a non-trivial getter for
22922 // `_writableState` that would lead to infinite recursion.
22923 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
22924 return new Writable(options);
22925 }
22926
22927 this._writableState = new WritableState(options, this);
22928
22929 // legacy.
22930 this.writable = true;
22931
22932 if (options) {
22933 if (typeof options.write === 'function') this._write = options.write;
22934
22935 if (typeof options.writev === 'function') this._writev = options.writev;
22936 }
22937
22938 Stream.call(this);
22939 }
22940
22941 // Otherwise people can pipe Writable streams, which is just wrong.
22942 Writable.prototype.pipe = function () {
22943 this.emit('error', new Error('Cannot pipe, not readable'));
22944 };
22945
22946 function writeAfterEnd(stream, cb) {
22947 var er = new Error('write after end');
22948 // TODO: defer error events consistently everywhere, not just the cb
22949 stream.emit('error', er);
22950 processNextTick(cb, er);
22951 }
22952
22953 // If we get something that is not a buffer, string, null, or undefined,
22954 // and we're not in objectMode, then that's an error.
22955 // Otherwise stream chunks are all considered to be of length=1, and the
22956 // watermarks determine how many objects to keep in the buffer, rather than
22957 // how many bytes or characters.
22958 function validChunk(stream, state, chunk, cb) {
22959 var valid = true;
22960 var er = false;
22961 // Always throw error if a null is written
22962 // if we are not in object mode then throw
22963 // if it is not a buffer, string, or undefined.
22964 if (chunk === null) {
22965 er = new TypeError('May not write null values to stream');
22966 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
22967 er = new TypeError('Invalid non-string/buffer chunk');
22968 }
22969 if (er) {
22970 stream.emit('error', er);
22971 processNextTick(cb, er);
22972 valid = false;
22973 }
22974 return valid;
22975 }
22976
22977 Writable.prototype.write = function (chunk, encoding, cb) {
22978 var state = this._writableState;
22979 var ret = false;
22980
22981 if (typeof encoding === 'function') {
22982 cb = encoding;
22983 encoding = null;
22984 }
22985
22986 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
22987
22988 if (typeof cb !== 'function') cb = nop;
22989
22990 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
22991 state.pendingcb++;
22992 ret = writeOrBuffer(this, state, chunk, encoding, cb);
22993 }
22994
22995 return ret;
22996 };
22997
22998 Writable.prototype.cork = function () {
22999 var state = this._writableState;
23000
23001 state.corked++;
23002 };
23003
23004 Writable.prototype.uncork = function () {
23005 var state = this._writableState;
23006
23007 if (state.corked) {
23008 state.corked--;
23009
23010 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
23011 }
23012 };
23013
23014 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
23015 // node::ParseEncoding() requires lower case.
23016 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
23017 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);
23018 this._writableState.defaultEncoding = encoding;
23019 return this;
23020 };
23021
23022 function decodeChunk(state, chunk, encoding) {
23023 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
23024 chunk = bufferShim.from(chunk, encoding);
23025 }
23026 return chunk;
23027 }
23028
23029 // if we're already writing something, then just put this
23030 // in the queue, and wait our turn. Otherwise, call _write
23031 // If we return false, then we need a drain event, so set that flag.
23032 function writeOrBuffer(stream, state, chunk, encoding, cb) {
23033 chunk = decodeChunk(state, chunk, encoding);
23034
23035 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
23036 var len = state.objectMode ? 1 : chunk.length;
23037
23038 state.length += len;
23039
23040 var ret = state.length < state.highWaterMark;
23041 // we must ensure that previous needDrain will not be reset to false.
23042 if (!ret) state.needDrain = true;
23043
23044 if (state.writing || state.corked) {
23045 var last = state.lastBufferedRequest;
23046 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
23047 if (last) {
23048 last.next = state.lastBufferedRequest;
23049 } else {
23050 state.bufferedRequest = state.lastBufferedRequest;
23051 }
23052 state.bufferedRequestCount += 1;
23053 } else {
23054 doWrite(stream, state, false, len, chunk, encoding, cb);
23055 }
23056
23057 return ret;
23058 }
23059
23060 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
23061 state.writelen = len;
23062 state.writecb = cb;
23063 state.writing = true;
23064 state.sync = true;
23065 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
23066 state.sync = false;
23067 }
23068
23069 function onwriteError(stream, state, sync, er, cb) {
23070 --state.pendingcb;
23071 if (sync) processNextTick(cb, er);else cb(er);
23072
23073 stream._writableState.errorEmitted = true;
23074 stream.emit('error', er);
23075 }
23076
23077 function onwriteStateUpdate(state) {
23078 state.writing = false;
23079 state.writecb = null;
23080 state.length -= state.writelen;
23081 state.writelen = 0;
23082 }
23083
23084 function onwrite(stream, er) {
23085 var state = stream._writableState;
23086 var sync = state.sync;
23087 var cb = state.writecb;
23088
23089 onwriteStateUpdate(state);
23090
23091 if (er) onwriteError(stream, state, sync, er, cb);else {
23092 // Check if we're actually ready to finish, but don't emit yet
23093 var finished = needFinish(state);
23094
23095 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
23096 clearBuffer(stream, state);
23097 }
23098
23099 if (sync) {
23100 /*<replacement>*/
23101 asyncWrite(afterWrite, stream, state, finished, cb);
23102 /*</replacement>*/
23103 } else {
23104 afterWrite(stream, state, finished, cb);
23105 }
23106 }
23107 }
23108
23109 function afterWrite(stream, state, finished, cb) {
23110 if (!finished) onwriteDrain(stream, state);
23111 state.pendingcb--;
23112 cb();
23113 finishMaybe(stream, state);
23114 }
23115
23116 // Must force callback to be called on nextTick, so that we don't
23117 // emit 'drain' before the write() consumer gets the 'false' return
23118 // value, and has a chance to attach a 'drain' listener.
23119 function onwriteDrain(stream, state) {
23120 if (state.length === 0 && state.needDrain) {
23121 state.needDrain = false;
23122 stream.emit('drain');
23123 }
23124 }
23125
23126 // if there's something in the buffer waiting, then process it
23127 function clearBuffer(stream, state) {
23128 state.bufferProcessing = true;
23129 var entry = state.bufferedRequest;
23130
23131 if (stream._writev && entry && entry.next) {
23132 // Fast case, write everything using _writev()
23133 var l = state.bufferedRequestCount;
23134 var buffer = new Array(l);
23135 var holder = state.corkedRequestsFree;
23136 holder.entry = entry;
23137
23138 var count = 0;
23139 while (entry) {
23140 buffer[count] = entry;
23141 entry = entry.next;
23142 count += 1;
23143 }
23144
23145 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
23146
23147 // doWrite is almost always async, defer these to save a bit of time
23148 // as the hot path ends with doWrite
23149 state.pendingcb++;
23150 state.lastBufferedRequest = null;
23151 if (holder.next) {
23152 state.corkedRequestsFree = holder.next;
23153 holder.next = null;
23154 } else {
23155 state.corkedRequestsFree = new CorkedRequest(state);
23156 }
23157 } else {
23158 // Slow case, write chunks one-by-one
23159 while (entry) {
23160 var chunk = entry.chunk;
23161 var encoding = entry.encoding;
23162 var cb = entry.callback;
23163 var len = state.objectMode ? 1 : chunk.length;
23164
23165 doWrite(stream, state, false, len, chunk, encoding, cb);
23166 entry = entry.next;
23167 // if we didn't call the onwrite immediately, then
23168 // it means that we need to wait until it does.
23169 // also, that means that the chunk and cb are currently
23170 // being processed, so move the buffer counter past them.
23171 if (state.writing) {
23172 break;
23173 }
23174 }
23175
23176 if (entry === null) state.lastBufferedRequest = null;
23177 }
23178
23179 state.bufferedRequestCount = 0;
23180 state.bufferedRequest = entry;
23181 state.bufferProcessing = false;
23182 }
23183
23184 Writable.prototype._write = function (chunk, encoding, cb) {
23185 cb(new Error('_write() is not implemented'));
23186 };
23187
23188 Writable.prototype._writev = null;
23189
23190 Writable.prototype.end = function (chunk, encoding, cb) {
23191 var state = this._writableState;
23192
23193 if (typeof chunk === 'function') {
23194 cb = chunk;
23195 chunk = null;
23196 encoding = null;
23197 } else if (typeof encoding === 'function') {
23198 cb = encoding;
23199 encoding = null;
23200 }
23201
23202 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
23203
23204 // .end() fully uncorks
23205 if (state.corked) {
23206 state.corked = 1;
23207 this.uncork();
23208 }
23209
23210 // ignore unnecessary end() calls.
23211 if (!state.ending && !state.finished) endWritable(this, state, cb);
23212 };
23213
23214 function needFinish(state) {
23215 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
23216 }
23217
23218 function prefinish(stream, state) {
23219 if (!state.prefinished) {
23220 state.prefinished = true;
23221 stream.emit('prefinish');
23222 }
23223 }
23224
23225 function finishMaybe(stream, state) {
23226 var need = needFinish(state);
23227 if (need) {
23228 if (state.pendingcb === 0) {
23229 prefinish(stream, state);
23230 state.finished = true;
23231 stream.emit('finish');
23232 } else {
23233 prefinish(stream, state);
23234 }
23235 }
23236 return need;
23237 }
23238
23239 function endWritable(stream, state, cb) {
23240 state.ending = true;
23241 finishMaybe(stream, state);
23242 if (cb) {
23243 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
23244 }
23245 state.ended = true;
23246 stream.writable = false;
23247 }
23248
23249 // It seems a linked list but it is not
23250 // there will be only 2 of these for each stream
23251 function CorkedRequest(state) {
23252 var _this = this;
23253
23254 this.next = null;
23255 this.entry = null;
23256
23257 this.finish = function (err) {
23258 var entry = _this.entry;
23259 _this.entry = null;
23260 while (entry) {
23261 var cb = entry.callback;
23262 state.pendingcb--;
23263 cb(err);
23264 entry = entry.next;
23265 }
23266 if (state.corkedRequestsFree) {
23267 state.corkedRequestsFree.next = _this;
23268 } else {
23269 state.corkedRequestsFree = _this;
23270 }
23271 };
23272 }
23273 }).call(this,require('_process'))
23274 },{"./_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){
23275 'use strict';
23276
23277 var Buffer = require('buffer').Buffer;
23278 /*<replacement>*/
23279 var bufferShim = require('buffer-shims');
23280 /*</replacement>*/
23281
23282 module.exports = BufferList;
23283
23284 function BufferList() {
23285 this.head = null;
23286 this.tail = null;
23287 this.length = 0;
23288 }
23289
23290 BufferList.prototype.push = function (v) {
23291 var entry = { data: v, next: null };
23292 if (this.length > 0) this.tail.next = entry;else this.head = entry;
23293 this.tail = entry;
23294 ++this.length;
23295 };
23296
23297 BufferList.prototype.unshift = function (v) {
23298 var entry = { data: v, next: this.head };
23299 if (this.length === 0) this.tail = entry;
23300 this.head = entry;
23301 ++this.length;
23302 };
23303
23304 BufferList.prototype.shift = function () {
23305 if (this.length === 0) return;
23306 var ret = this.head.data;
23307 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
23308 --this.length;
23309 return ret;
23310 };
23311
23312 BufferList.prototype.clear = function () {
23313 this.head = this.tail = null;
23314 this.length = 0;
23315 };
23316
23317 BufferList.prototype.join = function (s) {
23318 if (this.length === 0) return '';
23319 var p = this.head;
23320 var ret = '' + p.data;
23321 while (p = p.next) {
23322 ret += s + p.data;
23323 }return ret;
23324 };
23325
23326 BufferList.prototype.concat = function (n) {
23327 if (this.length === 0) return bufferShim.alloc(0);
23328 if (this.length === 1) return this.head.data;
23329 var ret = bufferShim.allocUnsafe(n >>> 0);
23330 var p = this.head;
23331 var i = 0;
23332 while (p) {
23333 p.data.copy(ret, i);
23334 i += p.data.length;
23335 p = p.next;
23336 }
23337 return ret;
23338 };
23339 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
23340 module.exports = require("./lib/_stream_passthrough.js")
23341
23342 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
23343 (function (process){
23344 var Stream = (function (){
23345 try {
23346 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
23347 } catch(_){}
23348 }());
23349 exports = module.exports = require('./lib/_stream_readable.js');
23350 exports.Stream = Stream || exports;
23351 exports.Readable = exports;
23352 exports.Writable = require('./lib/_stream_writable.js');
23353 exports.Duplex = require('./lib/_stream_duplex.js');
23354 exports.Transform = require('./lib/_stream_transform.js');
23355 exports.PassThrough = require('./lib/_stream_passthrough.js');
23356
23357 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
23358 module.exports = Stream;
23359 }
23360
23361 }).call(this,require('_process'))
23362 },{"./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){
23363 module.exports = require("./lib/_stream_transform.js")
23364
23365 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
23366 module.exports = require("./lib/_stream_writable.js")
23367
23368 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
23369 // Copyright Joyent, Inc. and other Node contributors.
23370 //
23371 // Permission is hereby granted, free of charge, to any person obtaining a
23372 // copy of this software and associated documentation files (the
23373 // "Software"), to deal in the Software without restriction, including
23374 // without limitation the rights to use, copy, modify, merge, publish,
23375 // distribute, sublicense, and/or sell copies of the Software, and to permit
23376 // persons to whom the Software is furnished to do so, subject to the
23377 // following conditions:
23378 //
23379 // The above copyright notice and this permission notice shall be included
23380 // in all copies or substantial portions of the Software.
23381 //
23382 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23383 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23384 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23385 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23386 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23387 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23388 // USE OR OTHER DEALINGS IN THE SOFTWARE.
23389
23390 module.exports = Stream;
23391
23392 var EE = require('events').EventEmitter;
23393 var inherits = require('inherits');
23394
23395 inherits(Stream, EE);
23396 Stream.Readable = require('readable-stream/readable.js');
23397 Stream.Writable = require('readable-stream/writable.js');
23398 Stream.Duplex = require('readable-stream/duplex.js');
23399 Stream.Transform = require('readable-stream/transform.js');
23400 Stream.PassThrough = require('readable-stream/passthrough.js');
23401
23402 // Backwards-compat with node 0.4.x
23403 Stream.Stream = Stream;
23404
23405
23406
23407 // old-style streams. Note that the pipe method (the only relevant
23408 // part of this class) is overridden in the Readable class.
23409
23410 function Stream() {
23411 EE.call(this);
23412 }
23413
23414 Stream.prototype.pipe = function(dest, options) {
23415 var source = this;
23416
23417 function ondata(chunk) {
23418 if (dest.writable) {
23419 if (false === dest.write(chunk) && source.pause) {
23420 source.pause();
23421 }
23422 }
23423 }
23424
23425 source.on('data', ondata);
23426
23427 function ondrain() {
23428 if (source.readable && source.resume) {
23429 source.resume();
23430 }
23431 }
23432
23433 dest.on('drain', ondrain);
23434
23435 // If the 'end' option is not supplied, dest.end() will be called when
23436 // source gets the 'end' or 'close' events. Only dest.end() once.
23437 if (!dest._isStdio && (!options || options.end !== false)) {
23438 source.on('end', onend);
23439 source.on('close', onclose);
23440 }
23441
23442 var didOnEnd = false;
23443 function onend() {
23444 if (didOnEnd) return;
23445 didOnEnd = true;
23446
23447 dest.end();
23448 }
23449
23450
23451 function onclose() {
23452 if (didOnEnd) return;
23453 didOnEnd = true;
23454
23455 if (typeof dest.destroy === 'function') dest.destroy();
23456 }
23457
23458 // don't leave dangling pipes when there are errors.
23459 function onerror(er) {
23460 cleanup();
23461 if (EE.listenerCount(this, 'error') === 0) {
23462 throw er; // Unhandled stream error in pipe.
23463 }
23464 }
23465
23466 source.on('error', onerror);
23467 dest.on('error', onerror);
23468
23469 // remove all the event listeners that were added.
23470 function cleanup() {
23471 source.removeListener('data', ondata);
23472 dest.removeListener('drain', ondrain);
23473
23474 source.removeListener('end', onend);
23475 source.removeListener('close', onclose);
23476
23477 source.removeListener('error', onerror);
23478 dest.removeListener('error', onerror);
23479
23480 source.removeListener('end', cleanup);
23481 source.removeListener('close', cleanup);
23482
23483 dest.removeListener('close', cleanup);
23484 }
23485
23486 source.on('end', cleanup);
23487 source.on('close', cleanup);
23488
23489 dest.on('close', cleanup);
23490
23491 dest.emit('pipe', source);
23492
23493 // Allow for unix-like usage: A.pipe(B).pipe(C)
23494 return dest;
23495 };
23496
23497 },{"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){
23498 // Copyright Joyent, Inc. and other Node contributors.
23499 //
23500 // Permission is hereby granted, free of charge, to any person obtaining a
23501 // copy of this software and associated documentation files (the
23502 // "Software"), to deal in the Software without restriction, including
23503 // without limitation the rights to use, copy, modify, merge, publish,
23504 // distribute, sublicense, and/or sell copies of the Software, and to permit
23505 // persons to whom the Software is furnished to do so, subject to the
23506 // following conditions:
23507 //
23508 // The above copyright notice and this permission notice shall be included
23509 // in all copies or substantial portions of the Software.
23510 //
23511 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23512 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23513 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23514 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23515 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23516 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23517 // USE OR OTHER DEALINGS IN THE SOFTWARE.
23518
23519 var Buffer = require('buffer').Buffer;
23520
23521 var isBufferEncoding = Buffer.isEncoding
23522 || function(encoding) {
23523 switch (encoding && encoding.toLowerCase()) {
23524 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;
23525 default: return false;
23526 }
23527 }
23528
23529
23530 function assertEncoding(encoding) {
23531 if (encoding && !isBufferEncoding(encoding)) {
23532 throw new Error('Unknown encoding: ' + encoding);
23533 }
23534 }
23535
23536 // StringDecoder provides an interface for efficiently splitting a series of
23537 // buffers into a series of JS strings without breaking apart multi-byte
23538 // characters. CESU-8 is handled as part of the UTF-8 encoding.
23539 //
23540 // @TODO Handling all encodings inside a single object makes it very difficult
23541 // to reason about this code, so it should be split up in the future.
23542 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
23543 // points as used by CESU-8.
23544 var StringDecoder = exports.StringDecoder = function(encoding) {
23545 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
23546 assertEncoding(encoding);
23547 switch (this.encoding) {
23548 case 'utf8':
23549 // CESU-8 represents each of Surrogate Pair by 3-bytes
23550 this.surrogateSize = 3;
23551 break;
23552 case 'ucs2':
23553 case 'utf16le':
23554 // UTF-16 represents each of Surrogate Pair by 2-bytes
23555 this.surrogateSize = 2;
23556 this.detectIncompleteChar = utf16DetectIncompleteChar;
23557 break;
23558 case 'base64':
23559 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
23560 this.surrogateSize = 3;
23561 this.detectIncompleteChar = base64DetectIncompleteChar;
23562 break;
23563 default:
23564 this.write = passThroughWrite;
23565 return;
23566 }
23567
23568 // Enough space to store all bytes of a single character. UTF-8 needs 4
23569 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
23570 this.charBuffer = new Buffer(6);
23571 // Number of bytes received for the current incomplete multi-byte character.
23572 this.charReceived = 0;
23573 // Number of bytes expected for the current incomplete multi-byte character.
23574 this.charLength = 0;
23575 };
23576
23577
23578 // write decodes the given buffer and returns it as JS string that is
23579 // guaranteed to not contain any partial multi-byte characters. Any partial
23580 // character found at the end of the buffer is buffered up, and will be
23581 // returned when calling write again with the remaining bytes.
23582 //
23583 // Note: Converting a Buffer containing an orphan surrogate to a String
23584 // currently works, but converting a String to a Buffer (via `new Buffer`, or
23585 // Buffer#write) will replace incomplete surrogates with the unicode
23586 // replacement character. See https://codereview.chromium.org/121173009/ .
23587 StringDecoder.prototype.write = function(buffer) {
23588 var charStr = '';
23589 // if our last write ended with an incomplete multibyte character
23590 while (this.charLength) {
23591 // determine how many remaining bytes this buffer has to offer for this char
23592 var available = (buffer.length >= this.charLength - this.charReceived) ?
23593 this.charLength - this.charReceived :
23594 buffer.length;
23595
23596 // add the new bytes to the char buffer
23597 buffer.copy(this.charBuffer, this.charReceived, 0, available);
23598 this.charReceived += available;
23599
23600 if (this.charReceived < this.charLength) {
23601 // still not enough chars in this buffer? wait for more ...
23602 return '';
23603 }
23604
23605 // remove bytes belonging to the current character from the buffer
23606 buffer = buffer.slice(available, buffer.length);
23607
23608 // get the character that was split
23609 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
23610
23611 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23612 var charCode = charStr.charCodeAt(charStr.length - 1);
23613 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23614 this.charLength += this.surrogateSize;
23615 charStr = '';
23616 continue;
23617 }
23618 this.charReceived = this.charLength = 0;
23619
23620 // if there are no more bytes in this buffer, just emit our char
23621 if (buffer.length === 0) {
23622 return charStr;
23623 }
23624 break;
23625 }
23626
23627 // determine and set charLength / charReceived
23628 this.detectIncompleteChar(buffer);
23629
23630 var end = buffer.length;
23631 if (this.charLength) {
23632 // buffer the incomplete character bytes we got
23633 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
23634 end -= this.charReceived;
23635 }
23636
23637 charStr += buffer.toString(this.encoding, 0, end);
23638
23639 var end = charStr.length - 1;
23640 var charCode = charStr.charCodeAt(end);
23641 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23642 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23643 var size = this.surrogateSize;
23644 this.charLength += size;
23645 this.charReceived += size;
23646 this.charBuffer.copy(this.charBuffer, size, 0, size);
23647 buffer.copy(this.charBuffer, 0, 0, size);
23648 return charStr.substring(0, end);
23649 }
23650
23651 // or just emit the charStr
23652 return charStr;
23653 };
23654
23655 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
23656 // the end of the given buffer. If so, it sets this.charLength to the byte
23657 // length that character, and sets this.charReceived to the number of bytes
23658 // that are available for this character.
23659 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
23660 // determine how many bytes we have to check at the end of this buffer
23661 var i = (buffer.length >= 3) ? 3 : buffer.length;
23662
23663 // Figure out if one of the last i bytes of our buffer announces an
23664 // incomplete char.
23665 for (; i > 0; i--) {
23666 var c = buffer[buffer.length - i];
23667
23668 // See http://en.wikipedia.org/wiki/UTF-8#Description
23669
23670 // 110XXXXX
23671 if (i == 1 && c >> 5 == 0x06) {
23672 this.charLength = 2;
23673 break;
23674 }
23675
23676 // 1110XXXX
23677 if (i <= 2 && c >> 4 == 0x0E) {
23678 this.charLength = 3;
23679 break;
23680 }
23681
23682 // 11110XXX
23683 if (i <= 3 && c >> 3 == 0x1E) {
23684 this.charLength = 4;
23685 break;
23686 }
23687 }
23688 this.charReceived = i;
23689 };
23690
23691 StringDecoder.prototype.end = function(buffer) {
23692 var res = '';
23693 if (buffer && buffer.length)
23694 res = this.write(buffer);
23695
23696 if (this.charReceived) {
23697 var cr = this.charReceived;
23698 var buf = this.charBuffer;
23699 var enc = this.encoding;
23700 res += buf.slice(0, cr).toString(enc);
23701 }
23702
23703 return res;
23704 };
23705
23706 function passThroughWrite(buffer) {
23707 return buffer.toString(this.encoding);
23708 }
23709
23710 function utf16DetectIncompleteChar(buffer) {
23711 this.charReceived = buffer.length % 2;
23712 this.charLength = this.charReceived ? 2 : 0;
23713 }
23714
23715 function base64DetectIncompleteChar(buffer) {
23716 this.charReceived = buffer.length % 3;
23717 this.charLength = this.charReceived ? 3 : 0;
23718 }
23719
23720 },{"buffer":5}],27:[function(require,module,exports){
23721 (function (global){
23722
23723 /**
23724 * Module exports.
23725 */
23726
23727 module.exports = deprecate;
23728
23729 /**
23730 * Mark that a method should not be used.
23731 * Returns a modified function which warns once by default.
23732 *
23733 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
23734 *
23735 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
23736 * will throw an Error when invoked.
23737 *
23738 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
23739 * will invoke `console.trace()` instead of `console.error()`.
23740 *
23741 * @param {Function} fn - the function to deprecate
23742 * @param {String} msg - the string to print to the console when `fn` is invoked
23743 * @returns {Function} a new "deprecated" version of `fn`
23744 * @api public
23745 */
23746
23747 function deprecate (fn, msg) {
23748 if (config('noDeprecation')) {
23749 return fn;
23750 }
23751
23752 var warned = false;
23753 function deprecated() {
23754 if (!warned) {
23755 if (config('throwDeprecation')) {
23756 throw new Error(msg);
23757 } else if (config('traceDeprecation')) {
23758 console.trace(msg);
23759 } else {
23760 console.warn(msg);
23761 }
23762 warned = true;
23763 }
23764 return fn.apply(this, arguments);
23765 }
23766
23767 return deprecated;
23768 }
23769
23770 /**
23771 * Checks `localStorage` for boolean values for the given `name`.
23772 *
23773 * @param {String} name
23774 * @returns {Boolean}
23775 * @api private
23776 */
23777
23778 function config (name) {
23779 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
23780 try {
23781 if (!global.localStorage) return false;
23782 } catch (_) {
23783 return false;
23784 }
23785 var val = global.localStorage[name];
23786 if (null == val) return false;
23787 return String(val).toLowerCase() === 'true';
23788 }
23789
23790 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23791 },{}],28:[function(require,module,exports){
23792 arguments[4][9][0].apply(exports,arguments)
23793 },{"dup":9}],29:[function(require,module,exports){
23794 module.exports = function isBuffer(arg) {
23795 return arg && typeof arg === 'object'
23796 && typeof arg.copy === 'function'
23797 && typeof arg.fill === 'function'
23798 && typeof arg.readUInt8 === 'function';
23799 }
23800 },{}],30:[function(require,module,exports){
23801 (function (process,global){
23802 // Copyright Joyent, Inc. and other Node contributors.
23803 //
23804 // Permission is hereby granted, free of charge, to any person obtaining a
23805 // copy of this software and associated documentation files (the
23806 // "Software"), to deal in the Software without restriction, including
23807 // without limitation the rights to use, copy, modify, merge, publish,
23808 // distribute, sublicense, and/or sell copies of the Software, and to permit
23809 // persons to whom the Software is furnished to do so, subject to the
23810 // following conditions:
23811 //
23812 // The above copyright notice and this permission notice shall be included
23813 // in all copies or substantial portions of the Software.
23814 //
23815 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23816 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23817 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23818 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23819 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23820 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23821 // USE OR OTHER DEALINGS IN THE SOFTWARE.
23822
23823 var formatRegExp = /%[sdj%]/g;
23824 exports.format = function(f) {
23825 if (!isString(f)) {
23826 var objects = [];
23827 for (var i = 0; i < arguments.length; i++) {
23828 objects.push(inspect(arguments[i]));
23829 }
23830 return objects.join(' ');
23831 }
23832
23833 var i = 1;
23834 var args = arguments;
23835 var len = args.length;
23836 var str = String(f).replace(formatRegExp, function(x) {
23837 if (x === '%%') return '%';
23838 if (i >= len) return x;
23839 switch (x) {
23840 case '%s': return String(args[i++]);
23841 case '%d': return Number(args[i++]);
23842 case '%j':
23843 try {
23844 return JSON.stringify(args[i++]);
23845 } catch (_) {
23846 return '[Circular]';
23847 }
23848 default:
23849 return x;
23850 }
23851 });
23852 for (var x = args[i]; i < len; x = args[++i]) {
23853 if (isNull(x) || !isObject(x)) {
23854 str += ' ' + x;
23855 } else {
23856 str += ' ' + inspect(x);
23857 }
23858 }
23859 return str;
23860 };
23861
23862
23863 // Mark that a method should not be used.
23864 // Returns a modified function which warns once by default.
23865 // If --no-deprecation is set, then it is a no-op.
23866 exports.deprecate = function(fn, msg) {
23867 // Allow for deprecating things in the process of starting up.
23868 if (isUndefined(global.process)) {
23869 return function() {
23870 return exports.deprecate(fn, msg).apply(this, arguments);
23871 };
23872 }
23873
23874 if (process.noDeprecation === true) {
23875 return fn;
23876 }
23877
23878 var warned = false;
23879 function deprecated() {
23880 if (!warned) {
23881 if (process.throwDeprecation) {
23882 throw new Error(msg);
23883 } else if (process.traceDeprecation) {
23884 console.trace(msg);
23885 } else {
23886 console.error(msg);
23887 }
23888 warned = true;
23889 }
23890 return fn.apply(this, arguments);
23891 }
23892
23893 return deprecated;
23894 };
23895
23896
23897 var debugs = {};
23898 var debugEnviron;
23899 exports.debuglog = function(set) {
23900 if (isUndefined(debugEnviron))
23901 debugEnviron = process.env.NODE_DEBUG || '';
23902 set = set.toUpperCase();
23903 if (!debugs[set]) {
23904 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
23905 var pid = process.pid;
23906 debugs[set] = function() {
23907 var msg = exports.format.apply(exports, arguments);
23908 console.error('%s %d: %s', set, pid, msg);
23909 };
23910 } else {
23911 debugs[set] = function() {};
23912 }
23913 }
23914 return debugs[set];
23915 };
23916
23917
23918 /**
23919 * Echos the value of a value. Trys to print the value out
23920 * in the best way possible given the different types.
23921 *
23922 * @param {Object} obj The object to print out.
23923 * @param {Object} opts Optional options object that alters the output.
23924 */
23925 /* legacy: obj, showHidden, depth, colors*/
23926 function inspect(obj, opts) {
23927 // default options
23928 var ctx = {
23929 seen: [],
23930 stylize: stylizeNoColor
23931 };
23932 // legacy...
23933 if (arguments.length >= 3) ctx.depth = arguments[2];
23934 if (arguments.length >= 4) ctx.colors = arguments[3];
23935 if (isBoolean(opts)) {
23936 // legacy...
23937 ctx.showHidden = opts;
23938 } else if (opts) {
23939 // got an "options" object
23940 exports._extend(ctx, opts);
23941 }
23942 // set default options
23943 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
23944 if (isUndefined(ctx.depth)) ctx.depth = 2;
23945 if (isUndefined(ctx.colors)) ctx.colors = false;
23946 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
23947 if (ctx.colors) ctx.stylize = stylizeWithColor;
23948 return formatValue(ctx, obj, ctx.depth);
23949 }
23950 exports.inspect = inspect;
23951
23952
23953 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
23954 inspect.colors = {
23955 'bold' : [1, 22],
23956 'italic' : [3, 23],
23957 'underline' : [4, 24],
23958 'inverse' : [7, 27],
23959 'white' : [37, 39],
23960 'grey' : [90, 39],
23961 'black' : [30, 39],
23962 'blue' : [34, 39],
23963 'cyan' : [36, 39],
23964 'green' : [32, 39],
23965 'magenta' : [35, 39],
23966 'red' : [31, 39],
23967 'yellow' : [33, 39]
23968 };
23969
23970 // Don't use 'blue' not visible on cmd.exe
23971 inspect.styles = {
23972 'special': 'cyan',
23973 'number': 'yellow',
23974 'boolean': 'yellow',
23975 'undefined': 'grey',
23976 'null': 'bold',
23977 'string': 'green',
23978 'date': 'magenta',
23979 // "name": intentionally not styling
23980 'regexp': 'red'
23981 };
23982
23983
23984 function stylizeWithColor(str, styleType) {
23985 var style = inspect.styles[styleType];
23986
23987 if (style) {
23988 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
23989 '\u001b[' + inspect.colors[style][1] + 'm';
23990 } else {
23991 return str;
23992 }
23993 }
23994
23995
23996 function stylizeNoColor(str, styleType) {
23997 return str;
23998 }
23999
24000
24001 function arrayToHash(array) {
24002 var hash = {};
24003
24004 array.forEach(function(val, idx) {
24005 hash[val] = true;
24006 });
24007
24008 return hash;
24009 }
24010
24011
24012 function formatValue(ctx, value, recurseTimes) {
24013 // Provide a hook for user-specified inspect functions.
24014 // Check that value is an object with an inspect function on it
24015 if (ctx.customInspect &&
24016 value &&
24017 isFunction(value.inspect) &&
24018 // Filter out the util module, it's inspect function is special
24019 value.inspect !== exports.inspect &&
24020 // Also filter out any prototype objects using the circular check.
24021 !(value.constructor && value.constructor.prototype === value)) {
24022 var ret = value.inspect(recurseTimes, ctx);
24023 if (!isString(ret)) {
24024 ret = formatValue(ctx, ret, recurseTimes);
24025 }
24026 return ret;
24027 }
24028
24029 // Primitive types cannot have properties
24030 var primitive = formatPrimitive(ctx, value);
24031 if (primitive) {
24032 return primitive;
24033 }
24034
24035 // Look up the keys of the object.
24036 var keys = Object.keys(value);
24037 var visibleKeys = arrayToHash(keys);
24038
24039 if (ctx.showHidden) {
24040 keys = Object.getOwnPropertyNames(value);
24041 }
24042
24043 // IE doesn't make error fields non-enumerable
24044 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
24045 if (isError(value)
24046 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
24047 return formatError(value);
24048 }
24049
24050 // Some type of object without properties can be shortcutted.
24051 if (keys.length === 0) {
24052 if (isFunction(value)) {
24053 var name = value.name ? ': ' + value.name : '';
24054 return ctx.stylize('[Function' + name + ']', 'special');
24055 }
24056 if (isRegExp(value)) {
24057 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
24058 }
24059 if (isDate(value)) {
24060 return ctx.stylize(Date.prototype.toString.call(value), 'date');
24061 }
24062 if (isError(value)) {
24063 return formatError(value);
24064 }
24065 }
24066
24067 var base = '', array = false, braces = ['{', '}'];
24068
24069 // Make Array say that they are Array
24070 if (isArray(value)) {
24071 array = true;
24072 braces = ['[', ']'];
24073 }
24074
24075 // Make functions say that they are functions
24076 if (isFunction(value)) {
24077 var n = value.name ? ': ' + value.name : '';
24078 base = ' [Function' + n + ']';
24079 }
24080
24081 // Make RegExps say that they are RegExps
24082 if (isRegExp(value)) {
24083 base = ' ' + RegExp.prototype.toString.call(value);
24084 }
24085
24086 // Make dates with properties first say the date
24087 if (isDate(value)) {
24088 base = ' ' + Date.prototype.toUTCString.call(value);
24089 }
24090
24091 // Make error with message first say the error
24092 if (isError(value)) {
24093 base = ' ' + formatError(value);
24094 }
24095
24096 if (keys.length === 0 && (!array || value.length == 0)) {
24097 return braces[0] + base + braces[1];
24098 }
24099
24100 if (recurseTimes < 0) {
24101 if (isRegExp(value)) {
24102 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
24103 } else {
24104 return ctx.stylize('[Object]', 'special');
24105 }
24106 }
24107
24108 ctx.seen.push(value);
24109
24110 var output;
24111 if (array) {
24112 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
24113 } else {
24114 output = keys.map(function(key) {
24115 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
24116 });
24117 }
24118
24119 ctx.seen.pop();
24120
24121 return reduceToSingleString(output, base, braces);
24122 }
24123
24124
24125 function formatPrimitive(ctx, value) {
24126 if (isUndefined(value))
24127 return ctx.stylize('undefined', 'undefined');
24128 if (isString(value)) {
24129 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
24130 .replace(/'/g, "\\'")
24131 .replace(/\\"/g, '"') + '\'';
24132 return ctx.stylize(simple, 'string');
24133 }
24134 if (isNumber(value))
24135 return ctx.stylize('' + value, 'number');
24136 if (isBoolean(value))
24137 return ctx.stylize('' + value, 'boolean');
24138 // For some reason typeof null is "object", so special case here.
24139 if (isNull(value))
24140 return ctx.stylize('null', 'null');
24141 }
24142
24143
24144 function formatError(value) {
24145 return '[' + Error.prototype.toString.call(value) + ']';
24146 }
24147
24148
24149 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
24150 var output = [];
24151 for (var i = 0, l = value.length; i < l; ++i) {
24152 if (hasOwnProperty(value, String(i))) {
24153 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
24154 String(i), true));
24155 } else {
24156 output.push('');
24157 }
24158 }
24159 keys.forEach(function(key) {
24160 if (!key.match(/^\d+$/)) {
24161 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
24162 key, true));
24163 }
24164 });
24165 return output;
24166 }
24167
24168
24169 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
24170 var name, str, desc;
24171 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
24172 if (desc.get) {
24173 if (desc.set) {
24174 str = ctx.stylize('[Getter/Setter]', 'special');
24175 } else {
24176 str = ctx.stylize('[Getter]', 'special');
24177 }
24178 } else {
24179 if (desc.set) {
24180 str = ctx.stylize('[Setter]', 'special');
24181 }
24182 }
24183 if (!hasOwnProperty(visibleKeys, key)) {
24184 name = '[' + key + ']';
24185 }
24186 if (!str) {
24187 if (ctx.seen.indexOf(desc.value) < 0) {
24188 if (isNull(recurseTimes)) {
24189 str = formatValue(ctx, desc.value, null);
24190 } else {
24191 str = formatValue(ctx, desc.value, recurseTimes - 1);
24192 }
24193 if (str.indexOf('\n') > -1) {
24194 if (array) {
24195 str = str.split('\n').map(function(line) {
24196 return ' ' + line;
24197 }).join('\n').substr(2);
24198 } else {
24199 str = '\n' + str.split('\n').map(function(line) {
24200 return ' ' + line;
24201 }).join('\n');
24202 }
24203 }
24204 } else {
24205 str = ctx.stylize('[Circular]', 'special');
24206 }
24207 }
24208 if (isUndefined(name)) {
24209 if (array && key.match(/^\d+$/)) {
24210 return str;
24211 }
24212 name = JSON.stringify('' + key);
24213 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
24214 name = name.substr(1, name.length - 2);
24215 name = ctx.stylize(name, 'name');
24216 } else {
24217 name = name.replace(/'/g, "\\'")
24218 .replace(/\\"/g, '"')
24219 .replace(/(^"|"$)/g, "'");
24220 name = ctx.stylize(name, 'string');
24221 }
24222 }
24223
24224 return name + ': ' + str;
24225 }
24226
24227
24228 function reduceToSingleString(output, base, braces) {
24229 var numLinesEst = 0;
24230 var length = output.reduce(function(prev, cur) {
24231 numLinesEst++;
24232 if (cur.indexOf('\n') >= 0) numLinesEst++;
24233 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
24234 }, 0);
24235
24236 if (length > 60) {
24237 return braces[0] +
24238 (base === '' ? '' : base + '\n ') +
24239 ' ' +
24240 output.join(',\n ') +
24241 ' ' +
24242 braces[1];
24243 }
24244
24245 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
24246 }
24247
24248
24249 // NOTE: These type checking functions intentionally don't use `instanceof`
24250 // because it is fragile and can be easily faked with `Object.create()`.
24251 function isArray(ar) {
24252 return Array.isArray(ar);
24253 }
24254 exports.isArray = isArray;
24255
24256 function isBoolean(arg) {
24257 return typeof arg === 'boolean';
24258 }
24259 exports.isBoolean = isBoolean;
24260
24261 function isNull(arg) {
24262 return arg === null;
24263 }
24264 exports.isNull = isNull;
24265
24266 function isNullOrUndefined(arg) {
24267 return arg == null;
24268 }
24269 exports.isNullOrUndefined = isNullOrUndefined;
24270
24271 function isNumber(arg) {
24272 return typeof arg === 'number';
24273 }
24274 exports.isNumber = isNumber;
24275
24276 function isString(arg) {
24277 return typeof arg === 'string';
24278 }
24279 exports.isString = isString;
24280
24281 function isSymbol(arg) {
24282 return typeof arg === 'symbol';
24283 }
24284 exports.isSymbol = isSymbol;
24285
24286 function isUndefined(arg) {
24287 return arg === void 0;
24288 }
24289 exports.isUndefined = isUndefined;
24290
24291 function isRegExp(re) {
24292 return isObject(re) && objectToString(re) === '[object RegExp]';
24293 }
24294 exports.isRegExp = isRegExp;
24295
24296 function isObject(arg) {
24297 return typeof arg === 'object' && arg !== null;
24298 }
24299 exports.isObject = isObject;
24300
24301 function isDate(d) {
24302 return isObject(d) && objectToString(d) === '[object Date]';
24303 }
24304 exports.isDate = isDate;
24305
24306 function isError(e) {
24307 return isObject(e) &&
24308 (objectToString(e) === '[object Error]' || e instanceof Error);
24309 }
24310 exports.isError = isError;
24311
24312 function isFunction(arg) {
24313 return typeof arg === 'function';
24314 }
24315 exports.isFunction = isFunction;
24316
24317 function isPrimitive(arg) {
24318 return arg === null ||
24319 typeof arg === 'boolean' ||
24320 typeof arg === 'number' ||
24321 typeof arg === 'string' ||
24322 typeof arg === 'symbol' || // ES6 symbol
24323 typeof arg === 'undefined';
24324 }
24325 exports.isPrimitive = isPrimitive;
24326
24327 exports.isBuffer = require('./support/isBuffer');
24328
24329 function objectToString(o) {
24330 return Object.prototype.toString.call(o);
24331 }
24332
24333
24334 function pad(n) {
24335 return n < 10 ? '0' + n.toString(10) : n.toString(10);
24336 }
24337
24338
24339 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
24340 'Oct', 'Nov', 'Dec'];
24341
24342 // 26 Feb 16:19:34
24343 function timestamp() {
24344 var d = new Date();
24345 var time = [pad(d.getHours()),
24346 pad(d.getMinutes()),
24347 pad(d.getSeconds())].join(':');
24348 return [d.getDate(), months[d.getMonth()], time].join(' ');
24349 }
24350
24351
24352 // log is just a thin wrapper to console.log that prepends a timestamp
24353 exports.log = function() {
24354 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
24355 };
24356
24357
24358 /**
24359 * Inherit the prototype methods from one constructor into another.
24360 *
24361 * The Function.prototype.inherits from lang.js rewritten as a standalone
24362 * function (not on Function.prototype). NOTE: If this file is to be loaded
24363 * during bootstrapping this function needs to be rewritten using some native
24364 * functions as prototype setup using normal JavaScript does not work as
24365 * expected during bootstrapping (see mirror.js in r114903).
24366 *
24367 * @param {function} ctor Constructor function which needs to inherit the
24368 * prototype.
24369 * @param {function} superCtor Constructor function to inherit prototype from.
24370 */
24371 exports.inherits = require('inherits');
24372
24373 exports._extend = function(origin, add) {
24374 // Don't do anything if add isn't an object
24375 if (!add || !isObject(add)) return origin;
24376
24377 var keys = Object.keys(add);
24378 var i = keys.length;
24379 while (i--) {
24380 origin[keys[i]] = add[keys[i]];
24381 }
24382 return origin;
24383 };
24384
24385 function hasOwnProperty(obj, prop) {
24386 return Object.prototype.hasOwnProperty.call(obj, prop);
24387 }
24388
24389 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
24390 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
24391 (function (Buffer){
24392 const createKeccakHash = require('keccak')
24393 const secp256k1 = require('secp256k1')
24394 const assert = require('assert')
24395 const rlp = require('rlp')
24396 const BN = require('bn.js')
24397 const createHash = require('create-hash')
24398 Object.assign(exports, require('ethjs-util'))
24399
24400 /**
24401 * the max integer that this VM can handle (a ```BN```)
24402 * @var {BN} MAX_INTEGER
24403 */
24404 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
24405
24406 /**
24407 * 2^256 (a ```BN```)
24408 * @var {BN} TWO_POW256
24409 */
24410 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
24411
24412 /**
24413 * SHA3-256 hash of null (a ```String```)
24414 * @var {String} SHA3_NULL_S
24415 */
24416 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
24417
24418 /**
24419 * SHA3-256 hash of null (a ```Buffer```)
24420 * @var {Buffer} SHA3_NULL
24421 */
24422 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
24423
24424 /**
24425 * SHA3-256 of an RLP of an empty array (a ```String```)
24426 * @var {String} SHA3_RLP_ARRAY_S
24427 */
24428 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
24429
24430 /**
24431 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
24432 * @var {Buffer} SHA3_RLP_ARRAY
24433 */
24434 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
24435
24436 /**
24437 * SHA3-256 hash of the RLP of null (a ```String```)
24438 * @var {String} SHA3_RLP_S
24439 */
24440 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
24441
24442 /**
24443 * SHA3-256 hash of the RLP of null (a ```Buffer```)
24444 * @var {Buffer} SHA3_RLP
24445 */
24446 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
24447
24448 /**
24449 * [`BN`](https://github.com/indutny/bn.js)
24450 * @var {Function}
24451 */
24452 exports.BN = BN
24453
24454 /**
24455 * [`rlp`](https://github.com/ethereumjs/rlp)
24456 * @var {Function}
24457 */
24458 exports.rlp = rlp
24459
24460 /**
24461 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
24462 * @var {Object}
24463 */
24464 exports.secp256k1 = secp256k1
24465
24466 /**
24467 * Returns a buffer filled with 0s
24468 * @method zeros
24469 * @param {Number} bytes the number of bytes the buffer should be
24470 * @return {Buffer}
24471 */
24472 exports.zeros = function (bytes) {
24473 return Buffer.allocUnsafe(bytes).fill(0)
24474 }
24475
24476 /**
24477 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24478 * Or it truncates the beginning if it exceeds.
24479 * @method lsetLength
24480 * @param {Buffer|Array} msg the value to pad
24481 * @param {Number} length the number of bytes the output should be
24482 * @param {Boolean} [right=false] whether to start padding form the left or right
24483 * @return {Buffer|Array}
24484 */
24485 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
24486 var buf = exports.zeros(length)
24487 msg = exports.toBuffer(msg)
24488 if (right) {
24489 if (msg.length < length) {
24490 msg.copy(buf)
24491 return buf
24492 }
24493 return msg.slice(0, length)
24494 } else {
24495 if (msg.length < length) {
24496 msg.copy(buf, length - msg.length)
24497 return buf
24498 }
24499 return msg.slice(-length)
24500 }
24501 }
24502
24503 /**
24504 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24505 * Or it truncates the beginning if it exceeds.
24506 * @param {Buffer|Array} msg the value to pad
24507 * @param {Number} length the number of bytes the output should be
24508 * @return {Buffer|Array}
24509 */
24510 exports.setLengthRight = function (msg, length) {
24511 return exports.setLength(msg, length, true)
24512 }
24513
24514 /**
24515 * Trims leading zeros from a `Buffer` or an `Array`
24516 * @param {Buffer|Array|String} a
24517 * @return {Buffer|Array|String}
24518 */
24519 exports.unpad = exports.stripZeros = function (a) {
24520 a = exports.stripHexPrefix(a)
24521 var first = a[0]
24522 while (a.length > 0 && first.toString() === '0') {
24523 a = a.slice(1)
24524 first = a[0]
24525 }
24526 return a
24527 }
24528 /**
24529 * 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.
24530 * @param {*} v the value
24531 */
24532 exports.toBuffer = function (v) {
24533 if (!Buffer.isBuffer(v)) {
24534 if (Array.isArray(v)) {
24535 v = Buffer.from(v)
24536 } else if (typeof v === 'string') {
24537 if (exports.isHexPrefixed(v)) {
24538 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
24539 } else {
24540 v = Buffer.from(v)
24541 }
24542 } else if (typeof v === 'number') {
24543 v = exports.intToBuffer(v)
24544 } else if (v === null || v === undefined) {
24545 v = Buffer.allocUnsafe(0)
24546 } else if (v.toArray) {
24547 // converts a BN to a Buffer
24548 v = Buffer.from(v.toArray())
24549 } else {
24550 throw new Error('invalid type')
24551 }
24552 }
24553 return v
24554 }
24555
24556 /**
24557 * Converts a `Buffer` to a `Number`
24558 * @param {Buffer} buf
24559 * @return {Number}
24560 * @throws If the input number exceeds 53 bits.
24561 */
24562 exports.bufferToInt = function (buf) {
24563 return new BN(exports.toBuffer(buf)).toNumber()
24564 }
24565
24566 /**
24567 * Converts a `Buffer` into a hex `String`
24568 * @param {Buffer} buf
24569 * @return {String}
24570 */
24571 exports.bufferToHex = function (buf) {
24572 buf = exports.toBuffer(buf)
24573 return '0x' + buf.toString('hex')
24574 }
24575
24576 /**
24577 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
24578 * @param {Buffer} num
24579 * @return {BN}
24580 */
24581 exports.fromSigned = function (num) {
24582 return new BN(num).fromTwos(256)
24583 }
24584
24585 /**
24586 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
24587 * @param {BN} num
24588 * @return {Buffer}
24589 */
24590 exports.toUnsigned = function (num) {
24591 return Buffer.from(num.toTwos(256).toArray())
24592 }
24593
24594 /**
24595 * Creates SHA-3 hash of the input
24596 * @param {Buffer|Array|String|Number} a the input data
24597 * @param {Number} [bits=256] the SHA width
24598 * @return {Buffer}
24599 */
24600 exports.sha3 = function (a, bits) {
24601 a = exports.toBuffer(a)
24602 if (!bits) bits = 256
24603
24604 return createKeccakHash('keccak' + bits).update(a).digest()
24605 }
24606
24607 /**
24608 * Creates SHA256 hash of the input
24609 * @param {Buffer|Array|String|Number} a the input data
24610 * @return {Buffer}
24611 */
24612 exports.sha256 = function (a) {
24613 a = exports.toBuffer(a)
24614 return createHash('sha256').update(a).digest()
24615 }
24616
24617 /**
24618 * Creates RIPEMD160 hash of the input
24619 * @param {Buffer|Array|String|Number} a the input data
24620 * @param {Boolean} padded whether it should be padded to 256 bits or not
24621 * @return {Buffer}
24622 */
24623 exports.ripemd160 = function (a, padded) {
24624 a = exports.toBuffer(a)
24625 var hash = createHash('rmd160').update(a).digest()
24626 if (padded === true) {
24627 return exports.setLength(hash, 32)
24628 } else {
24629 return hash
24630 }
24631 }
24632
24633 /**
24634 * Creates SHA-3 hash of the RLP encoded version of the input
24635 * @param {Buffer|Array|String|Number} a the input data
24636 * @return {Buffer}
24637 */
24638 exports.rlphash = function (a) {
24639 return exports.sha3(rlp.encode(a))
24640 }
24641
24642 /**
24643 * Checks if the private key satisfies the rules of the curve secp256k1.
24644 * @param {Buffer} privateKey
24645 * @return {Boolean}
24646 */
24647 exports.isValidPrivate = function (privateKey) {
24648 return secp256k1.privateKeyVerify(privateKey)
24649 }
24650
24651 /**
24652 * Checks if the public key satisfies the rules of the curve secp256k1
24653 * and the requirements of Ethereum.
24654 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
24655 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24656 * @return {Boolean}
24657 */
24658 exports.isValidPublic = function (publicKey, sanitize) {
24659 if (publicKey.length === 64) {
24660 // Convert to SEC1 for secp256k1
24661 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
24662 }
24663
24664 if (!sanitize) {
24665 return false
24666 }
24667
24668 return secp256k1.publicKeyVerify(publicKey)
24669 }
24670
24671 /**
24672 * Returns the ethereum address of a given public key.
24673 * Accepts "Ethereum public keys" and SEC1 encoded keys.
24674 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
24675 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24676 * @return {Buffer}
24677 */
24678 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
24679 pubKey = exports.toBuffer(pubKey)
24680 if (sanitize && (pubKey.length !== 64)) {
24681 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
24682 }
24683 assert(pubKey.length === 64)
24684 // Only take the lower 160bits of the hash
24685 return exports.sha3(pubKey).slice(-20)
24686 }
24687
24688 /**
24689 * Returns the ethereum public key of a given private key
24690 * @param {Buffer} privateKey A private key must be 256 bits wide
24691 * @return {Buffer}
24692 */
24693 var privateToPublic = exports.privateToPublic = function (privateKey) {
24694 privateKey = exports.toBuffer(privateKey)
24695 // skip the type flag and use the X, Y points
24696 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
24697 }
24698
24699 /**
24700 * Converts a public key to the Ethereum format.
24701 * @param {Buffer} publicKey
24702 * @return {Buffer}
24703 */
24704 exports.importPublic = function (publicKey) {
24705 publicKey = exports.toBuffer(publicKey)
24706 if (publicKey.length !== 64) {
24707 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
24708 }
24709 return publicKey
24710 }
24711
24712 /**
24713 * ECDSA sign
24714 * @param {Buffer} msgHash
24715 * @param {Buffer} privateKey
24716 * @return {Object}
24717 */
24718 exports.ecsign = function (msgHash, privateKey) {
24719 var sig = secp256k1.sign(msgHash, privateKey)
24720
24721 var ret = {}
24722 ret.r = sig.signature.slice(0, 32)
24723 ret.s = sig.signature.slice(32, 64)
24724 ret.v = sig.recovery + 27
24725 return ret
24726 }
24727
24728 /**
24729 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
24730 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
24731 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
24732 * used to produce the signature.
24733 * @param message
24734 * @returns {Buffer} hash
24735 */
24736 exports.hashPersonalMessage = function (message) {
24737 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
24738 return exports.sha3(Buffer.concat([prefix, message]))
24739 }
24740
24741 /**
24742 * ECDSA public key recovery from signature
24743 * @param {Buffer} msgHash
24744 * @param {Number} v
24745 * @param {Buffer} r
24746 * @param {Buffer} s
24747 * @return {Buffer} publicKey
24748 */
24749 exports.ecrecover = function (msgHash, v, r, s) {
24750 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
24751 var recovery = v - 27
24752 if (recovery !== 0 && recovery !== 1) {
24753 throw new Error('Invalid signature v value')
24754 }
24755 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
24756 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
24757 }
24758
24759 /**
24760 * Convert signature parameters into the format of `eth_sign` RPC method
24761 * @param {Number} v
24762 * @param {Buffer} r
24763 * @param {Buffer} s
24764 * @return {String} sig
24765 */
24766 exports.toRpcSig = function (v, r, s) {
24767 // NOTE: with potential introduction of chainId this might need to be updated
24768 if (v !== 27 && v !== 28) {
24769 throw new Error('Invalid recovery id')
24770 }
24771
24772 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
24773 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
24774 return exports.bufferToHex(Buffer.concat([
24775 exports.setLengthLeft(r, 32),
24776 exports.setLengthLeft(s, 32),
24777 exports.toBuffer(v - 27)
24778 ]))
24779 }
24780
24781 /**
24782 * Convert signature format of the `eth_sign` RPC method to signature parameters
24783 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
24784 * @param {String} sig
24785 * @return {Object}
24786 */
24787 exports.fromRpcSig = function (sig) {
24788 sig = exports.toBuffer(sig)
24789
24790 // NOTE: with potential introduction of chainId this might need to be updated
24791 if (sig.length !== 65) {
24792 throw new Error('Invalid signature length')
24793 }
24794
24795 var v = sig[64]
24796 // support both versions of `eth_sign` responses
24797 if (v < 27) {
24798 v += 27
24799 }
24800
24801 return {
24802 v: v,
24803 r: sig.slice(0, 32),
24804 s: sig.slice(32, 64)
24805 }
24806 }
24807
24808 /**
24809 * Returns the ethereum address of a given private key
24810 * @param {Buffer} privateKey A private key must be 256 bits wide
24811 * @return {Buffer}
24812 */
24813 exports.privateToAddress = function (privateKey) {
24814 return exports.publicToAddress(privateToPublic(privateKey))
24815 }
24816
24817 /**
24818 * Checks if the address is a valid. Accepts checksummed addresses too
24819 * @param {String} address
24820 * @return {Boolean}
24821 */
24822 exports.isValidAddress = function (address) {
24823 return /^0x[0-9a-fA-F]{40}$/i.test(address)
24824 }
24825
24826 /**
24827 * Returns a checksummed address
24828 * @param {String} address
24829 * @return {String}
24830 */
24831 exports.toChecksumAddress = function (address) {
24832 address = exports.stripHexPrefix(address).toLowerCase()
24833 var hash = exports.sha3(address).toString('hex')
24834 var ret = '0x'
24835
24836 for (var i = 0; i < address.length; i++) {
24837 if (parseInt(hash[i], 16) >= 8) {
24838 ret += address[i].toUpperCase()
24839 } else {
24840 ret += address[i]
24841 }
24842 }
24843
24844 return ret
24845 }
24846
24847 /**
24848 * Checks if the address is a valid checksummed address
24849 * @param {Buffer} address
24850 * @return {Boolean}
24851 */
24852 exports.isValidChecksumAddress = function (address) {
24853 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
24854 }
24855
24856 /**
24857 * Generates an address of a newly created contract
24858 * @param {Buffer} from the address which is creating this new address
24859 * @param {Buffer} nonce the nonce of the from account
24860 * @return {Buffer}
24861 */
24862 exports.generateAddress = function (from, nonce) {
24863 from = exports.toBuffer(from)
24864 nonce = new BN(nonce)
24865
24866 if (nonce.isZero()) {
24867 // in RLP we want to encode null in the case of zero nonce
24868 // read the RLP documentation for an answer if you dare
24869 nonce = null
24870 } else {
24871 nonce = Buffer.from(nonce.toArray())
24872 }
24873
24874 // Only take the lower 160bits of the hash
24875 return exports.rlphash([from, nonce]).slice(-20)
24876 }
24877
24878 /**
24879 * Returns true if the supplied address belongs to a precompiled account
24880 * @param {Buffer|String} address
24881 * @return {Boolean}
24882 */
24883 exports.isPrecompiled = function (address) {
24884 var a = exports.unpad(address)
24885 return a.length === 1 && a[0] > 0 && a[0] < 5
24886 }
24887
24888 /**
24889 * Adds "0x" to a given `String` if it does not already start with "0x"
24890 * @param {String} str
24891 * @return {String}
24892 */
24893 exports.addHexPrefix = function (str) {
24894 if (typeof str !== 'string') {
24895 return str
24896 }
24897
24898 return exports.isHexPrefixed(str) ? str : '0x' + str
24899 }
24900
24901 /**
24902 * Validate ECDSA signature
24903 * @method isValidSignature
24904 * @param {Buffer} v
24905 * @param {Buffer} r
24906 * @param {Buffer} s
24907 * @param {Boolean} [homestead=true]
24908 * @return {Boolean}
24909 */
24910
24911 exports.isValidSignature = function (v, r, s, homestead) {
24912 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
24913 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
24914
24915 if (r.length !== 32 || s.length !== 32) {
24916 return false
24917 }
24918
24919 if (v !== 27 && v !== 28) {
24920 return false
24921 }
24922
24923 r = new BN(r)
24924 s = new BN(s)
24925
24926 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
24927 return false
24928 }
24929
24930 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
24931 return false
24932 }
24933
24934 return true
24935 }
24936
24937 /**
24938 * Converts a `Buffer` or `Array` to JSON
24939 * @param {Buffer|Array} ba
24940 * @return {Array|String|null}
24941 */
24942 exports.baToJSON = function (ba) {
24943 if (Buffer.isBuffer(ba)) {
24944 return '0x' + ba.toString('hex')
24945 } else if (ba instanceof Array) {
24946 var array = []
24947 for (var i = 0; i < ba.length; i++) {
24948 array.push(exports.baToJSON(ba[i]))
24949 }
24950 return array
24951 }
24952 }
24953
24954 /**
24955 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
24956 * @param {Object} self the `Object` to define properties on
24957 * @param {Array} fields an array fields to define. Fields can contain:
24958 * * `name` - the name of the properties
24959 * * `length` - the number of bytes the field can have
24960 * * `allowLess` - if the field can be less than the length
24961 * * `allowEmpty`
24962 * @param {*} data data to be validated against the definitions
24963 */
24964 exports.defineProperties = function (self, fields, data) {
24965 self.raw = []
24966 self._fields = []
24967
24968 // attach the `toJSON`
24969 self.toJSON = function (label) {
24970 if (label) {
24971 var obj = {}
24972 self._fields.forEach(function (field) {
24973 obj[field] = '0x' + self[field].toString('hex')
24974 })
24975 return obj
24976 }
24977 return exports.baToJSON(this.raw)
24978 }
24979
24980 self.serialize = function serialize () {
24981 return rlp.encode(self.raw)
24982 }
24983
24984 fields.forEach(function (field, i) {
24985 self._fields.push(field.name)
24986 function getter () {
24987 return self.raw[i]
24988 }
24989 function setter (v) {
24990 v = exports.toBuffer(v)
24991
24992 if (v.toString('hex') === '00' && !field.allowZero) {
24993 v = Buffer.allocUnsafe(0)
24994 }
24995
24996 if (field.allowLess && field.length) {
24997 v = exports.stripZeros(v)
24998 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
24999 } else if (!(field.allowZero && v.length === 0) && field.length) {
25000 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
25001 }
25002
25003 self.raw[i] = v
25004 }
25005
25006 Object.defineProperty(self, field.name, {
25007 enumerable: true,
25008 configurable: true,
25009 get: getter,
25010 set: setter
25011 })
25012
25013 if (field.default) {
25014 self[field.name] = field.default
25015 }
25016
25017 // attach alias
25018 if (field.alias) {
25019 Object.defineProperty(self, field.alias, {
25020 enumerable: false,
25021 configurable: true,
25022 set: setter,
25023 get: getter
25024 })
25025 }
25026 })
25027
25028 // if the constuctor is passed data
25029 if (data) {
25030 if (typeof data === 'string') {
25031 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
25032 }
25033
25034 if (Buffer.isBuffer(data)) {
25035 data = rlp.decode(data)
25036 }
25037
25038 if (Array.isArray(data)) {
25039 if (data.length > self._fields.length) {
25040 throw (new Error('wrong number of fields in data'))
25041 }
25042
25043 // make sure all the items are buffers
25044 data.forEach(function (d, i) {
25045 self[self._fields[i]] = exports.toBuffer(d)
25046 })
25047 } else if (typeof data === 'object') {
25048 const keys = Object.keys(data)
25049 fields.forEach(function (field) {
25050 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
25051 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
25052 })
25053 } else {
25054 throw new Error('invalid data')
25055 }
25056 }
25057 }
25058
25059 }).call(this,require("buffer").Buffer)
25060 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
25061 (function (Buffer){
25062 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
25063 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
25064 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
25065
25066 function check (buffer) {
25067 if (buffer.length < 8) return false
25068 if (buffer.length > 72) return false
25069 if (buffer[0] !== 0x30) return false
25070 if (buffer[1] !== buffer.length - 2) return false
25071 if (buffer[2] !== 0x02) return false
25072
25073 var lenR = buffer[3]
25074 if (lenR === 0) return false
25075 if (5 + lenR >= buffer.length) return false
25076 if (buffer[4 + lenR] !== 0x02) return false
25077
25078 var lenS = buffer[5 + lenR]
25079 if (lenS === 0) return false
25080 if ((6 + lenR + lenS) !== buffer.length) return false
25081
25082 if (buffer[4] & 0x80) return false
25083 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
25084
25085 if (buffer[lenR + 6] & 0x80) return false
25086 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
25087 return true
25088 }
25089
25090 function decode (buffer) {
25091 if (buffer.length < 8) throw new Error('DER sequence length is too short')
25092 if (buffer.length > 72) throw new Error('DER sequence length is too long')
25093 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
25094 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
25095 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
25096
25097 var lenR = buffer[3]
25098 if (lenR === 0) throw new Error('R length is zero')
25099 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
25100 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
25101
25102 var lenS = buffer[5 + lenR]
25103 if (lenS === 0) throw new Error('S length is zero')
25104 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
25105
25106 if (buffer[4] & 0x80) throw new Error('R value is negative')
25107 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
25108
25109 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
25110 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
25111
25112 // non-BIP66 - extract R, S values
25113 return {
25114 r: buffer.slice(4, 4 + lenR),
25115 s: buffer.slice(6 + lenR)
25116 }
25117 }
25118
25119 /*
25120 * Expects r and s to be positive DER integers.
25121 *
25122 * The DER format uses the most significant bit as a sign bit (& 0x80).
25123 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
25124 *
25125 * Examples:
25126 *
25127 * 0 => 0x00
25128 * 1 => 0x01
25129 * -1 => 0xff
25130 * 127 => 0x7f
25131 * -127 => 0x81
25132 * 128 => 0x0080
25133 * -128 => 0x80
25134 * 255 => 0x00ff
25135 * -255 => 0xff01
25136 * 16300 => 0x3fac
25137 * -16300 => 0xc054
25138 * 62300 => 0x00f35c
25139 * -62300 => 0xff0ca4
25140 */
25141 function encode (r, s) {
25142 var lenR = r.length
25143 var lenS = s.length
25144 if (lenR === 0) throw new Error('R length is zero')
25145 if (lenS === 0) throw new Error('S length is zero')
25146 if (lenR > 33) throw new Error('R length is too long')
25147 if (lenS > 33) throw new Error('S length is too long')
25148 if (r[0] & 0x80) throw new Error('R value is negative')
25149 if (s[0] & 0x80) throw new Error('S value is negative')
25150 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
25151 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
25152
25153 var signature = new Buffer(6 + lenR + lenS)
25154
25155 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
25156 signature[0] = 0x30
25157 signature[1] = signature.length - 2
25158 signature[2] = 0x02
25159 signature[3] = r.length
25160 r.copy(signature, 4)
25161 signature[4 + lenR] = 0x02
25162 signature[5 + lenR] = s.length
25163 s.copy(signature, 6 + lenR)
25164
25165 return signature
25166 }
25167
25168 module.exports = {
25169 check: check,
25170 decode: decode,
25171 encode: encode
25172 }
25173
25174 }).call(this,require("buffer").Buffer)
25175 },{"buffer":5}],33:[function(require,module,exports){
25176 (function (module, exports) {
25177 'use strict';
25178
25179 // Utils
25180 function assert (val, msg) {
25181 if (!val) throw new Error(msg || 'Assertion failed');
25182 }
25183
25184 // Could use `inherits` module, but don't want to move from single file
25185 // architecture yet.
25186 function inherits (ctor, superCtor) {
25187 ctor.super_ = superCtor;
25188 var TempCtor = function () {};
25189 TempCtor.prototype = superCtor.prototype;
25190 ctor.prototype = new TempCtor();
25191 ctor.prototype.constructor = ctor;
25192 }
25193
25194 // BN
25195
25196 function BN (number, base, endian) {
25197 if (BN.isBN(number)) {
25198 return number;
25199 }
25200
25201 this.negative = 0;
25202 this.words = null;
25203 this.length = 0;
25204
25205 // Reduction context
25206 this.red = null;
25207
25208 if (number !== null) {
25209 if (base === 'le' || base === 'be') {
25210 endian = base;
25211 base = 10;
25212 }
25213
25214 this._init(number || 0, base || 10, endian || 'be');
25215 }
25216 }
25217 if (typeof module === 'object') {
25218 module.exports = BN;
25219 } else {
25220 exports.BN = BN;
25221 }
25222
25223 BN.BN = BN;
25224 BN.wordSize = 26;
25225
25226 var Buffer;
25227 try {
25228 Buffer = require('buf' + 'fer').Buffer;
25229 } catch (e) {
25230 }
25231
25232 BN.isBN = function isBN (num) {
25233 if (num instanceof BN) {
25234 return true;
25235 }
25236
25237 return num !== null && typeof num === 'object' &&
25238 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
25239 };
25240
25241 BN.max = function max (left, right) {
25242 if (left.cmp(right) > 0) return left;
25243 return right;
25244 };
25245
25246 BN.min = function min (left, right) {
25247 if (left.cmp(right) < 0) return left;
25248 return right;
25249 };
25250
25251 BN.prototype._init = function init (number, base, endian) {
25252 if (typeof number === 'number') {
25253 return this._initNumber(number, base, endian);
25254 }
25255
25256 if (typeof number === 'object') {
25257 return this._initArray(number, base, endian);
25258 }
25259
25260 if (base === 'hex') {
25261 base = 16;
25262 }
25263 assert(base === (base | 0) && base >= 2 && base <= 36);
25264
25265 number = number.toString().replace(/\s+/g, '');
25266 var start = 0;
25267 if (number[0] === '-') {
25268 start++;
25269 }
25270
25271 if (base === 16) {
25272 this._parseHex(number, start);
25273 } else {
25274 this._parseBase(number, base, start);
25275 }
25276
25277 if (number[0] === '-') {
25278 this.negative = 1;
25279 }
25280
25281 this.strip();
25282
25283 if (endian !== 'le') return;
25284
25285 this._initArray(this.toArray(), base, endian);
25286 };
25287
25288 BN.prototype._initNumber = function _initNumber (number, base, endian) {
25289 if (number < 0) {
25290 this.negative = 1;
25291 number = -number;
25292 }
25293 if (number < 0x4000000) {
25294 this.words = [ number & 0x3ffffff ];
25295 this.length = 1;
25296 } else if (number < 0x10000000000000) {
25297 this.words = [
25298 number & 0x3ffffff,
25299 (number / 0x4000000) & 0x3ffffff
25300 ];
25301 this.length = 2;
25302 } else {
25303 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
25304 this.words = [
25305 number & 0x3ffffff,
25306 (number / 0x4000000) & 0x3ffffff,
25307 1
25308 ];
25309 this.length = 3;
25310 }
25311
25312 if (endian !== 'le') return;
25313
25314 // Reverse the bytes
25315 this._initArray(this.toArray(), base, endian);
25316 };
25317
25318 BN.prototype._initArray = function _initArray (number, base, endian) {
25319 // Perhaps a Uint8Array
25320 assert(typeof number.length === 'number');
25321 if (number.length <= 0) {
25322 this.words = [ 0 ];
25323 this.length = 1;
25324 return this;
25325 }
25326
25327 this.length = Math.ceil(number.length / 3);
25328 this.words = new Array(this.length);
25329 for (var i = 0; i < this.length; i++) {
25330 this.words[i] = 0;
25331 }
25332
25333 var j, w;
25334 var off = 0;
25335 if (endian === 'be') {
25336 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
25337 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
25338 this.words[j] |= (w << off) & 0x3ffffff;
25339 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25340 off += 24;
25341 if (off >= 26) {
25342 off -= 26;
25343 j++;
25344 }
25345 }
25346 } else if (endian === 'le') {
25347 for (i = 0, j = 0; i < number.length; i += 3) {
25348 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
25349 this.words[j] |= (w << off) & 0x3ffffff;
25350 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25351 off += 24;
25352 if (off >= 26) {
25353 off -= 26;
25354 j++;
25355 }
25356 }
25357 }
25358 return this.strip();
25359 };
25360
25361 function parseHex (str, start, end) {
25362 var r = 0;
25363 var len = Math.min(str.length, end);
25364 for (var i = start; i < len; i++) {
25365 var c = str.charCodeAt(i) - 48;
25366
25367 r <<= 4;
25368
25369 // 'a' - 'f'
25370 if (c >= 49 && c <= 54) {
25371 r |= c - 49 + 0xa;
25372
25373 // 'A' - 'F'
25374 } else if (c >= 17 && c <= 22) {
25375 r |= c - 17 + 0xa;
25376
25377 // '0' - '9'
25378 } else {
25379 r |= c & 0xf;
25380 }
25381 }
25382 return r;
25383 }
25384
25385 BN.prototype._parseHex = function _parseHex (number, start) {
25386 // Create possibly bigger array to ensure that it fits the number
25387 this.length = Math.ceil((number.length - start) / 6);
25388 this.words = new Array(this.length);
25389 for (var i = 0; i < this.length; i++) {
25390 this.words[i] = 0;
25391 }
25392
25393 var j, w;
25394 // Scan 24-bit chunks and add them to the number
25395 var off = 0;
25396 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
25397 w = parseHex(number, i, i + 6);
25398 this.words[j] |= (w << off) & 0x3ffffff;
25399 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
25400 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25401 off += 24;
25402 if (off >= 26) {
25403 off -= 26;
25404 j++;
25405 }
25406 }
25407 if (i + 6 !== start) {
25408 w = parseHex(number, start, i + 6);
25409 this.words[j] |= (w << off) & 0x3ffffff;
25410 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25411 }
25412 this.strip();
25413 };
25414
25415 function parseBase (str, start, end, mul) {
25416 var r = 0;
25417 var len = Math.min(str.length, end);
25418 for (var i = start; i < len; i++) {
25419 var c = str.charCodeAt(i) - 48;
25420
25421 r *= mul;
25422
25423 // 'a'
25424 if (c >= 49) {
25425 r += c - 49 + 0xa;
25426
25427 // 'A'
25428 } else if (c >= 17) {
25429 r += c - 17 + 0xa;
25430
25431 // '0' - '9'
25432 } else {
25433 r += c;
25434 }
25435 }
25436 return r;
25437 }
25438
25439 BN.prototype._parseBase = function _parseBase (number, base, start) {
25440 // Initialize as zero
25441 this.words = [ 0 ];
25442 this.length = 1;
25443
25444 // Find length of limb in base
25445 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
25446 limbLen++;
25447 }
25448 limbLen--;
25449 limbPow = (limbPow / base) | 0;
25450
25451 var total = number.length - start;
25452 var mod = total % limbLen;
25453 var end = Math.min(total, total - mod) + start;
25454
25455 var word = 0;
25456 for (var i = start; i < end; i += limbLen) {
25457 word = parseBase(number, i, i + limbLen, base);
25458
25459 this.imuln(limbPow);
25460 if (this.words[0] + word < 0x4000000) {
25461 this.words[0] += word;
25462 } else {
25463 this._iaddn(word);
25464 }
25465 }
25466
25467 if (mod !== 0) {
25468 var pow = 1;
25469 word = parseBase(number, i, number.length, base);
25470
25471 for (i = 0; i < mod; i++) {
25472 pow *= base;
25473 }
25474
25475 this.imuln(pow);
25476 if (this.words[0] + word < 0x4000000) {
25477 this.words[0] += word;
25478 } else {
25479 this._iaddn(word);
25480 }
25481 }
25482 };
25483
25484 BN.prototype.copy = function copy (dest) {
25485 dest.words = new Array(this.length);
25486 for (var i = 0; i < this.length; i++) {
25487 dest.words[i] = this.words[i];
25488 }
25489 dest.length = this.length;
25490 dest.negative = this.negative;
25491 dest.red = this.red;
25492 };
25493
25494 BN.prototype.clone = function clone () {
25495 var r = new BN(null);
25496 this.copy(r);
25497 return r;
25498 };
25499
25500 BN.prototype._expand = function _expand (size) {
25501 while (this.length < size) {
25502 this.words[this.length++] = 0;
25503 }
25504 return this;
25505 };
25506
25507 // Remove leading `0` from `this`
25508 BN.prototype.strip = function strip () {
25509 while (this.length > 1 && this.words[this.length - 1] === 0) {
25510 this.length--;
25511 }
25512 return this._normSign();
25513 };
25514
25515 BN.prototype._normSign = function _normSign () {
25516 // -0 = 0
25517 if (this.length === 1 && this.words[0] === 0) {
25518 this.negative = 0;
25519 }
25520 return this;
25521 };
25522
25523 BN.prototype.inspect = function inspect () {
25524 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
25525 };
25526
25527 /*
25528
25529 var zeros = [];
25530 var groupSizes = [];
25531 var groupBases = [];
25532
25533 var s = '';
25534 var i = -1;
25535 while (++i < BN.wordSize) {
25536 zeros[i] = s;
25537 s += '0';
25538 }
25539 groupSizes[0] = 0;
25540 groupSizes[1] = 0;
25541 groupBases[0] = 0;
25542 groupBases[1] = 0;
25543 var base = 2 - 1;
25544 while (++base < 36 + 1) {
25545 var groupSize = 0;
25546 var groupBase = 1;
25547 while (groupBase < (1 << BN.wordSize) / base) {
25548 groupBase *= base;
25549 groupSize += 1;
25550 }
25551 groupSizes[base] = groupSize;
25552 groupBases[base] = groupBase;
25553 }
25554
25555 */
25556
25557 var zeros = [
25558 '',
25559 '0',
25560 '00',
25561 '000',
25562 '0000',
25563 '00000',
25564 '000000',
25565 '0000000',
25566 '00000000',
25567 '000000000',
25568 '0000000000',
25569 '00000000000',
25570 '000000000000',
25571 '0000000000000',
25572 '00000000000000',
25573 '000000000000000',
25574 '0000000000000000',
25575 '00000000000000000',
25576 '000000000000000000',
25577 '0000000000000000000',
25578 '00000000000000000000',
25579 '000000000000000000000',
25580 '0000000000000000000000',
25581 '00000000000000000000000',
25582 '000000000000000000000000',
25583 '0000000000000000000000000'
25584 ];
25585
25586 var groupSizes = [
25587 0, 0,
25588 25, 16, 12, 11, 10, 9, 8,
25589 8, 7, 7, 7, 7, 6, 6,
25590 6, 6, 6, 6, 6, 5, 5,
25591 5, 5, 5, 5, 5, 5, 5,
25592 5, 5, 5, 5, 5, 5, 5
25593 ];
25594
25595 var groupBases = [
25596 0, 0,
25597 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
25598 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
25599 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
25600 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
25601 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
25602 ];
25603
25604 BN.prototype.toString = function toString (base, padding) {
25605 base = base || 10;
25606 padding = padding | 0 || 1;
25607
25608 var out;
25609 if (base === 16 || base === 'hex') {
25610 out = '';
25611 var off = 0;
25612 var carry = 0;
25613 for (var i = 0; i < this.length; i++) {
25614 var w = this.words[i];
25615 var word = (((w << off) | carry) & 0xffffff).toString(16);
25616 carry = (w >>> (24 - off)) & 0xffffff;
25617 if (carry !== 0 || i !== this.length - 1) {
25618 out = zeros[6 - word.length] + word + out;
25619 } else {
25620 out = word + out;
25621 }
25622 off += 2;
25623 if (off >= 26) {
25624 off -= 26;
25625 i--;
25626 }
25627 }
25628 if (carry !== 0) {
25629 out = carry.toString(16) + out;
25630 }
25631 while (out.length % padding !== 0) {
25632 out = '0' + out;
25633 }
25634 if (this.negative !== 0) {
25635 out = '-' + out;
25636 }
25637 return out;
25638 }
25639
25640 if (base === (base | 0) && base >= 2 && base <= 36) {
25641 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
25642 var groupSize = groupSizes[base];
25643 // var groupBase = Math.pow(base, groupSize);
25644 var groupBase = groupBases[base];
25645 out = '';
25646 var c = this.clone();
25647 c.negative = 0;
25648 while (!c.isZero()) {
25649 var r = c.modn(groupBase).toString(base);
25650 c = c.idivn(groupBase);
25651
25652 if (!c.isZero()) {
25653 out = zeros[groupSize - r.length] + r + out;
25654 } else {
25655 out = r + out;
25656 }
25657 }
25658 if (this.isZero()) {
25659 out = '0' + out;
25660 }
25661 while (out.length % padding !== 0) {
25662 out = '0' + out;
25663 }
25664 if (this.negative !== 0) {
25665 out = '-' + out;
25666 }
25667 return out;
25668 }
25669
25670 assert(false, 'Base should be between 2 and 36');
25671 };
25672
25673 BN.prototype.toNumber = function toNumber () {
25674 var ret = this.words[0];
25675 if (this.length === 2) {
25676 ret += this.words[1] * 0x4000000;
25677 } else if (this.length === 3 && this.words[2] === 0x01) {
25678 // NOTE: at this stage it is known that the top bit is set
25679 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
25680 } else if (this.length > 2) {
25681 assert(false, 'Number can only safely store up to 53 bits');
25682 }
25683 return (this.negative !== 0) ? -ret : ret;
25684 };
25685
25686 BN.prototype.toJSON = function toJSON () {
25687 return this.toString(16);
25688 };
25689
25690 BN.prototype.toBuffer = function toBuffer (endian, length) {
25691 assert(typeof Buffer !== 'undefined');
25692 return this.toArrayLike(Buffer, endian, length);
25693 };
25694
25695 BN.prototype.toArray = function toArray (endian, length) {
25696 return this.toArrayLike(Array, endian, length);
25697 };
25698
25699 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
25700 var byteLength = this.byteLength();
25701 var reqLength = length || Math.max(1, byteLength);
25702 assert(byteLength <= reqLength, 'byte array longer than desired length');
25703 assert(reqLength > 0, 'Requested array length <= 0');
25704
25705 this.strip();
25706 var littleEndian = endian === 'le';
25707 var res = new ArrayType(reqLength);
25708
25709 var b, i;
25710 var q = this.clone();
25711 if (!littleEndian) {
25712 // Assume big-endian
25713 for (i = 0; i < reqLength - byteLength; i++) {
25714 res[i] = 0;
25715 }
25716
25717 for (i = 0; !q.isZero(); i++) {
25718 b = q.andln(0xff);
25719 q.iushrn(8);
25720
25721 res[reqLength - i - 1] = b;
25722 }
25723 } else {
25724 for (i = 0; !q.isZero(); i++) {
25725 b = q.andln(0xff);
25726 q.iushrn(8);
25727
25728 res[i] = b;
25729 }
25730
25731 for (; i < reqLength; i++) {
25732 res[i] = 0;
25733 }
25734 }
25735
25736 return res;
25737 };
25738
25739 if (Math.clz32) {
25740 BN.prototype._countBits = function _countBits (w) {
25741 return 32 - Math.clz32(w);
25742 };
25743 } else {
25744 BN.prototype._countBits = function _countBits (w) {
25745 var t = w;
25746 var r = 0;
25747 if (t >= 0x1000) {
25748 r += 13;
25749 t >>>= 13;
25750 }
25751 if (t >= 0x40) {
25752 r += 7;
25753 t >>>= 7;
25754 }
25755 if (t >= 0x8) {
25756 r += 4;
25757 t >>>= 4;
25758 }
25759 if (t >= 0x02) {
25760 r += 2;
25761 t >>>= 2;
25762 }
25763 return r + t;
25764 };
25765 }
25766
25767 BN.prototype._zeroBits = function _zeroBits (w) {
25768 // Short-cut
25769 if (w === 0) return 26;
25770
25771 var t = w;
25772 var r = 0;
25773 if ((t & 0x1fff) === 0) {
25774 r += 13;
25775 t >>>= 13;
25776 }
25777 if ((t & 0x7f) === 0) {
25778 r += 7;
25779 t >>>= 7;
25780 }
25781 if ((t & 0xf) === 0) {
25782 r += 4;
25783 t >>>= 4;
25784 }
25785 if ((t & 0x3) === 0) {
25786 r += 2;
25787 t >>>= 2;
25788 }
25789 if ((t & 0x1) === 0) {
25790 r++;
25791 }
25792 return r;
25793 };
25794
25795 // Return number of used bits in a BN
25796 BN.prototype.bitLength = function bitLength () {
25797 var w = this.words[this.length - 1];
25798 var hi = this._countBits(w);
25799 return (this.length - 1) * 26 + hi;
25800 };
25801
25802 function toBitArray (num) {
25803 var w = new Array(num.bitLength());
25804
25805 for (var bit = 0; bit < w.length; bit++) {
25806 var off = (bit / 26) | 0;
25807 var wbit = bit % 26;
25808
25809 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
25810 }
25811
25812 return w;
25813 }
25814
25815 // Number of trailing zero bits
25816 BN.prototype.zeroBits = function zeroBits () {
25817 if (this.isZero()) return 0;
25818
25819 var r = 0;
25820 for (var i = 0; i < this.length; i++) {
25821 var b = this._zeroBits(this.words[i]);
25822 r += b;
25823 if (b !== 26) break;
25824 }
25825 return r;
25826 };
25827
25828 BN.prototype.byteLength = function byteLength () {
25829 return Math.ceil(this.bitLength() / 8);
25830 };
25831
25832 BN.prototype.toTwos = function toTwos (width) {
25833 if (this.negative !== 0) {
25834 return this.abs().inotn(width).iaddn(1);
25835 }
25836 return this.clone();
25837 };
25838
25839 BN.prototype.fromTwos = function fromTwos (width) {
25840 if (this.testn(width - 1)) {
25841 return this.notn(width).iaddn(1).ineg();
25842 }
25843 return this.clone();
25844 };
25845
25846 BN.prototype.isNeg = function isNeg () {
25847 return this.negative !== 0;
25848 };
25849
25850 // Return negative clone of `this`
25851 BN.prototype.neg = function neg () {
25852 return this.clone().ineg();
25853 };
25854
25855 BN.prototype.ineg = function ineg () {
25856 if (!this.isZero()) {
25857 this.negative ^= 1;
25858 }
25859
25860 return this;
25861 };
25862
25863 // Or `num` with `this` in-place
25864 BN.prototype.iuor = function iuor (num) {
25865 while (this.length < num.length) {
25866 this.words[this.length++] = 0;
25867 }
25868
25869 for (var i = 0; i < num.length; i++) {
25870 this.words[i] = this.words[i] | num.words[i];
25871 }
25872
25873 return this.strip();
25874 };
25875
25876 BN.prototype.ior = function ior (num) {
25877 assert((this.negative | num.negative) === 0);
25878 return this.iuor(num);
25879 };
25880
25881 // Or `num` with `this`
25882 BN.prototype.or = function or (num) {
25883 if (this.length > num.length) return this.clone().ior(num);
25884 return num.clone().ior(this);
25885 };
25886
25887 BN.prototype.uor = function uor (num) {
25888 if (this.length > num.length) return this.clone().iuor(num);
25889 return num.clone().iuor(this);
25890 };
25891
25892 // And `num` with `this` in-place
25893 BN.prototype.iuand = function iuand (num) {
25894 // b = min-length(num, this)
25895 var b;
25896 if (this.length > num.length) {
25897 b = num;
25898 } else {
25899 b = this;
25900 }
25901
25902 for (var i = 0; i < b.length; i++) {
25903 this.words[i] = this.words[i] & num.words[i];
25904 }
25905
25906 this.length = b.length;
25907
25908 return this.strip();
25909 };
25910
25911 BN.prototype.iand = function iand (num) {
25912 assert((this.negative | num.negative) === 0);
25913 return this.iuand(num);
25914 };
25915
25916 // And `num` with `this`
25917 BN.prototype.and = function and (num) {
25918 if (this.length > num.length) return this.clone().iand(num);
25919 return num.clone().iand(this);
25920 };
25921
25922 BN.prototype.uand = function uand (num) {
25923 if (this.length > num.length) return this.clone().iuand(num);
25924 return num.clone().iuand(this);
25925 };
25926
25927 // Xor `num` with `this` in-place
25928 BN.prototype.iuxor = function iuxor (num) {
25929 // a.length > b.length
25930 var a;
25931 var b;
25932 if (this.length > num.length) {
25933 a = this;
25934 b = num;
25935 } else {
25936 a = num;
25937 b = this;
25938 }
25939
25940 for (var i = 0; i < b.length; i++) {
25941 this.words[i] = a.words[i] ^ b.words[i];
25942 }
25943
25944 if (this !== a) {
25945 for (; i < a.length; i++) {
25946 this.words[i] = a.words[i];
25947 }
25948 }
25949
25950 this.length = a.length;
25951
25952 return this.strip();
25953 };
25954
25955 BN.prototype.ixor = function ixor (num) {
25956 assert((this.negative | num.negative) === 0);
25957 return this.iuxor(num);
25958 };
25959
25960 // Xor `num` with `this`
25961 BN.prototype.xor = function xor (num) {
25962 if (this.length > num.length) return this.clone().ixor(num);
25963 return num.clone().ixor(this);
25964 };
25965
25966 BN.prototype.uxor = function uxor (num) {
25967 if (this.length > num.length) return this.clone().iuxor(num);
25968 return num.clone().iuxor(this);
25969 };
25970
25971 // Not ``this`` with ``width`` bitwidth
25972 BN.prototype.inotn = function inotn (width) {
25973 assert(typeof width === 'number' && width >= 0);
25974
25975 var bytesNeeded = Math.ceil(width / 26) | 0;
25976 var bitsLeft = width % 26;
25977
25978 // Extend the buffer with leading zeroes
25979 this._expand(bytesNeeded);
25980
25981 if (bitsLeft > 0) {
25982 bytesNeeded--;
25983 }
25984
25985 // Handle complete words
25986 for (var i = 0; i < bytesNeeded; i++) {
25987 this.words[i] = ~this.words[i] & 0x3ffffff;
25988 }
25989
25990 // Handle the residue
25991 if (bitsLeft > 0) {
25992 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
25993 }
25994
25995 // And remove leading zeroes
25996 return this.strip();
25997 };
25998
25999 BN.prototype.notn = function notn (width) {
26000 return this.clone().inotn(width);
26001 };
26002
26003 // Set `bit` of `this`
26004 BN.prototype.setn = function setn (bit, val) {
26005 assert(typeof bit === 'number' && bit >= 0);
26006
26007 var off = (bit / 26) | 0;
26008 var wbit = bit % 26;
26009
26010 this._expand(off + 1);
26011
26012 if (val) {
26013 this.words[off] = this.words[off] | (1 << wbit);
26014 } else {
26015 this.words[off] = this.words[off] & ~(1 << wbit);
26016 }
26017
26018 return this.strip();
26019 };
26020
26021 // Add `num` to `this` in-place
26022 BN.prototype.iadd = function iadd (num) {
26023 var r;
26024
26025 // negative + positive
26026 if (this.negative !== 0 && num.negative === 0) {
26027 this.negative = 0;
26028 r = this.isub(num);
26029 this.negative ^= 1;
26030 return this._normSign();
26031
26032 // positive + negative
26033 } else if (this.negative === 0 && num.negative !== 0) {
26034 num.negative = 0;
26035 r = this.isub(num);
26036 num.negative = 1;
26037 return r._normSign();
26038 }
26039
26040 // a.length > b.length
26041 var a, b;
26042 if (this.length > num.length) {
26043 a = this;
26044 b = num;
26045 } else {
26046 a = num;
26047 b = this;
26048 }
26049
26050 var carry = 0;
26051 for (var i = 0; i < b.length; i++) {
26052 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
26053 this.words[i] = r & 0x3ffffff;
26054 carry = r >>> 26;
26055 }
26056 for (; carry !== 0 && i < a.length; i++) {
26057 r = (a.words[i] | 0) + carry;
26058 this.words[i] = r & 0x3ffffff;
26059 carry = r >>> 26;
26060 }
26061
26062 this.length = a.length;
26063 if (carry !== 0) {
26064 this.words[this.length] = carry;
26065 this.length++;
26066 // Copy the rest of the words
26067 } else if (a !== this) {
26068 for (; i < a.length; i++) {
26069 this.words[i] = a.words[i];
26070 }
26071 }
26072
26073 return this;
26074 };
26075
26076 // Add `num` to `this`
26077 BN.prototype.add = function add (num) {
26078 var res;
26079 if (num.negative !== 0 && this.negative === 0) {
26080 num.negative = 0;
26081 res = this.sub(num);
26082 num.negative ^= 1;
26083 return res;
26084 } else if (num.negative === 0 && this.negative !== 0) {
26085 this.negative = 0;
26086 res = num.sub(this);
26087 this.negative = 1;
26088 return res;
26089 }
26090
26091 if (this.length > num.length) return this.clone().iadd(num);
26092
26093 return num.clone().iadd(this);
26094 };
26095
26096 // Subtract `num` from `this` in-place
26097 BN.prototype.isub = function isub (num) {
26098 // this - (-num) = this + num
26099 if (num.negative !== 0) {
26100 num.negative = 0;
26101 var r = this.iadd(num);
26102 num.negative = 1;
26103 return r._normSign();
26104
26105 // -this - num = -(this + num)
26106 } else if (this.negative !== 0) {
26107 this.negative = 0;
26108 this.iadd(num);
26109 this.negative = 1;
26110 return this._normSign();
26111 }
26112
26113 // At this point both numbers are positive
26114 var cmp = this.cmp(num);
26115
26116 // Optimization - zeroify
26117 if (cmp === 0) {
26118 this.negative = 0;
26119 this.length = 1;
26120 this.words[0] = 0;
26121 return this;
26122 }
26123
26124 // a > b
26125 var a, b;
26126 if (cmp > 0) {
26127 a = this;
26128 b = num;
26129 } else {
26130 a = num;
26131 b = this;
26132 }
26133
26134 var carry = 0;
26135 for (var i = 0; i < b.length; i++) {
26136 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
26137 carry = r >> 26;
26138 this.words[i] = r & 0x3ffffff;
26139 }
26140 for (; carry !== 0 && i < a.length; i++) {
26141 r = (a.words[i] | 0) + carry;
26142 carry = r >> 26;
26143 this.words[i] = r & 0x3ffffff;
26144 }
26145
26146 // Copy rest of the words
26147 if (carry === 0 && i < a.length && a !== this) {
26148 for (; i < a.length; i++) {
26149 this.words[i] = a.words[i];
26150 }
26151 }
26152
26153 this.length = Math.max(this.length, i);
26154
26155 if (a !== this) {
26156 this.negative = 1;
26157 }
26158
26159 return this.strip();
26160 };
26161
26162 // Subtract `num` from `this`
26163 BN.prototype.sub = function sub (num) {
26164 return this.clone().isub(num);
26165 };
26166
26167 function smallMulTo (self, num, out) {
26168 out.negative = num.negative ^ self.negative;
26169 var len = (self.length + num.length) | 0;
26170 out.length = len;
26171 len = (len - 1) | 0;
26172
26173 // Peel one iteration (compiler can't do it, because of code complexity)
26174 var a = self.words[0] | 0;
26175 var b = num.words[0] | 0;
26176 var r = a * b;
26177
26178 var lo = r & 0x3ffffff;
26179 var carry = (r / 0x4000000) | 0;
26180 out.words[0] = lo;
26181
26182 for (var k = 1; k < len; k++) {
26183 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26184 // note that ncarry could be >= 0x3ffffff
26185 var ncarry = carry >>> 26;
26186 var rword = carry & 0x3ffffff;
26187 var maxJ = Math.min(k, num.length - 1);
26188 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26189 var i = (k - j) | 0;
26190 a = self.words[i] | 0;
26191 b = num.words[j] | 0;
26192 r = a * b + rword;
26193 ncarry += (r / 0x4000000) | 0;
26194 rword = r & 0x3ffffff;
26195 }
26196 out.words[k] = rword | 0;
26197 carry = ncarry | 0;
26198 }
26199 if (carry !== 0) {
26200 out.words[k] = carry | 0;
26201 } else {
26202 out.length--;
26203 }
26204
26205 return out.strip();
26206 }
26207
26208 // TODO(indutny): it may be reasonable to omit it for users who don't need
26209 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
26210 // multiplication (like elliptic secp256k1).
26211 var comb10MulTo = function comb10MulTo (self, num, out) {
26212 var a = self.words;
26213 var b = num.words;
26214 var o = out.words;
26215 var c = 0;
26216 var lo;
26217 var mid;
26218 var hi;
26219 var a0 = a[0] | 0;
26220 var al0 = a0 & 0x1fff;
26221 var ah0 = a0 >>> 13;
26222 var a1 = a[1] | 0;
26223 var al1 = a1 & 0x1fff;
26224 var ah1 = a1 >>> 13;
26225 var a2 = a[2] | 0;
26226 var al2 = a2 & 0x1fff;
26227 var ah2 = a2 >>> 13;
26228 var a3 = a[3] | 0;
26229 var al3 = a3 & 0x1fff;
26230 var ah3 = a3 >>> 13;
26231 var a4 = a[4] | 0;
26232 var al4 = a4 & 0x1fff;
26233 var ah4 = a4 >>> 13;
26234 var a5 = a[5] | 0;
26235 var al5 = a5 & 0x1fff;
26236 var ah5 = a5 >>> 13;
26237 var a6 = a[6] | 0;
26238 var al6 = a6 & 0x1fff;
26239 var ah6 = a6 >>> 13;
26240 var a7 = a[7] | 0;
26241 var al7 = a7 & 0x1fff;
26242 var ah7 = a7 >>> 13;
26243 var a8 = a[8] | 0;
26244 var al8 = a8 & 0x1fff;
26245 var ah8 = a8 >>> 13;
26246 var a9 = a[9] | 0;
26247 var al9 = a9 & 0x1fff;
26248 var ah9 = a9 >>> 13;
26249 var b0 = b[0] | 0;
26250 var bl0 = b0 & 0x1fff;
26251 var bh0 = b0 >>> 13;
26252 var b1 = b[1] | 0;
26253 var bl1 = b1 & 0x1fff;
26254 var bh1 = b1 >>> 13;
26255 var b2 = b[2] | 0;
26256 var bl2 = b2 & 0x1fff;
26257 var bh2 = b2 >>> 13;
26258 var b3 = b[3] | 0;
26259 var bl3 = b3 & 0x1fff;
26260 var bh3 = b3 >>> 13;
26261 var b4 = b[4] | 0;
26262 var bl4 = b4 & 0x1fff;
26263 var bh4 = b4 >>> 13;
26264 var b5 = b[5] | 0;
26265 var bl5 = b5 & 0x1fff;
26266 var bh5 = b5 >>> 13;
26267 var b6 = b[6] | 0;
26268 var bl6 = b6 & 0x1fff;
26269 var bh6 = b6 >>> 13;
26270 var b7 = b[7] | 0;
26271 var bl7 = b7 & 0x1fff;
26272 var bh7 = b7 >>> 13;
26273 var b8 = b[8] | 0;
26274 var bl8 = b8 & 0x1fff;
26275 var bh8 = b8 >>> 13;
26276 var b9 = b[9] | 0;
26277 var bl9 = b9 & 0x1fff;
26278 var bh9 = b9 >>> 13;
26279
26280 out.negative = self.negative ^ num.negative;
26281 out.length = 19;
26282 /* k = 0 */
26283 lo = Math.imul(al0, bl0);
26284 mid = Math.imul(al0, bh0);
26285 mid = (mid + Math.imul(ah0, bl0)) | 0;
26286 hi = Math.imul(ah0, bh0);
26287 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26288 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
26289 w0 &= 0x3ffffff;
26290 /* k = 1 */
26291 lo = Math.imul(al1, bl0);
26292 mid = Math.imul(al1, bh0);
26293 mid = (mid + Math.imul(ah1, bl0)) | 0;
26294 hi = Math.imul(ah1, bh0);
26295 lo = (lo + Math.imul(al0, bl1)) | 0;
26296 mid = (mid + Math.imul(al0, bh1)) | 0;
26297 mid = (mid + Math.imul(ah0, bl1)) | 0;
26298 hi = (hi + Math.imul(ah0, bh1)) | 0;
26299 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26300 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
26301 w1 &= 0x3ffffff;
26302 /* k = 2 */
26303 lo = Math.imul(al2, bl0);
26304 mid = Math.imul(al2, bh0);
26305 mid = (mid + Math.imul(ah2, bl0)) | 0;
26306 hi = Math.imul(ah2, bh0);
26307 lo = (lo + Math.imul(al1, bl1)) | 0;
26308 mid = (mid + Math.imul(al1, bh1)) | 0;
26309 mid = (mid + Math.imul(ah1, bl1)) | 0;
26310 hi = (hi + Math.imul(ah1, bh1)) | 0;
26311 lo = (lo + Math.imul(al0, bl2)) | 0;
26312 mid = (mid + Math.imul(al0, bh2)) | 0;
26313 mid = (mid + Math.imul(ah0, bl2)) | 0;
26314 hi = (hi + Math.imul(ah0, bh2)) | 0;
26315 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26316 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
26317 w2 &= 0x3ffffff;
26318 /* k = 3 */
26319 lo = Math.imul(al3, bl0);
26320 mid = Math.imul(al3, bh0);
26321 mid = (mid + Math.imul(ah3, bl0)) | 0;
26322 hi = Math.imul(ah3, bh0);
26323 lo = (lo + Math.imul(al2, bl1)) | 0;
26324 mid = (mid + Math.imul(al2, bh1)) | 0;
26325 mid = (mid + Math.imul(ah2, bl1)) | 0;
26326 hi = (hi + Math.imul(ah2, bh1)) | 0;
26327 lo = (lo + Math.imul(al1, bl2)) | 0;
26328 mid = (mid + Math.imul(al1, bh2)) | 0;
26329 mid = (mid + Math.imul(ah1, bl2)) | 0;
26330 hi = (hi + Math.imul(ah1, bh2)) | 0;
26331 lo = (lo + Math.imul(al0, bl3)) | 0;
26332 mid = (mid + Math.imul(al0, bh3)) | 0;
26333 mid = (mid + Math.imul(ah0, bl3)) | 0;
26334 hi = (hi + Math.imul(ah0, bh3)) | 0;
26335 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26336 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
26337 w3 &= 0x3ffffff;
26338 /* k = 4 */
26339 lo = Math.imul(al4, bl0);
26340 mid = Math.imul(al4, bh0);
26341 mid = (mid + Math.imul(ah4, bl0)) | 0;
26342 hi = Math.imul(ah4, bh0);
26343 lo = (lo + Math.imul(al3, bl1)) | 0;
26344 mid = (mid + Math.imul(al3, bh1)) | 0;
26345 mid = (mid + Math.imul(ah3, bl1)) | 0;
26346 hi = (hi + Math.imul(ah3, bh1)) | 0;
26347 lo = (lo + Math.imul(al2, bl2)) | 0;
26348 mid = (mid + Math.imul(al2, bh2)) | 0;
26349 mid = (mid + Math.imul(ah2, bl2)) | 0;
26350 hi = (hi + Math.imul(ah2, bh2)) | 0;
26351 lo = (lo + Math.imul(al1, bl3)) | 0;
26352 mid = (mid + Math.imul(al1, bh3)) | 0;
26353 mid = (mid + Math.imul(ah1, bl3)) | 0;
26354 hi = (hi + Math.imul(ah1, bh3)) | 0;
26355 lo = (lo + Math.imul(al0, bl4)) | 0;
26356 mid = (mid + Math.imul(al0, bh4)) | 0;
26357 mid = (mid + Math.imul(ah0, bl4)) | 0;
26358 hi = (hi + Math.imul(ah0, bh4)) | 0;
26359 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26360 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
26361 w4 &= 0x3ffffff;
26362 /* k = 5 */
26363 lo = Math.imul(al5, bl0);
26364 mid = Math.imul(al5, bh0);
26365 mid = (mid + Math.imul(ah5, bl0)) | 0;
26366 hi = Math.imul(ah5, bh0);
26367 lo = (lo + Math.imul(al4, bl1)) | 0;
26368 mid = (mid + Math.imul(al4, bh1)) | 0;
26369 mid = (mid + Math.imul(ah4, bl1)) | 0;
26370 hi = (hi + Math.imul(ah4, bh1)) | 0;
26371 lo = (lo + Math.imul(al3, bl2)) | 0;
26372 mid = (mid + Math.imul(al3, bh2)) | 0;
26373 mid = (mid + Math.imul(ah3, bl2)) | 0;
26374 hi = (hi + Math.imul(ah3, bh2)) | 0;
26375 lo = (lo + Math.imul(al2, bl3)) | 0;
26376 mid = (mid + Math.imul(al2, bh3)) | 0;
26377 mid = (mid + Math.imul(ah2, bl3)) | 0;
26378 hi = (hi + Math.imul(ah2, bh3)) | 0;
26379 lo = (lo + Math.imul(al1, bl4)) | 0;
26380 mid = (mid + Math.imul(al1, bh4)) | 0;
26381 mid = (mid + Math.imul(ah1, bl4)) | 0;
26382 hi = (hi + Math.imul(ah1, bh4)) | 0;
26383 lo = (lo + Math.imul(al0, bl5)) | 0;
26384 mid = (mid + Math.imul(al0, bh5)) | 0;
26385 mid = (mid + Math.imul(ah0, bl5)) | 0;
26386 hi = (hi + Math.imul(ah0, bh5)) | 0;
26387 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26388 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
26389 w5 &= 0x3ffffff;
26390 /* k = 6 */
26391 lo = Math.imul(al6, bl0);
26392 mid = Math.imul(al6, bh0);
26393 mid = (mid + Math.imul(ah6, bl0)) | 0;
26394 hi = Math.imul(ah6, bh0);
26395 lo = (lo + Math.imul(al5, bl1)) | 0;
26396 mid = (mid + Math.imul(al5, bh1)) | 0;
26397 mid = (mid + Math.imul(ah5, bl1)) | 0;
26398 hi = (hi + Math.imul(ah5, bh1)) | 0;
26399 lo = (lo + Math.imul(al4, bl2)) | 0;
26400 mid = (mid + Math.imul(al4, bh2)) | 0;
26401 mid = (mid + Math.imul(ah4, bl2)) | 0;
26402 hi = (hi + Math.imul(ah4, bh2)) | 0;
26403 lo = (lo + Math.imul(al3, bl3)) | 0;
26404 mid = (mid + Math.imul(al3, bh3)) | 0;
26405 mid = (mid + Math.imul(ah3, bl3)) | 0;
26406 hi = (hi + Math.imul(ah3, bh3)) | 0;
26407 lo = (lo + Math.imul(al2, bl4)) | 0;
26408 mid = (mid + Math.imul(al2, bh4)) | 0;
26409 mid = (mid + Math.imul(ah2, bl4)) | 0;
26410 hi = (hi + Math.imul(ah2, bh4)) | 0;
26411 lo = (lo + Math.imul(al1, bl5)) | 0;
26412 mid = (mid + Math.imul(al1, bh5)) | 0;
26413 mid = (mid + Math.imul(ah1, bl5)) | 0;
26414 hi = (hi + Math.imul(ah1, bh5)) | 0;
26415 lo = (lo + Math.imul(al0, bl6)) | 0;
26416 mid = (mid + Math.imul(al0, bh6)) | 0;
26417 mid = (mid + Math.imul(ah0, bl6)) | 0;
26418 hi = (hi + Math.imul(ah0, bh6)) | 0;
26419 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26420 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
26421 w6 &= 0x3ffffff;
26422 /* k = 7 */
26423 lo = Math.imul(al7, bl0);
26424 mid = Math.imul(al7, bh0);
26425 mid = (mid + Math.imul(ah7, bl0)) | 0;
26426 hi = Math.imul(ah7, bh0);
26427 lo = (lo + Math.imul(al6, bl1)) | 0;
26428 mid = (mid + Math.imul(al6, bh1)) | 0;
26429 mid = (mid + Math.imul(ah6, bl1)) | 0;
26430 hi = (hi + Math.imul(ah6, bh1)) | 0;
26431 lo = (lo + Math.imul(al5, bl2)) | 0;
26432 mid = (mid + Math.imul(al5, bh2)) | 0;
26433 mid = (mid + Math.imul(ah5, bl2)) | 0;
26434 hi = (hi + Math.imul(ah5, bh2)) | 0;
26435 lo = (lo + Math.imul(al4, bl3)) | 0;
26436 mid = (mid + Math.imul(al4, bh3)) | 0;
26437 mid = (mid + Math.imul(ah4, bl3)) | 0;
26438 hi = (hi + Math.imul(ah4, bh3)) | 0;
26439 lo = (lo + Math.imul(al3, bl4)) | 0;
26440 mid = (mid + Math.imul(al3, bh4)) | 0;
26441 mid = (mid + Math.imul(ah3, bl4)) | 0;
26442 hi = (hi + Math.imul(ah3, bh4)) | 0;
26443 lo = (lo + Math.imul(al2, bl5)) | 0;
26444 mid = (mid + Math.imul(al2, bh5)) | 0;
26445 mid = (mid + Math.imul(ah2, bl5)) | 0;
26446 hi = (hi + Math.imul(ah2, bh5)) | 0;
26447 lo = (lo + Math.imul(al1, bl6)) | 0;
26448 mid = (mid + Math.imul(al1, bh6)) | 0;
26449 mid = (mid + Math.imul(ah1, bl6)) | 0;
26450 hi = (hi + Math.imul(ah1, bh6)) | 0;
26451 lo = (lo + Math.imul(al0, bl7)) | 0;
26452 mid = (mid + Math.imul(al0, bh7)) | 0;
26453 mid = (mid + Math.imul(ah0, bl7)) | 0;
26454 hi = (hi + Math.imul(ah0, bh7)) | 0;
26455 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26456 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
26457 w7 &= 0x3ffffff;
26458 /* k = 8 */
26459 lo = Math.imul(al8, bl0);
26460 mid = Math.imul(al8, bh0);
26461 mid = (mid + Math.imul(ah8, bl0)) | 0;
26462 hi = Math.imul(ah8, bh0);
26463 lo = (lo + Math.imul(al7, bl1)) | 0;
26464 mid = (mid + Math.imul(al7, bh1)) | 0;
26465 mid = (mid + Math.imul(ah7, bl1)) | 0;
26466 hi = (hi + Math.imul(ah7, bh1)) | 0;
26467 lo = (lo + Math.imul(al6, bl2)) | 0;
26468 mid = (mid + Math.imul(al6, bh2)) | 0;
26469 mid = (mid + Math.imul(ah6, bl2)) | 0;
26470 hi = (hi + Math.imul(ah6, bh2)) | 0;
26471 lo = (lo + Math.imul(al5, bl3)) | 0;
26472 mid = (mid + Math.imul(al5, bh3)) | 0;
26473 mid = (mid + Math.imul(ah5, bl3)) | 0;
26474 hi = (hi + Math.imul(ah5, bh3)) | 0;
26475 lo = (lo + Math.imul(al4, bl4)) | 0;
26476 mid = (mid + Math.imul(al4, bh4)) | 0;
26477 mid = (mid + Math.imul(ah4, bl4)) | 0;
26478 hi = (hi + Math.imul(ah4, bh4)) | 0;
26479 lo = (lo + Math.imul(al3, bl5)) | 0;
26480 mid = (mid + Math.imul(al3, bh5)) | 0;
26481 mid = (mid + Math.imul(ah3, bl5)) | 0;
26482 hi = (hi + Math.imul(ah3, bh5)) | 0;
26483 lo = (lo + Math.imul(al2, bl6)) | 0;
26484 mid = (mid + Math.imul(al2, bh6)) | 0;
26485 mid = (mid + Math.imul(ah2, bl6)) | 0;
26486 hi = (hi + Math.imul(ah2, bh6)) | 0;
26487 lo = (lo + Math.imul(al1, bl7)) | 0;
26488 mid = (mid + Math.imul(al1, bh7)) | 0;
26489 mid = (mid + Math.imul(ah1, bl7)) | 0;
26490 hi = (hi + Math.imul(ah1, bh7)) | 0;
26491 lo = (lo + Math.imul(al0, bl8)) | 0;
26492 mid = (mid + Math.imul(al0, bh8)) | 0;
26493 mid = (mid + Math.imul(ah0, bl8)) | 0;
26494 hi = (hi + Math.imul(ah0, bh8)) | 0;
26495 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26496 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
26497 w8 &= 0x3ffffff;
26498 /* k = 9 */
26499 lo = Math.imul(al9, bl0);
26500 mid = Math.imul(al9, bh0);
26501 mid = (mid + Math.imul(ah9, bl0)) | 0;
26502 hi = Math.imul(ah9, bh0);
26503 lo = (lo + Math.imul(al8, bl1)) | 0;
26504 mid = (mid + Math.imul(al8, bh1)) | 0;
26505 mid = (mid + Math.imul(ah8, bl1)) | 0;
26506 hi = (hi + Math.imul(ah8, bh1)) | 0;
26507 lo = (lo + Math.imul(al7, bl2)) | 0;
26508 mid = (mid + Math.imul(al7, bh2)) | 0;
26509 mid = (mid + Math.imul(ah7, bl2)) | 0;
26510 hi = (hi + Math.imul(ah7, bh2)) | 0;
26511 lo = (lo + Math.imul(al6, bl3)) | 0;
26512 mid = (mid + Math.imul(al6, bh3)) | 0;
26513 mid = (mid + Math.imul(ah6, bl3)) | 0;
26514 hi = (hi + Math.imul(ah6, bh3)) | 0;
26515 lo = (lo + Math.imul(al5, bl4)) | 0;
26516 mid = (mid + Math.imul(al5, bh4)) | 0;
26517 mid = (mid + Math.imul(ah5, bl4)) | 0;
26518 hi = (hi + Math.imul(ah5, bh4)) | 0;
26519 lo = (lo + Math.imul(al4, bl5)) | 0;
26520 mid = (mid + Math.imul(al4, bh5)) | 0;
26521 mid = (mid + Math.imul(ah4, bl5)) | 0;
26522 hi = (hi + Math.imul(ah4, bh5)) | 0;
26523 lo = (lo + Math.imul(al3, bl6)) | 0;
26524 mid = (mid + Math.imul(al3, bh6)) | 0;
26525 mid = (mid + Math.imul(ah3, bl6)) | 0;
26526 hi = (hi + Math.imul(ah3, bh6)) | 0;
26527 lo = (lo + Math.imul(al2, bl7)) | 0;
26528 mid = (mid + Math.imul(al2, bh7)) | 0;
26529 mid = (mid + Math.imul(ah2, bl7)) | 0;
26530 hi = (hi + Math.imul(ah2, bh7)) | 0;
26531 lo = (lo + Math.imul(al1, bl8)) | 0;
26532 mid = (mid + Math.imul(al1, bh8)) | 0;
26533 mid = (mid + Math.imul(ah1, bl8)) | 0;
26534 hi = (hi + Math.imul(ah1, bh8)) | 0;
26535 lo = (lo + Math.imul(al0, bl9)) | 0;
26536 mid = (mid + Math.imul(al0, bh9)) | 0;
26537 mid = (mid + Math.imul(ah0, bl9)) | 0;
26538 hi = (hi + Math.imul(ah0, bh9)) | 0;
26539 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26540 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
26541 w9 &= 0x3ffffff;
26542 /* k = 10 */
26543 lo = Math.imul(al9, bl1);
26544 mid = Math.imul(al9, bh1);
26545 mid = (mid + Math.imul(ah9, bl1)) | 0;
26546 hi = Math.imul(ah9, bh1);
26547 lo = (lo + Math.imul(al8, bl2)) | 0;
26548 mid = (mid + Math.imul(al8, bh2)) | 0;
26549 mid = (mid + Math.imul(ah8, bl2)) | 0;
26550 hi = (hi + Math.imul(ah8, bh2)) | 0;
26551 lo = (lo + Math.imul(al7, bl3)) | 0;
26552 mid = (mid + Math.imul(al7, bh3)) | 0;
26553 mid = (mid + Math.imul(ah7, bl3)) | 0;
26554 hi = (hi + Math.imul(ah7, bh3)) | 0;
26555 lo = (lo + Math.imul(al6, bl4)) | 0;
26556 mid = (mid + Math.imul(al6, bh4)) | 0;
26557 mid = (mid + Math.imul(ah6, bl4)) | 0;
26558 hi = (hi + Math.imul(ah6, bh4)) | 0;
26559 lo = (lo + Math.imul(al5, bl5)) | 0;
26560 mid = (mid + Math.imul(al5, bh5)) | 0;
26561 mid = (mid + Math.imul(ah5, bl5)) | 0;
26562 hi = (hi + Math.imul(ah5, bh5)) | 0;
26563 lo = (lo + Math.imul(al4, bl6)) | 0;
26564 mid = (mid + Math.imul(al4, bh6)) | 0;
26565 mid = (mid + Math.imul(ah4, bl6)) | 0;
26566 hi = (hi + Math.imul(ah4, bh6)) | 0;
26567 lo = (lo + Math.imul(al3, bl7)) | 0;
26568 mid = (mid + Math.imul(al3, bh7)) | 0;
26569 mid = (mid + Math.imul(ah3, bl7)) | 0;
26570 hi = (hi + Math.imul(ah3, bh7)) | 0;
26571 lo = (lo + Math.imul(al2, bl8)) | 0;
26572 mid = (mid + Math.imul(al2, bh8)) | 0;
26573 mid = (mid + Math.imul(ah2, bl8)) | 0;
26574 hi = (hi + Math.imul(ah2, bh8)) | 0;
26575 lo = (lo + Math.imul(al1, bl9)) | 0;
26576 mid = (mid + Math.imul(al1, bh9)) | 0;
26577 mid = (mid + Math.imul(ah1, bl9)) | 0;
26578 hi = (hi + Math.imul(ah1, bh9)) | 0;
26579 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26580 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
26581 w10 &= 0x3ffffff;
26582 /* k = 11 */
26583 lo = Math.imul(al9, bl2);
26584 mid = Math.imul(al9, bh2);
26585 mid = (mid + Math.imul(ah9, bl2)) | 0;
26586 hi = Math.imul(ah9, bh2);
26587 lo = (lo + Math.imul(al8, bl3)) | 0;
26588 mid = (mid + Math.imul(al8, bh3)) | 0;
26589 mid = (mid + Math.imul(ah8, bl3)) | 0;
26590 hi = (hi + Math.imul(ah8, bh3)) | 0;
26591 lo = (lo + Math.imul(al7, bl4)) | 0;
26592 mid = (mid + Math.imul(al7, bh4)) | 0;
26593 mid = (mid + Math.imul(ah7, bl4)) | 0;
26594 hi = (hi + Math.imul(ah7, bh4)) | 0;
26595 lo = (lo + Math.imul(al6, bl5)) | 0;
26596 mid = (mid + Math.imul(al6, bh5)) | 0;
26597 mid = (mid + Math.imul(ah6, bl5)) | 0;
26598 hi = (hi + Math.imul(ah6, bh5)) | 0;
26599 lo = (lo + Math.imul(al5, bl6)) | 0;
26600 mid = (mid + Math.imul(al5, bh6)) | 0;
26601 mid = (mid + Math.imul(ah5, bl6)) | 0;
26602 hi = (hi + Math.imul(ah5, bh6)) | 0;
26603 lo = (lo + Math.imul(al4, bl7)) | 0;
26604 mid = (mid + Math.imul(al4, bh7)) | 0;
26605 mid = (mid + Math.imul(ah4, bl7)) | 0;
26606 hi = (hi + Math.imul(ah4, bh7)) | 0;
26607 lo = (lo + Math.imul(al3, bl8)) | 0;
26608 mid = (mid + Math.imul(al3, bh8)) | 0;
26609 mid = (mid + Math.imul(ah3, bl8)) | 0;
26610 hi = (hi + Math.imul(ah3, bh8)) | 0;
26611 lo = (lo + Math.imul(al2, bl9)) | 0;
26612 mid = (mid + Math.imul(al2, bh9)) | 0;
26613 mid = (mid + Math.imul(ah2, bl9)) | 0;
26614 hi = (hi + Math.imul(ah2, bh9)) | 0;
26615 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26616 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
26617 w11 &= 0x3ffffff;
26618 /* k = 12 */
26619 lo = Math.imul(al9, bl3);
26620 mid = Math.imul(al9, bh3);
26621 mid = (mid + Math.imul(ah9, bl3)) | 0;
26622 hi = Math.imul(ah9, bh3);
26623 lo = (lo + Math.imul(al8, bl4)) | 0;
26624 mid = (mid + Math.imul(al8, bh4)) | 0;
26625 mid = (mid + Math.imul(ah8, bl4)) | 0;
26626 hi = (hi + Math.imul(ah8, bh4)) | 0;
26627 lo = (lo + Math.imul(al7, bl5)) | 0;
26628 mid = (mid + Math.imul(al7, bh5)) | 0;
26629 mid = (mid + Math.imul(ah7, bl5)) | 0;
26630 hi = (hi + Math.imul(ah7, bh5)) | 0;
26631 lo = (lo + Math.imul(al6, bl6)) | 0;
26632 mid = (mid + Math.imul(al6, bh6)) | 0;
26633 mid = (mid + Math.imul(ah6, bl6)) | 0;
26634 hi = (hi + Math.imul(ah6, bh6)) | 0;
26635 lo = (lo + Math.imul(al5, bl7)) | 0;
26636 mid = (mid + Math.imul(al5, bh7)) | 0;
26637 mid = (mid + Math.imul(ah5, bl7)) | 0;
26638 hi = (hi + Math.imul(ah5, bh7)) | 0;
26639 lo = (lo + Math.imul(al4, bl8)) | 0;
26640 mid = (mid + Math.imul(al4, bh8)) | 0;
26641 mid = (mid + Math.imul(ah4, bl8)) | 0;
26642 hi = (hi + Math.imul(ah4, bh8)) | 0;
26643 lo = (lo + Math.imul(al3, bl9)) | 0;
26644 mid = (mid + Math.imul(al3, bh9)) | 0;
26645 mid = (mid + Math.imul(ah3, bl9)) | 0;
26646 hi = (hi + Math.imul(ah3, bh9)) | 0;
26647 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26648 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
26649 w12 &= 0x3ffffff;
26650 /* k = 13 */
26651 lo = Math.imul(al9, bl4);
26652 mid = Math.imul(al9, bh4);
26653 mid = (mid + Math.imul(ah9, bl4)) | 0;
26654 hi = Math.imul(ah9, bh4);
26655 lo = (lo + Math.imul(al8, bl5)) | 0;
26656 mid = (mid + Math.imul(al8, bh5)) | 0;
26657 mid = (mid + Math.imul(ah8, bl5)) | 0;
26658 hi = (hi + Math.imul(ah8, bh5)) | 0;
26659 lo = (lo + Math.imul(al7, bl6)) | 0;
26660 mid = (mid + Math.imul(al7, bh6)) | 0;
26661 mid = (mid + Math.imul(ah7, bl6)) | 0;
26662 hi = (hi + Math.imul(ah7, bh6)) | 0;
26663 lo = (lo + Math.imul(al6, bl7)) | 0;
26664 mid = (mid + Math.imul(al6, bh7)) | 0;
26665 mid = (mid + Math.imul(ah6, bl7)) | 0;
26666 hi = (hi + Math.imul(ah6, bh7)) | 0;
26667 lo = (lo + Math.imul(al5, bl8)) | 0;
26668 mid = (mid + Math.imul(al5, bh8)) | 0;
26669 mid = (mid + Math.imul(ah5, bl8)) | 0;
26670 hi = (hi + Math.imul(ah5, bh8)) | 0;
26671 lo = (lo + Math.imul(al4, bl9)) | 0;
26672 mid = (mid + Math.imul(al4, bh9)) | 0;
26673 mid = (mid + Math.imul(ah4, bl9)) | 0;
26674 hi = (hi + Math.imul(ah4, bh9)) | 0;
26675 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26676 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
26677 w13 &= 0x3ffffff;
26678 /* k = 14 */
26679 lo = Math.imul(al9, bl5);
26680 mid = Math.imul(al9, bh5);
26681 mid = (mid + Math.imul(ah9, bl5)) | 0;
26682 hi = Math.imul(ah9, bh5);
26683 lo = (lo + Math.imul(al8, bl6)) | 0;
26684 mid = (mid + Math.imul(al8, bh6)) | 0;
26685 mid = (mid + Math.imul(ah8, bl6)) | 0;
26686 hi = (hi + Math.imul(ah8, bh6)) | 0;
26687 lo = (lo + Math.imul(al7, bl7)) | 0;
26688 mid = (mid + Math.imul(al7, bh7)) | 0;
26689 mid = (mid + Math.imul(ah7, bl7)) | 0;
26690 hi = (hi + Math.imul(ah7, bh7)) | 0;
26691 lo = (lo + Math.imul(al6, bl8)) | 0;
26692 mid = (mid + Math.imul(al6, bh8)) | 0;
26693 mid = (mid + Math.imul(ah6, bl8)) | 0;
26694 hi = (hi + Math.imul(ah6, bh8)) | 0;
26695 lo = (lo + Math.imul(al5, bl9)) | 0;
26696 mid = (mid + Math.imul(al5, bh9)) | 0;
26697 mid = (mid + Math.imul(ah5, bl9)) | 0;
26698 hi = (hi + Math.imul(ah5, bh9)) | 0;
26699 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26700 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
26701 w14 &= 0x3ffffff;
26702 /* k = 15 */
26703 lo = Math.imul(al9, bl6);
26704 mid = Math.imul(al9, bh6);
26705 mid = (mid + Math.imul(ah9, bl6)) | 0;
26706 hi = Math.imul(ah9, bh6);
26707 lo = (lo + Math.imul(al8, bl7)) | 0;
26708 mid = (mid + Math.imul(al8, bh7)) | 0;
26709 mid = (mid + Math.imul(ah8, bl7)) | 0;
26710 hi = (hi + Math.imul(ah8, bh7)) | 0;
26711 lo = (lo + Math.imul(al7, bl8)) | 0;
26712 mid = (mid + Math.imul(al7, bh8)) | 0;
26713 mid = (mid + Math.imul(ah7, bl8)) | 0;
26714 hi = (hi + Math.imul(ah7, bh8)) | 0;
26715 lo = (lo + Math.imul(al6, bl9)) | 0;
26716 mid = (mid + Math.imul(al6, bh9)) | 0;
26717 mid = (mid + Math.imul(ah6, bl9)) | 0;
26718 hi = (hi + Math.imul(ah6, bh9)) | 0;
26719 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26720 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
26721 w15 &= 0x3ffffff;
26722 /* k = 16 */
26723 lo = Math.imul(al9, bl7);
26724 mid = Math.imul(al9, bh7);
26725 mid = (mid + Math.imul(ah9, bl7)) | 0;
26726 hi = Math.imul(ah9, bh7);
26727 lo = (lo + Math.imul(al8, bl8)) | 0;
26728 mid = (mid + Math.imul(al8, bh8)) | 0;
26729 mid = (mid + Math.imul(ah8, bl8)) | 0;
26730 hi = (hi + Math.imul(ah8, bh8)) | 0;
26731 lo = (lo + Math.imul(al7, bl9)) | 0;
26732 mid = (mid + Math.imul(al7, bh9)) | 0;
26733 mid = (mid + Math.imul(ah7, bl9)) | 0;
26734 hi = (hi + Math.imul(ah7, bh9)) | 0;
26735 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26736 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
26737 w16 &= 0x3ffffff;
26738 /* k = 17 */
26739 lo = Math.imul(al9, bl8);
26740 mid = Math.imul(al9, bh8);
26741 mid = (mid + Math.imul(ah9, bl8)) | 0;
26742 hi = Math.imul(ah9, bh8);
26743 lo = (lo + Math.imul(al8, bl9)) | 0;
26744 mid = (mid + Math.imul(al8, bh9)) | 0;
26745 mid = (mid + Math.imul(ah8, bl9)) | 0;
26746 hi = (hi + Math.imul(ah8, bh9)) | 0;
26747 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26748 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
26749 w17 &= 0x3ffffff;
26750 /* k = 18 */
26751 lo = Math.imul(al9, bl9);
26752 mid = Math.imul(al9, bh9);
26753 mid = (mid + Math.imul(ah9, bl9)) | 0;
26754 hi = Math.imul(ah9, bh9);
26755 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26756 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
26757 w18 &= 0x3ffffff;
26758 o[0] = w0;
26759 o[1] = w1;
26760 o[2] = w2;
26761 o[3] = w3;
26762 o[4] = w4;
26763 o[5] = w5;
26764 o[6] = w6;
26765 o[7] = w7;
26766 o[8] = w8;
26767 o[9] = w9;
26768 o[10] = w10;
26769 o[11] = w11;
26770 o[12] = w12;
26771 o[13] = w13;
26772 o[14] = w14;
26773 o[15] = w15;
26774 o[16] = w16;
26775 o[17] = w17;
26776 o[18] = w18;
26777 if (c !== 0) {
26778 o[19] = c;
26779 out.length++;
26780 }
26781 return out;
26782 };
26783
26784 // Polyfill comb
26785 if (!Math.imul) {
26786 comb10MulTo = smallMulTo;
26787 }
26788
26789 function bigMulTo (self, num, out) {
26790 out.negative = num.negative ^ self.negative;
26791 out.length = self.length + num.length;
26792
26793 var carry = 0;
26794 var hncarry = 0;
26795 for (var k = 0; k < out.length - 1; k++) {
26796 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26797 // note that ncarry could be >= 0x3ffffff
26798 var ncarry = hncarry;
26799 hncarry = 0;
26800 var rword = carry & 0x3ffffff;
26801 var maxJ = Math.min(k, num.length - 1);
26802 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26803 var i = k - j;
26804 var a = self.words[i] | 0;
26805 var b = num.words[j] | 0;
26806 var r = a * b;
26807
26808 var lo = r & 0x3ffffff;
26809 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
26810 lo = (lo + rword) | 0;
26811 rword = lo & 0x3ffffff;
26812 ncarry = (ncarry + (lo >>> 26)) | 0;
26813
26814 hncarry += ncarry >>> 26;
26815 ncarry &= 0x3ffffff;
26816 }
26817 out.words[k] = rword;
26818 carry = ncarry;
26819 ncarry = hncarry;
26820 }
26821 if (carry !== 0) {
26822 out.words[k] = carry;
26823 } else {
26824 out.length--;
26825 }
26826
26827 return out.strip();
26828 }
26829
26830 function jumboMulTo (self, num, out) {
26831 var fftm = new FFTM();
26832 return fftm.mulp(self, num, out);
26833 }
26834
26835 BN.prototype.mulTo = function mulTo (num, out) {
26836 var res;
26837 var len = this.length + num.length;
26838 if (this.length === 10 && num.length === 10) {
26839 res = comb10MulTo(this, num, out);
26840 } else if (len < 63) {
26841 res = smallMulTo(this, num, out);
26842 } else if (len < 1024) {
26843 res = bigMulTo(this, num, out);
26844 } else {
26845 res = jumboMulTo(this, num, out);
26846 }
26847
26848 return res;
26849 };
26850
26851 // Cooley-Tukey algorithm for FFT
26852 // slightly revisited to rely on looping instead of recursion
26853
26854 function FFTM (x, y) {
26855 this.x = x;
26856 this.y = y;
26857 }
26858
26859 FFTM.prototype.makeRBT = function makeRBT (N) {
26860 var t = new Array(N);
26861 var l = BN.prototype._countBits(N) - 1;
26862 for (var i = 0; i < N; i++) {
26863 t[i] = this.revBin(i, l, N);
26864 }
26865
26866 return t;
26867 };
26868
26869 // Returns binary-reversed representation of `x`
26870 FFTM.prototype.revBin = function revBin (x, l, N) {
26871 if (x === 0 || x === N - 1) return x;
26872
26873 var rb = 0;
26874 for (var i = 0; i < l; i++) {
26875 rb |= (x & 1) << (l - i - 1);
26876 x >>= 1;
26877 }
26878
26879 return rb;
26880 };
26881
26882 // Performs "tweedling" phase, therefore 'emulating'
26883 // behaviour of the recursive algorithm
26884 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
26885 for (var i = 0; i < N; i++) {
26886 rtws[i] = rws[rbt[i]];
26887 itws[i] = iws[rbt[i]];
26888 }
26889 };
26890
26891 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
26892 this.permute(rbt, rws, iws, rtws, itws, N);
26893
26894 for (var s = 1; s < N; s <<= 1) {
26895 var l = s << 1;
26896
26897 var rtwdf = Math.cos(2 * Math.PI / l);
26898 var itwdf = Math.sin(2 * Math.PI / l);
26899
26900 for (var p = 0; p < N; p += l) {
26901 var rtwdf_ = rtwdf;
26902 var itwdf_ = itwdf;
26903
26904 for (var j = 0; j < s; j++) {
26905 var re = rtws[p + j];
26906 var ie = itws[p + j];
26907
26908 var ro = rtws[p + j + s];
26909 var io = itws[p + j + s];
26910
26911 var rx = rtwdf_ * ro - itwdf_ * io;
26912
26913 io = rtwdf_ * io + itwdf_ * ro;
26914 ro = rx;
26915
26916 rtws[p + j] = re + ro;
26917 itws[p + j] = ie + io;
26918
26919 rtws[p + j + s] = re - ro;
26920 itws[p + j + s] = ie - io;
26921
26922 /* jshint maxdepth : false */
26923 if (j !== l) {
26924 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
26925
26926 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
26927 rtwdf_ = rx;
26928 }
26929 }
26930 }
26931 }
26932 };
26933
26934 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
26935 var N = Math.max(m, n) | 1;
26936 var odd = N & 1;
26937 var i = 0;
26938 for (N = N / 2 | 0; N; N = N >>> 1) {
26939 i++;
26940 }
26941
26942 return 1 << i + 1 + odd;
26943 };
26944
26945 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
26946 if (N <= 1) return;
26947
26948 for (var i = 0; i < N / 2; i++) {
26949 var t = rws[i];
26950
26951 rws[i] = rws[N - i - 1];
26952 rws[N - i - 1] = t;
26953
26954 t = iws[i];
26955
26956 iws[i] = -iws[N - i - 1];
26957 iws[N - i - 1] = -t;
26958 }
26959 };
26960
26961 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
26962 var carry = 0;
26963 for (var i = 0; i < N / 2; i++) {
26964 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
26965 Math.round(ws[2 * i] / N) +
26966 carry;
26967
26968 ws[i] = w & 0x3ffffff;
26969
26970 if (w < 0x4000000) {
26971 carry = 0;
26972 } else {
26973 carry = w / 0x4000000 | 0;
26974 }
26975 }
26976
26977 return ws;
26978 };
26979
26980 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
26981 var carry = 0;
26982 for (var i = 0; i < len; i++) {
26983 carry = carry + (ws[i] | 0);
26984
26985 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
26986 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
26987 }
26988
26989 // Pad with zeroes
26990 for (i = 2 * len; i < N; ++i) {
26991 rws[i] = 0;
26992 }
26993
26994 assert(carry === 0);
26995 assert((carry & ~0x1fff) === 0);
26996 };
26997
26998 FFTM.prototype.stub = function stub (N) {
26999 var ph = new Array(N);
27000 for (var i = 0; i < N; i++) {
27001 ph[i] = 0;
27002 }
27003
27004 return ph;
27005 };
27006
27007 FFTM.prototype.mulp = function mulp (x, y, out) {
27008 var N = 2 * this.guessLen13b(x.length, y.length);
27009
27010 var rbt = this.makeRBT(N);
27011
27012 var _ = this.stub(N);
27013
27014 var rws = new Array(N);
27015 var rwst = new Array(N);
27016 var iwst = new Array(N);
27017
27018 var nrws = new Array(N);
27019 var nrwst = new Array(N);
27020 var niwst = new Array(N);
27021
27022 var rmws = out.words;
27023 rmws.length = N;
27024
27025 this.convert13b(x.words, x.length, rws, N);
27026 this.convert13b(y.words, y.length, nrws, N);
27027
27028 this.transform(rws, _, rwst, iwst, N, rbt);
27029 this.transform(nrws, _, nrwst, niwst, N, rbt);
27030
27031 for (var i = 0; i < N; i++) {
27032 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
27033 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
27034 rwst[i] = rx;
27035 }
27036
27037 this.conjugate(rwst, iwst, N);
27038 this.transform(rwst, iwst, rmws, _, N, rbt);
27039 this.conjugate(rmws, _, N);
27040 this.normalize13b(rmws, N);
27041
27042 out.negative = x.negative ^ y.negative;
27043 out.length = x.length + y.length;
27044 return out.strip();
27045 };
27046
27047 // Multiply `this` by `num`
27048 BN.prototype.mul = function mul (num) {
27049 var out = new BN(null);
27050 out.words = new Array(this.length + num.length);
27051 return this.mulTo(num, out);
27052 };
27053
27054 // Multiply employing FFT
27055 BN.prototype.mulf = function mulf (num) {
27056 var out = new BN(null);
27057 out.words = new Array(this.length + num.length);
27058 return jumboMulTo(this, num, out);
27059 };
27060
27061 // In-place Multiplication
27062 BN.prototype.imul = function imul (num) {
27063 return this.clone().mulTo(num, this);
27064 };
27065
27066 BN.prototype.imuln = function imuln (num) {
27067 assert(typeof num === 'number');
27068 assert(num < 0x4000000);
27069
27070 // Carry
27071 var carry = 0;
27072 for (var i = 0; i < this.length; i++) {
27073 var w = (this.words[i] | 0) * num;
27074 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
27075 carry >>= 26;
27076 carry += (w / 0x4000000) | 0;
27077 // NOTE: lo is 27bit maximum
27078 carry += lo >>> 26;
27079 this.words[i] = lo & 0x3ffffff;
27080 }
27081
27082 if (carry !== 0) {
27083 this.words[i] = carry;
27084 this.length++;
27085 }
27086
27087 return this;
27088 };
27089
27090 BN.prototype.muln = function muln (num) {
27091 return this.clone().imuln(num);
27092 };
27093
27094 // `this` * `this`
27095 BN.prototype.sqr = function sqr () {
27096 return this.mul(this);
27097 };
27098
27099 // `this` * `this` in-place
27100 BN.prototype.isqr = function isqr () {
27101 return this.imul(this.clone());
27102 };
27103
27104 // Math.pow(`this`, `num`)
27105 BN.prototype.pow = function pow (num) {
27106 var w = toBitArray(num);
27107 if (w.length === 0) return new BN(1);
27108
27109 // Skip leading zeroes
27110 var res = this;
27111 for (var i = 0; i < w.length; i++, res = res.sqr()) {
27112 if (w[i] !== 0) break;
27113 }
27114
27115 if (++i < w.length) {
27116 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
27117 if (w[i] === 0) continue;
27118
27119 res = res.mul(q);
27120 }
27121 }
27122
27123 return res;
27124 };
27125
27126 // Shift-left in-place
27127 BN.prototype.iushln = function iushln (bits) {
27128 assert(typeof bits === 'number' && bits >= 0);
27129 var r = bits % 26;
27130 var s = (bits - r) / 26;
27131 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
27132 var i;
27133
27134 if (r !== 0) {
27135 var carry = 0;
27136
27137 for (i = 0; i < this.length; i++) {
27138 var newCarry = this.words[i] & carryMask;
27139 var c = ((this.words[i] | 0) - newCarry) << r;
27140 this.words[i] = c | carry;
27141 carry = newCarry >>> (26 - r);
27142 }
27143
27144 if (carry) {
27145 this.words[i] = carry;
27146 this.length++;
27147 }
27148 }
27149
27150 if (s !== 0) {
27151 for (i = this.length - 1; i >= 0; i--) {
27152 this.words[i + s] = this.words[i];
27153 }
27154
27155 for (i = 0; i < s; i++) {
27156 this.words[i] = 0;
27157 }
27158
27159 this.length += s;
27160 }
27161
27162 return this.strip();
27163 };
27164
27165 BN.prototype.ishln = function ishln (bits) {
27166 // TODO(indutny): implement me
27167 assert(this.negative === 0);
27168 return this.iushln(bits);
27169 };
27170
27171 // Shift-right in-place
27172 // NOTE: `hint` is a lowest bit before trailing zeroes
27173 // NOTE: if `extended` is present - it will be filled with destroyed bits
27174 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
27175 assert(typeof bits === 'number' && bits >= 0);
27176 var h;
27177 if (hint) {
27178 h = (hint - (hint % 26)) / 26;
27179 } else {
27180 h = 0;
27181 }
27182
27183 var r = bits % 26;
27184 var s = Math.min((bits - r) / 26, this.length);
27185 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
27186 var maskedWords = extended;
27187
27188 h -= s;
27189 h = Math.max(0, h);
27190
27191 // Extended mode, copy masked part
27192 if (maskedWords) {
27193 for (var i = 0; i < s; i++) {
27194 maskedWords.words[i] = this.words[i];
27195 }
27196 maskedWords.length = s;
27197 }
27198
27199 if (s === 0) {
27200 // No-op, we should not move anything at all
27201 } else if (this.length > s) {
27202 this.length -= s;
27203 for (i = 0; i < this.length; i++) {
27204 this.words[i] = this.words[i + s];
27205 }
27206 } else {
27207 this.words[0] = 0;
27208 this.length = 1;
27209 }
27210
27211 var carry = 0;
27212 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
27213 var word = this.words[i] | 0;
27214 this.words[i] = (carry << (26 - r)) | (word >>> r);
27215 carry = word & mask;
27216 }
27217
27218 // Push carried bits as a mask
27219 if (maskedWords && carry !== 0) {
27220 maskedWords.words[maskedWords.length++] = carry;
27221 }
27222
27223 if (this.length === 0) {
27224 this.words[0] = 0;
27225 this.length = 1;
27226 }
27227
27228 return this.strip();
27229 };
27230
27231 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
27232 // TODO(indutny): implement me
27233 assert(this.negative === 0);
27234 return this.iushrn(bits, hint, extended);
27235 };
27236
27237 // Shift-left
27238 BN.prototype.shln = function shln (bits) {
27239 return this.clone().ishln(bits);
27240 };
27241
27242 BN.prototype.ushln = function ushln (bits) {
27243 return this.clone().iushln(bits);
27244 };
27245
27246 // Shift-right
27247 BN.prototype.shrn = function shrn (bits) {
27248 return this.clone().ishrn(bits);
27249 };
27250
27251 BN.prototype.ushrn = function ushrn (bits) {
27252 return this.clone().iushrn(bits);
27253 };
27254
27255 // Test if n bit is set
27256 BN.prototype.testn = function testn (bit) {
27257 assert(typeof bit === 'number' && bit >= 0);
27258 var r = bit % 26;
27259 var s = (bit - r) / 26;
27260 var q = 1 << r;
27261
27262 // Fast case: bit is much higher than all existing words
27263 if (this.length <= s) return false;
27264
27265 // Check bit and return
27266 var w = this.words[s];
27267
27268 return !!(w & q);
27269 };
27270
27271 // Return only lowers bits of number (in-place)
27272 BN.prototype.imaskn = function imaskn (bits) {
27273 assert(typeof bits === 'number' && bits >= 0);
27274 var r = bits % 26;
27275 var s = (bits - r) / 26;
27276
27277 assert(this.negative === 0, 'imaskn works only with positive numbers');
27278
27279 if (this.length <= s) {
27280 return this;
27281 }
27282
27283 if (r !== 0) {
27284 s++;
27285 }
27286 this.length = Math.min(s, this.length);
27287
27288 if (r !== 0) {
27289 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
27290 this.words[this.length - 1] &= mask;
27291 }
27292
27293 return this.strip();
27294 };
27295
27296 // Return only lowers bits of number
27297 BN.prototype.maskn = function maskn (bits) {
27298 return this.clone().imaskn(bits);
27299 };
27300
27301 // Add plain number `num` to `this`
27302 BN.prototype.iaddn = function iaddn (num) {
27303 assert(typeof num === 'number');
27304 assert(num < 0x4000000);
27305 if (num < 0) return this.isubn(-num);
27306
27307 // Possible sign change
27308 if (this.negative !== 0) {
27309 if (this.length === 1 && (this.words[0] | 0) < num) {
27310 this.words[0] = num - (this.words[0] | 0);
27311 this.negative = 0;
27312 return this;
27313 }
27314
27315 this.negative = 0;
27316 this.isubn(num);
27317 this.negative = 1;
27318 return this;
27319 }
27320
27321 // Add without checks
27322 return this._iaddn(num);
27323 };
27324
27325 BN.prototype._iaddn = function _iaddn (num) {
27326 this.words[0] += num;
27327
27328 // Carry
27329 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
27330 this.words[i] -= 0x4000000;
27331 if (i === this.length - 1) {
27332 this.words[i + 1] = 1;
27333 } else {
27334 this.words[i + 1]++;
27335 }
27336 }
27337 this.length = Math.max(this.length, i + 1);
27338
27339 return this;
27340 };
27341
27342 // Subtract plain number `num` from `this`
27343 BN.prototype.isubn = function isubn (num) {
27344 assert(typeof num === 'number');
27345 assert(num < 0x4000000);
27346 if (num < 0) return this.iaddn(-num);
27347
27348 if (this.negative !== 0) {
27349 this.negative = 0;
27350 this.iaddn(num);
27351 this.negative = 1;
27352 return this;
27353 }
27354
27355 this.words[0] -= num;
27356
27357 if (this.length === 1 && this.words[0] < 0) {
27358 this.words[0] = -this.words[0];
27359 this.negative = 1;
27360 } else {
27361 // Carry
27362 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
27363 this.words[i] += 0x4000000;
27364 this.words[i + 1] -= 1;
27365 }
27366 }
27367
27368 return this.strip();
27369 };
27370
27371 BN.prototype.addn = function addn (num) {
27372 return this.clone().iaddn(num);
27373 };
27374
27375 BN.prototype.subn = function subn (num) {
27376 return this.clone().isubn(num);
27377 };
27378
27379 BN.prototype.iabs = function iabs () {
27380 this.negative = 0;
27381
27382 return this;
27383 };
27384
27385 BN.prototype.abs = function abs () {
27386 return this.clone().iabs();
27387 };
27388
27389 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
27390 var len = num.length + shift;
27391 var i;
27392
27393 this._expand(len);
27394
27395 var w;
27396 var carry = 0;
27397 for (i = 0; i < num.length; i++) {
27398 w = (this.words[i + shift] | 0) + carry;
27399 var right = (num.words[i] | 0) * mul;
27400 w -= right & 0x3ffffff;
27401 carry = (w >> 26) - ((right / 0x4000000) | 0);
27402 this.words[i + shift] = w & 0x3ffffff;
27403 }
27404 for (; i < this.length - shift; i++) {
27405 w = (this.words[i + shift] | 0) + carry;
27406 carry = w >> 26;
27407 this.words[i + shift] = w & 0x3ffffff;
27408 }
27409
27410 if (carry === 0) return this.strip();
27411
27412 // Subtraction overflow
27413 assert(carry === -1);
27414 carry = 0;
27415 for (i = 0; i < this.length; i++) {
27416 w = -(this.words[i] | 0) + carry;
27417 carry = w >> 26;
27418 this.words[i] = w & 0x3ffffff;
27419 }
27420 this.negative = 1;
27421
27422 return this.strip();
27423 };
27424
27425 BN.prototype._wordDiv = function _wordDiv (num, mode) {
27426 var shift = this.length - num.length;
27427
27428 var a = this.clone();
27429 var b = num;
27430
27431 // Normalize
27432 var bhi = b.words[b.length - 1] | 0;
27433 var bhiBits = this._countBits(bhi);
27434 shift = 26 - bhiBits;
27435 if (shift !== 0) {
27436 b = b.ushln(shift);
27437 a.iushln(shift);
27438 bhi = b.words[b.length - 1] | 0;
27439 }
27440
27441 // Initialize quotient
27442 var m = a.length - b.length;
27443 var q;
27444
27445 if (mode !== 'mod') {
27446 q = new BN(null);
27447 q.length = m + 1;
27448 q.words = new Array(q.length);
27449 for (var i = 0; i < q.length; i++) {
27450 q.words[i] = 0;
27451 }
27452 }
27453
27454 var diff = a.clone()._ishlnsubmul(b, 1, m);
27455 if (diff.negative === 0) {
27456 a = diff;
27457 if (q) {
27458 q.words[m] = 1;
27459 }
27460 }
27461
27462 for (var j = m - 1; j >= 0; j--) {
27463 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
27464 (a.words[b.length + j - 1] | 0);
27465
27466 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
27467 // (0x7ffffff)
27468 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
27469
27470 a._ishlnsubmul(b, qj, j);
27471 while (a.negative !== 0) {
27472 qj--;
27473 a.negative = 0;
27474 a._ishlnsubmul(b, 1, j);
27475 if (!a.isZero()) {
27476 a.negative ^= 1;
27477 }
27478 }
27479 if (q) {
27480 q.words[j] = qj;
27481 }
27482 }
27483 if (q) {
27484 q.strip();
27485 }
27486 a.strip();
27487
27488 // Denormalize
27489 if (mode !== 'div' && shift !== 0) {
27490 a.iushrn(shift);
27491 }
27492
27493 return {
27494 div: q || null,
27495 mod: a
27496 };
27497 };
27498
27499 // NOTE: 1) `mode` can be set to `mod` to request mod only,
27500 // to `div` to request div only, or be absent to
27501 // request both div & mod
27502 // 2) `positive` is true if unsigned mod is requested
27503 BN.prototype.divmod = function divmod (num, mode, positive) {
27504 assert(!num.isZero());
27505
27506 if (this.isZero()) {
27507 return {
27508 div: new BN(0),
27509 mod: new BN(0)
27510 };
27511 }
27512
27513 var div, mod, res;
27514 if (this.negative !== 0 && num.negative === 0) {
27515 res = this.neg().divmod(num, mode);
27516
27517 if (mode !== 'mod') {
27518 div = res.div.neg();
27519 }
27520
27521 if (mode !== 'div') {
27522 mod = res.mod.neg();
27523 if (positive && mod.negative !== 0) {
27524 mod.iadd(num);
27525 }
27526 }
27527
27528 return {
27529 div: div,
27530 mod: mod
27531 };
27532 }
27533
27534 if (this.negative === 0 && num.negative !== 0) {
27535 res = this.divmod(num.neg(), mode);
27536
27537 if (mode !== 'mod') {
27538 div = res.div.neg();
27539 }
27540
27541 return {
27542 div: div,
27543 mod: res.mod
27544 };
27545 }
27546
27547 if ((this.negative & num.negative) !== 0) {
27548 res = this.neg().divmod(num.neg(), mode);
27549
27550 if (mode !== 'div') {
27551 mod = res.mod.neg();
27552 if (positive && mod.negative !== 0) {
27553 mod.isub(num);
27554 }
27555 }
27556
27557 return {
27558 div: res.div,
27559 mod: mod
27560 };
27561 }
27562
27563 // Both numbers are positive at this point
27564
27565 // Strip both numbers to approximate shift value
27566 if (num.length > this.length || this.cmp(num) < 0) {
27567 return {
27568 div: new BN(0),
27569 mod: this
27570 };
27571 }
27572
27573 // Very short reduction
27574 if (num.length === 1) {
27575 if (mode === 'div') {
27576 return {
27577 div: this.divn(num.words[0]),
27578 mod: null
27579 };
27580 }
27581
27582 if (mode === 'mod') {
27583 return {
27584 div: null,
27585 mod: new BN(this.modn(num.words[0]))
27586 };
27587 }
27588
27589 return {
27590 div: this.divn(num.words[0]),
27591 mod: new BN(this.modn(num.words[0]))
27592 };
27593 }
27594
27595 return this._wordDiv(num, mode);
27596 };
27597
27598 // Find `this` / `num`
27599 BN.prototype.div = function div (num) {
27600 return this.divmod(num, 'div', false).div;
27601 };
27602
27603 // Find `this` % `num`
27604 BN.prototype.mod = function mod (num) {
27605 return this.divmod(num, 'mod', false).mod;
27606 };
27607
27608 BN.prototype.umod = function umod (num) {
27609 return this.divmod(num, 'mod', true).mod;
27610 };
27611
27612 // Find Round(`this` / `num`)
27613 BN.prototype.divRound = function divRound (num) {
27614 var dm = this.divmod(num);
27615
27616 // Fast case - exact division
27617 if (dm.mod.isZero()) return dm.div;
27618
27619 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
27620
27621 var half = num.ushrn(1);
27622 var r2 = num.andln(1);
27623 var cmp = mod.cmp(half);
27624
27625 // Round down
27626 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
27627
27628 // Round up
27629 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
27630 };
27631
27632 BN.prototype.modn = function modn (num) {
27633 assert(num <= 0x3ffffff);
27634 var p = (1 << 26) % num;
27635
27636 var acc = 0;
27637 for (var i = this.length - 1; i >= 0; i--) {
27638 acc = (p * acc + (this.words[i] | 0)) % num;
27639 }
27640
27641 return acc;
27642 };
27643
27644 // In-place division by number
27645 BN.prototype.idivn = function idivn (num) {
27646 assert(num <= 0x3ffffff);
27647
27648 var carry = 0;
27649 for (var i = this.length - 1; i >= 0; i--) {
27650 var w = (this.words[i] | 0) + carry * 0x4000000;
27651 this.words[i] = (w / num) | 0;
27652 carry = w % num;
27653 }
27654
27655 return this.strip();
27656 };
27657
27658 BN.prototype.divn = function divn (num) {
27659 return this.clone().idivn(num);
27660 };
27661
27662 BN.prototype.egcd = function egcd (p) {
27663 assert(p.negative === 0);
27664 assert(!p.isZero());
27665
27666 var x = this;
27667 var y = p.clone();
27668
27669 if (x.negative !== 0) {
27670 x = x.umod(p);
27671 } else {
27672 x = x.clone();
27673 }
27674
27675 // A * x + B * y = x
27676 var A = new BN(1);
27677 var B = new BN(0);
27678
27679 // C * x + D * y = y
27680 var C = new BN(0);
27681 var D = new BN(1);
27682
27683 var g = 0;
27684
27685 while (x.isEven() && y.isEven()) {
27686 x.iushrn(1);
27687 y.iushrn(1);
27688 ++g;
27689 }
27690
27691 var yp = y.clone();
27692 var xp = x.clone();
27693
27694 while (!x.isZero()) {
27695 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27696 if (i > 0) {
27697 x.iushrn(i);
27698 while (i-- > 0) {
27699 if (A.isOdd() || B.isOdd()) {
27700 A.iadd(yp);
27701 B.isub(xp);
27702 }
27703
27704 A.iushrn(1);
27705 B.iushrn(1);
27706 }
27707 }
27708
27709 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27710 if (j > 0) {
27711 y.iushrn(j);
27712 while (j-- > 0) {
27713 if (C.isOdd() || D.isOdd()) {
27714 C.iadd(yp);
27715 D.isub(xp);
27716 }
27717
27718 C.iushrn(1);
27719 D.iushrn(1);
27720 }
27721 }
27722
27723 if (x.cmp(y) >= 0) {
27724 x.isub(y);
27725 A.isub(C);
27726 B.isub(D);
27727 } else {
27728 y.isub(x);
27729 C.isub(A);
27730 D.isub(B);
27731 }
27732 }
27733
27734 return {
27735 a: C,
27736 b: D,
27737 gcd: y.iushln(g)
27738 };
27739 };
27740
27741 // This is reduced incarnation of the binary EEA
27742 // above, designated to invert members of the
27743 // _prime_ fields F(p) at a maximal speed
27744 BN.prototype._invmp = function _invmp (p) {
27745 assert(p.negative === 0);
27746 assert(!p.isZero());
27747
27748 var a = this;
27749 var b = p.clone();
27750
27751 if (a.negative !== 0) {
27752 a = a.umod(p);
27753 } else {
27754 a = a.clone();
27755 }
27756
27757 var x1 = new BN(1);
27758 var x2 = new BN(0);
27759
27760 var delta = b.clone();
27761
27762 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
27763 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27764 if (i > 0) {
27765 a.iushrn(i);
27766 while (i-- > 0) {
27767 if (x1.isOdd()) {
27768 x1.iadd(delta);
27769 }
27770
27771 x1.iushrn(1);
27772 }
27773 }
27774
27775 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27776 if (j > 0) {
27777 b.iushrn(j);
27778 while (j-- > 0) {
27779 if (x2.isOdd()) {
27780 x2.iadd(delta);
27781 }
27782
27783 x2.iushrn(1);
27784 }
27785 }
27786
27787 if (a.cmp(b) >= 0) {
27788 a.isub(b);
27789 x1.isub(x2);
27790 } else {
27791 b.isub(a);
27792 x2.isub(x1);
27793 }
27794 }
27795
27796 var res;
27797 if (a.cmpn(1) === 0) {
27798 res = x1;
27799 } else {
27800 res = x2;
27801 }
27802
27803 if (res.cmpn(0) < 0) {
27804 res.iadd(p);
27805 }
27806
27807 return res;
27808 };
27809
27810 BN.prototype.gcd = function gcd (num) {
27811 if (this.isZero()) return num.abs();
27812 if (num.isZero()) return this.abs();
27813
27814 var a = this.clone();
27815 var b = num.clone();
27816 a.negative = 0;
27817 b.negative = 0;
27818
27819 // Remove common factor of two
27820 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
27821 a.iushrn(1);
27822 b.iushrn(1);
27823 }
27824
27825 do {
27826 while (a.isEven()) {
27827 a.iushrn(1);
27828 }
27829 while (b.isEven()) {
27830 b.iushrn(1);
27831 }
27832
27833 var r = a.cmp(b);
27834 if (r < 0) {
27835 // Swap `a` and `b` to make `a` always bigger than `b`
27836 var t = a;
27837 a = b;
27838 b = t;
27839 } else if (r === 0 || b.cmpn(1) === 0) {
27840 break;
27841 }
27842
27843 a.isub(b);
27844 } while (true);
27845
27846 return b.iushln(shift);
27847 };
27848
27849 // Invert number in the field F(num)
27850 BN.prototype.invm = function invm (num) {
27851 return this.egcd(num).a.umod(num);
27852 };
27853
27854 BN.prototype.isEven = function isEven () {
27855 return (this.words[0] & 1) === 0;
27856 };
27857
27858 BN.prototype.isOdd = function isOdd () {
27859 return (this.words[0] & 1) === 1;
27860 };
27861
27862 // And first word and num
27863 BN.prototype.andln = function andln (num) {
27864 return this.words[0] & num;
27865 };
27866
27867 // Increment at the bit position in-line
27868 BN.prototype.bincn = function bincn (bit) {
27869 assert(typeof bit === 'number');
27870 var r = bit % 26;
27871 var s = (bit - r) / 26;
27872 var q = 1 << r;
27873
27874 // Fast case: bit is much higher than all existing words
27875 if (this.length <= s) {
27876 this._expand(s + 1);
27877 this.words[s] |= q;
27878 return this;
27879 }
27880
27881 // Add bit and propagate, if needed
27882 var carry = q;
27883 for (var i = s; carry !== 0 && i < this.length; i++) {
27884 var w = this.words[i] | 0;
27885 w += carry;
27886 carry = w >>> 26;
27887 w &= 0x3ffffff;
27888 this.words[i] = w;
27889 }
27890 if (carry !== 0) {
27891 this.words[i] = carry;
27892 this.length++;
27893 }
27894 return this;
27895 };
27896
27897 BN.prototype.isZero = function isZero () {
27898 return this.length === 1 && this.words[0] === 0;
27899 };
27900
27901 BN.prototype.cmpn = function cmpn (num) {
27902 var negative = num < 0;
27903
27904 if (this.negative !== 0 && !negative) return -1;
27905 if (this.negative === 0 && negative) return 1;
27906
27907 this.strip();
27908
27909 var res;
27910 if (this.length > 1) {
27911 res = 1;
27912 } else {
27913 if (negative) {
27914 num = -num;
27915 }
27916
27917 assert(num <= 0x3ffffff, 'Number is too big');
27918
27919 var w = this.words[0] | 0;
27920 res = w === num ? 0 : w < num ? -1 : 1;
27921 }
27922 if (this.negative !== 0) return -res | 0;
27923 return res;
27924 };
27925
27926 // Compare two numbers and return:
27927 // 1 - if `this` > `num`
27928 // 0 - if `this` == `num`
27929 // -1 - if `this` < `num`
27930 BN.prototype.cmp = function cmp (num) {
27931 if (this.negative !== 0 && num.negative === 0) return -1;
27932 if (this.negative === 0 && num.negative !== 0) return 1;
27933
27934 var res = this.ucmp(num);
27935 if (this.negative !== 0) return -res | 0;
27936 return res;
27937 };
27938
27939 // Unsigned comparison
27940 BN.prototype.ucmp = function ucmp (num) {
27941 // At this point both numbers have the same sign
27942 if (this.length > num.length) return 1;
27943 if (this.length < num.length) return -1;
27944
27945 var res = 0;
27946 for (var i = this.length - 1; i >= 0; i--) {
27947 var a = this.words[i] | 0;
27948 var b = num.words[i] | 0;
27949
27950 if (a === b) continue;
27951 if (a < b) {
27952 res = -1;
27953 } else if (a > b) {
27954 res = 1;
27955 }
27956 break;
27957 }
27958 return res;
27959 };
27960
27961 BN.prototype.gtn = function gtn (num) {
27962 return this.cmpn(num) === 1;
27963 };
27964
27965 BN.prototype.gt = function gt (num) {
27966 return this.cmp(num) === 1;
27967 };
27968
27969 BN.prototype.gten = function gten (num) {
27970 return this.cmpn(num) >= 0;
27971 };
27972
27973 BN.prototype.gte = function gte (num) {
27974 return this.cmp(num) >= 0;
27975 };
27976
27977 BN.prototype.ltn = function ltn (num) {
27978 return this.cmpn(num) === -1;
27979 };
27980
27981 BN.prototype.lt = function lt (num) {
27982 return this.cmp(num) === -1;
27983 };
27984
27985 BN.prototype.lten = function lten (num) {
27986 return this.cmpn(num) <= 0;
27987 };
27988
27989 BN.prototype.lte = function lte (num) {
27990 return this.cmp(num) <= 0;
27991 };
27992
27993 BN.prototype.eqn = function eqn (num) {
27994 return this.cmpn(num) === 0;
27995 };
27996
27997 BN.prototype.eq = function eq (num) {
27998 return this.cmp(num) === 0;
27999 };
28000
28001 //
28002 // A reduce context, could be using montgomery or something better, depending
28003 // on the `m` itself.
28004 //
28005 BN.red = function red (num) {
28006 return new Red(num);
28007 };
28008
28009 BN.prototype.toRed = function toRed (ctx) {
28010 assert(!this.red, 'Already a number in reduction context');
28011 assert(this.negative === 0, 'red works only with positives');
28012 return ctx.convertTo(this)._forceRed(ctx);
28013 };
28014
28015 BN.prototype.fromRed = function fromRed () {
28016 assert(this.red, 'fromRed works only with numbers in reduction context');
28017 return this.red.convertFrom(this);
28018 };
28019
28020 BN.prototype._forceRed = function _forceRed (ctx) {
28021 this.red = ctx;
28022 return this;
28023 };
28024
28025 BN.prototype.forceRed = function forceRed (ctx) {
28026 assert(!this.red, 'Already a number in reduction context');
28027 return this._forceRed(ctx);
28028 };
28029
28030 BN.prototype.redAdd = function redAdd (num) {
28031 assert(this.red, 'redAdd works only with red numbers');
28032 return this.red.add(this, num);
28033 };
28034
28035 BN.prototype.redIAdd = function redIAdd (num) {
28036 assert(this.red, 'redIAdd works only with red numbers');
28037 return this.red.iadd(this, num);
28038 };
28039
28040 BN.prototype.redSub = function redSub (num) {
28041 assert(this.red, 'redSub works only with red numbers');
28042 return this.red.sub(this, num);
28043 };
28044
28045 BN.prototype.redISub = function redISub (num) {
28046 assert(this.red, 'redISub works only with red numbers');
28047 return this.red.isub(this, num);
28048 };
28049
28050 BN.prototype.redShl = function redShl (num) {
28051 assert(this.red, 'redShl works only with red numbers');
28052 return this.red.shl(this, num);
28053 };
28054
28055 BN.prototype.redMul = function redMul (num) {
28056 assert(this.red, 'redMul works only with red numbers');
28057 this.red._verify2(this, num);
28058 return this.red.mul(this, num);
28059 };
28060
28061 BN.prototype.redIMul = function redIMul (num) {
28062 assert(this.red, 'redMul works only with red numbers');
28063 this.red._verify2(this, num);
28064 return this.red.imul(this, num);
28065 };
28066
28067 BN.prototype.redSqr = function redSqr () {
28068 assert(this.red, 'redSqr works only with red numbers');
28069 this.red._verify1(this);
28070 return this.red.sqr(this);
28071 };
28072
28073 BN.prototype.redISqr = function redISqr () {
28074 assert(this.red, 'redISqr works only with red numbers');
28075 this.red._verify1(this);
28076 return this.red.isqr(this);
28077 };
28078
28079 // Square root over p
28080 BN.prototype.redSqrt = function redSqrt () {
28081 assert(this.red, 'redSqrt works only with red numbers');
28082 this.red._verify1(this);
28083 return this.red.sqrt(this);
28084 };
28085
28086 BN.prototype.redInvm = function redInvm () {
28087 assert(this.red, 'redInvm works only with red numbers');
28088 this.red._verify1(this);
28089 return this.red.invm(this);
28090 };
28091
28092 // Return negative clone of `this` % `red modulo`
28093 BN.prototype.redNeg = function redNeg () {
28094 assert(this.red, 'redNeg works only with red numbers');
28095 this.red._verify1(this);
28096 return this.red.neg(this);
28097 };
28098
28099 BN.prototype.redPow = function redPow (num) {
28100 assert(this.red && !num.red, 'redPow(normalNum)');
28101 this.red._verify1(this);
28102 return this.red.pow(this, num);
28103 };
28104
28105 // Prime numbers with efficient reduction
28106 var primes = {
28107 k256: null,
28108 p224: null,
28109 p192: null,
28110 p25519: null
28111 };
28112
28113 // Pseudo-Mersenne prime
28114 function MPrime (name, p) {
28115 // P = 2 ^ N - K
28116 this.name = name;
28117 this.p = new BN(p, 16);
28118 this.n = this.p.bitLength();
28119 this.k = new BN(1).iushln(this.n).isub(this.p);
28120
28121 this.tmp = this._tmp();
28122 }
28123
28124 MPrime.prototype._tmp = function _tmp () {
28125 var tmp = new BN(null);
28126 tmp.words = new Array(Math.ceil(this.n / 13));
28127 return tmp;
28128 };
28129
28130 MPrime.prototype.ireduce = function ireduce (num) {
28131 // Assumes that `num` is less than `P^2`
28132 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
28133 var r = num;
28134 var rlen;
28135
28136 do {
28137 this.split(r, this.tmp);
28138 r = this.imulK(r);
28139 r = r.iadd(this.tmp);
28140 rlen = r.bitLength();
28141 } while (rlen > this.n);
28142
28143 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
28144 if (cmp === 0) {
28145 r.words[0] = 0;
28146 r.length = 1;
28147 } else if (cmp > 0) {
28148 r.isub(this.p);
28149 } else {
28150 r.strip();
28151 }
28152
28153 return r;
28154 };
28155
28156 MPrime.prototype.split = function split (input, out) {
28157 input.iushrn(this.n, 0, out);
28158 };
28159
28160 MPrime.prototype.imulK = function imulK (num) {
28161 return num.imul(this.k);
28162 };
28163
28164 function K256 () {
28165 MPrime.call(
28166 this,
28167 'k256',
28168 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
28169 }
28170 inherits(K256, MPrime);
28171
28172 K256.prototype.split = function split (input, output) {
28173 // 256 = 9 * 26 + 22
28174 var mask = 0x3fffff;
28175
28176 var outLen = Math.min(input.length, 9);
28177 for (var i = 0; i < outLen; i++) {
28178 output.words[i] = input.words[i];
28179 }
28180 output.length = outLen;
28181
28182 if (input.length <= 9) {
28183 input.words[0] = 0;
28184 input.length = 1;
28185 return;
28186 }
28187
28188 // Shift by 9 limbs
28189 var prev = input.words[9];
28190 output.words[output.length++] = prev & mask;
28191
28192 for (i = 10; i < input.length; i++) {
28193 var next = input.words[i] | 0;
28194 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
28195 prev = next;
28196 }
28197 prev >>>= 22;
28198 input.words[i - 10] = prev;
28199 if (prev === 0 && input.length > 10) {
28200 input.length -= 10;
28201 } else {
28202 input.length -= 9;
28203 }
28204 };
28205
28206 K256.prototype.imulK = function imulK (num) {
28207 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
28208 num.words[num.length] = 0;
28209 num.words[num.length + 1] = 0;
28210 num.length += 2;
28211
28212 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
28213 var lo = 0;
28214 for (var i = 0; i < num.length; i++) {
28215 var w = num.words[i] | 0;
28216 lo += w * 0x3d1;
28217 num.words[i] = lo & 0x3ffffff;
28218 lo = w * 0x40 + ((lo / 0x4000000) | 0);
28219 }
28220
28221 // Fast length reduction
28222 if (num.words[num.length - 1] === 0) {
28223 num.length--;
28224 if (num.words[num.length - 1] === 0) {
28225 num.length--;
28226 }
28227 }
28228 return num;
28229 };
28230
28231 function P224 () {
28232 MPrime.call(
28233 this,
28234 'p224',
28235 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
28236 }
28237 inherits(P224, MPrime);
28238
28239 function P192 () {
28240 MPrime.call(
28241 this,
28242 'p192',
28243 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
28244 }
28245 inherits(P192, MPrime);
28246
28247 function P25519 () {
28248 // 2 ^ 255 - 19
28249 MPrime.call(
28250 this,
28251 '25519',
28252 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
28253 }
28254 inherits(P25519, MPrime);
28255
28256 P25519.prototype.imulK = function imulK (num) {
28257 // K = 0x13
28258 var carry = 0;
28259 for (var i = 0; i < num.length; i++) {
28260 var hi = (num.words[i] | 0) * 0x13 + carry;
28261 var lo = hi & 0x3ffffff;
28262 hi >>>= 26;
28263
28264 num.words[i] = lo;
28265 carry = hi;
28266 }
28267 if (carry !== 0) {
28268 num.words[num.length++] = carry;
28269 }
28270 return num;
28271 };
28272
28273 // Exported mostly for testing purposes, use plain name instead
28274 BN._prime = function prime (name) {
28275 // Cached version of prime
28276 if (primes[name]) return primes[name];
28277
28278 var prime;
28279 if (name === 'k256') {
28280 prime = new K256();
28281 } else if (name === 'p224') {
28282 prime = new P224();
28283 } else if (name === 'p192') {
28284 prime = new P192();
28285 } else if (name === 'p25519') {
28286 prime = new P25519();
28287 } else {
28288 throw new Error('Unknown prime ' + name);
28289 }
28290 primes[name] = prime;
28291
28292 return prime;
28293 };
28294
28295 //
28296 // Base reduction engine
28297 //
28298 function Red (m) {
28299 if (typeof m === 'string') {
28300 var prime = BN._prime(m);
28301 this.m = prime.p;
28302 this.prime = prime;
28303 } else {
28304 assert(m.gtn(1), 'modulus must be greater than 1');
28305 this.m = m;
28306 this.prime = null;
28307 }
28308 }
28309
28310 Red.prototype._verify1 = function _verify1 (a) {
28311 assert(a.negative === 0, 'red works only with positives');
28312 assert(a.red, 'red works only with red numbers');
28313 };
28314
28315 Red.prototype._verify2 = function _verify2 (a, b) {
28316 assert((a.negative | b.negative) === 0, 'red works only with positives');
28317 assert(a.red && a.red === b.red,
28318 'red works only with red numbers');
28319 };
28320
28321 Red.prototype.imod = function imod (a) {
28322 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
28323 return a.umod(this.m)._forceRed(this);
28324 };
28325
28326 Red.prototype.neg = function neg (a) {
28327 if (a.isZero()) {
28328 return a.clone();
28329 }
28330
28331 return this.m.sub(a)._forceRed(this);
28332 };
28333
28334 Red.prototype.add = function add (a, b) {
28335 this._verify2(a, b);
28336
28337 var res = a.add(b);
28338 if (res.cmp(this.m) >= 0) {
28339 res.isub(this.m);
28340 }
28341 return res._forceRed(this);
28342 };
28343
28344 Red.prototype.iadd = function iadd (a, b) {
28345 this._verify2(a, b);
28346
28347 var res = a.iadd(b);
28348 if (res.cmp(this.m) >= 0) {
28349 res.isub(this.m);
28350 }
28351 return res;
28352 };
28353
28354 Red.prototype.sub = function sub (a, b) {
28355 this._verify2(a, b);
28356
28357 var res = a.sub(b);
28358 if (res.cmpn(0) < 0) {
28359 res.iadd(this.m);
28360 }
28361 return res._forceRed(this);
28362 };
28363
28364 Red.prototype.isub = function isub (a, b) {
28365 this._verify2(a, b);
28366
28367 var res = a.isub(b);
28368 if (res.cmpn(0) < 0) {
28369 res.iadd(this.m);
28370 }
28371 return res;
28372 };
28373
28374 Red.prototype.shl = function shl (a, num) {
28375 this._verify1(a);
28376 return this.imod(a.ushln(num));
28377 };
28378
28379 Red.prototype.imul = function imul (a, b) {
28380 this._verify2(a, b);
28381 return this.imod(a.imul(b));
28382 };
28383
28384 Red.prototype.mul = function mul (a, b) {
28385 this._verify2(a, b);
28386 return this.imod(a.mul(b));
28387 };
28388
28389 Red.prototype.isqr = function isqr (a) {
28390 return this.imul(a, a.clone());
28391 };
28392
28393 Red.prototype.sqr = function sqr (a) {
28394 return this.mul(a, a);
28395 };
28396
28397 Red.prototype.sqrt = function sqrt (a) {
28398 if (a.isZero()) return a.clone();
28399
28400 var mod3 = this.m.andln(3);
28401 assert(mod3 % 2 === 1);
28402
28403 // Fast case
28404 if (mod3 === 3) {
28405 var pow = this.m.add(new BN(1)).iushrn(2);
28406 return this.pow(a, pow);
28407 }
28408
28409 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
28410 //
28411 // Find Q and S, that Q * 2 ^ S = (P - 1)
28412 var q = this.m.subn(1);
28413 var s = 0;
28414 while (!q.isZero() && q.andln(1) === 0) {
28415 s++;
28416 q.iushrn(1);
28417 }
28418 assert(!q.isZero());
28419
28420 var one = new BN(1).toRed(this);
28421 var nOne = one.redNeg();
28422
28423 // Find quadratic non-residue
28424 // NOTE: Max is such because of generalized Riemann hypothesis.
28425 var lpow = this.m.subn(1).iushrn(1);
28426 var z = this.m.bitLength();
28427 z = new BN(2 * z * z).toRed(this);
28428
28429 while (this.pow(z, lpow).cmp(nOne) !== 0) {
28430 z.redIAdd(nOne);
28431 }
28432
28433 var c = this.pow(z, q);
28434 var r = this.pow(a, q.addn(1).iushrn(1));
28435 var t = this.pow(a, q);
28436 var m = s;
28437 while (t.cmp(one) !== 0) {
28438 var tmp = t;
28439 for (var i = 0; tmp.cmp(one) !== 0; i++) {
28440 tmp = tmp.redSqr();
28441 }
28442 assert(i < m);
28443 var b = this.pow(c, new BN(1).iushln(m - i - 1));
28444
28445 r = r.redMul(b);
28446 c = b.redSqr();
28447 t = t.redMul(c);
28448 m = i;
28449 }
28450
28451 return r;
28452 };
28453
28454 Red.prototype.invm = function invm (a) {
28455 var inv = a._invmp(this.m);
28456 if (inv.negative !== 0) {
28457 inv.negative = 0;
28458 return this.imod(inv).redNeg();
28459 } else {
28460 return this.imod(inv);
28461 }
28462 };
28463
28464 Red.prototype.pow = function pow (a, num) {
28465 if (num.isZero()) return new BN(1);
28466 if (num.cmpn(1) === 0) return a.clone();
28467
28468 var windowSize = 4;
28469 var wnd = new Array(1 << windowSize);
28470 wnd[0] = new BN(1).toRed(this);
28471 wnd[1] = a;
28472 for (var i = 2; i < wnd.length; i++) {
28473 wnd[i] = this.mul(wnd[i - 1], a);
28474 }
28475
28476 var res = wnd[0];
28477 var current = 0;
28478 var currentLen = 0;
28479 var start = num.bitLength() % 26;
28480 if (start === 0) {
28481 start = 26;
28482 }
28483
28484 for (i = num.length - 1; i >= 0; i--) {
28485 var word = num.words[i];
28486 for (var j = start - 1; j >= 0; j--) {
28487 var bit = (word >> j) & 1;
28488 if (res !== wnd[0]) {
28489 res = this.sqr(res);
28490 }
28491
28492 if (bit === 0 && current === 0) {
28493 currentLen = 0;
28494 continue;
28495 }
28496
28497 current <<= 1;
28498 current |= bit;
28499 currentLen++;
28500 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
28501
28502 res = this.mul(res, wnd[current]);
28503 currentLen = 0;
28504 current = 0;
28505 }
28506 start = 26;
28507 }
28508
28509 return res;
28510 };
28511
28512 Red.prototype.convertTo = function convertTo (num) {
28513 var r = num.umod(this.m);
28514
28515 return r === num ? r.clone() : r;
28516 };
28517
28518 Red.prototype.convertFrom = function convertFrom (num) {
28519 var res = num.clone();
28520 res.red = null;
28521 return res;
28522 };
28523
28524 //
28525 // Montgomery method engine
28526 //
28527
28528 BN.mont = function mont (num) {
28529 return new Mont(num);
28530 };
28531
28532 function Mont (m) {
28533 Red.call(this, m);
28534
28535 this.shift = this.m.bitLength();
28536 if (this.shift % 26 !== 0) {
28537 this.shift += 26 - (this.shift % 26);
28538 }
28539
28540 this.r = new BN(1).iushln(this.shift);
28541 this.r2 = this.imod(this.r.sqr());
28542 this.rinv = this.r._invmp(this.m);
28543
28544 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
28545 this.minv = this.minv.umod(this.r);
28546 this.minv = this.r.sub(this.minv);
28547 }
28548 inherits(Mont, Red);
28549
28550 Mont.prototype.convertTo = function convertTo (num) {
28551 return this.imod(num.ushln(this.shift));
28552 };
28553
28554 Mont.prototype.convertFrom = function convertFrom (num) {
28555 var r = this.imod(num.mul(this.rinv));
28556 r.red = null;
28557 return r;
28558 };
28559
28560 Mont.prototype.imul = function imul (a, b) {
28561 if (a.isZero() || b.isZero()) {
28562 a.words[0] = 0;
28563 a.length = 1;
28564 return a;
28565 }
28566
28567 var t = a.imul(b);
28568 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28569 var u = t.isub(c).iushrn(this.shift);
28570 var res = u;
28571
28572 if (u.cmp(this.m) >= 0) {
28573 res = u.isub(this.m);
28574 } else if (u.cmpn(0) < 0) {
28575 res = u.iadd(this.m);
28576 }
28577
28578 return res._forceRed(this);
28579 };
28580
28581 Mont.prototype.mul = function mul (a, b) {
28582 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
28583
28584 var t = a.mul(b);
28585 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28586 var u = t.isub(c).iushrn(this.shift);
28587 var res = u;
28588 if (u.cmp(this.m) >= 0) {
28589 res = u.isub(this.m);
28590 } else if (u.cmpn(0) < 0) {
28591 res = u.iadd(this.m);
28592 }
28593
28594 return res._forceRed(this);
28595 };
28596
28597 Mont.prototype.invm = function invm (a) {
28598 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
28599 var res = this.imod(a._invmp(this.m).mul(this.r2));
28600 return res._forceRed(this);
28601 };
28602 })(typeof module === 'undefined' || module, this);
28603
28604 },{}],34:[function(require,module,exports){
28605 var r;
28606
28607 module.exports = function rand(len) {
28608 if (!r)
28609 r = new Rand(null);
28610
28611 return r.generate(len);
28612 };
28613
28614 function Rand(rand) {
28615 this.rand = rand;
28616 }
28617 module.exports.Rand = Rand;
28618
28619 Rand.prototype.generate = function generate(len) {
28620 return this._rand(len);
28621 };
28622
28623 if (typeof self === 'object') {
28624 if (self.crypto && self.crypto.getRandomValues) {
28625 // Modern browsers
28626 Rand.prototype._rand = function _rand(n) {
28627 var arr = new Uint8Array(n);
28628 self.crypto.getRandomValues(arr);
28629 return arr;
28630 };
28631 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
28632 // IE
28633 Rand.prototype._rand = function _rand(n) {
28634 var arr = new Uint8Array(n);
28635 self.msCrypto.getRandomValues(arr);
28636 return arr;
28637 };
28638 } else {
28639 // Old junk
28640 Rand.prototype._rand = function() {
28641 throw new Error('Not implemented yet');
28642 };
28643 }
28644 } else {
28645 // Node.js or Web worker with no crypto support
28646 try {
28647 var crypto = require('crypto');
28648
28649 Rand.prototype._rand = function _rand(n) {
28650 return crypto.randomBytes(n);
28651 };
28652 } catch (e) {
28653 // Emulate crypto API using randy
28654 Rand.prototype._rand = function _rand(n) {
28655 var res = new Uint8Array(n);
28656 for (var i = 0; i < res.length; i++)
28657 res[i] = this.rand.getByte();
28658 return res;
28659 };
28660 }
28661 }
28662
28663 },{"crypto":3}],35:[function(require,module,exports){
28664 (function (Buffer){
28665 var Transform = require('stream').Transform
28666 var inherits = require('inherits')
28667 var StringDecoder = require('string_decoder').StringDecoder
28668 module.exports = CipherBase
28669 inherits(CipherBase, Transform)
28670 function CipherBase (hashMode) {
28671 Transform.call(this)
28672 this.hashMode = typeof hashMode === 'string'
28673 if (this.hashMode) {
28674 this[hashMode] = this._finalOrDigest
28675 } else {
28676 this.final = this._finalOrDigest
28677 }
28678 this._decoder = null
28679 this._encoding = null
28680 }
28681 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
28682 if (typeof data === 'string') {
28683 data = new Buffer(data, inputEnc)
28684 }
28685 var outData = this._update(data)
28686 if (this.hashMode) {
28687 return this
28688 }
28689 if (outputEnc) {
28690 outData = this._toString(outData, outputEnc)
28691 }
28692 return outData
28693 }
28694
28695 CipherBase.prototype.setAutoPadding = function () {}
28696
28697 CipherBase.prototype.getAuthTag = function () {
28698 throw new Error('trying to get auth tag in unsupported state')
28699 }
28700
28701 CipherBase.prototype.setAuthTag = function () {
28702 throw new Error('trying to set auth tag in unsupported state')
28703 }
28704
28705 CipherBase.prototype.setAAD = function () {
28706 throw new Error('trying to set aad in unsupported state')
28707 }
28708
28709 CipherBase.prototype._transform = function (data, _, next) {
28710 var err
28711 try {
28712 if (this.hashMode) {
28713 this._update(data)
28714 } else {
28715 this.push(this._update(data))
28716 }
28717 } catch (e) {
28718 err = e
28719 } finally {
28720 next(err)
28721 }
28722 }
28723 CipherBase.prototype._flush = function (done) {
28724 var err
28725 try {
28726 this.push(this._final())
28727 } catch (e) {
28728 err = e
28729 } finally {
28730 done(err)
28731 }
28732 }
28733 CipherBase.prototype._finalOrDigest = function (outputEnc) {
28734 var outData = this._final() || new Buffer('')
28735 if (outputEnc) {
28736 outData = this._toString(outData, outputEnc, true)
28737 }
28738 return outData
28739 }
28740
28741 CipherBase.prototype._toString = function (value, enc, fin) {
28742 if (!this._decoder) {
28743 this._decoder = new StringDecoder(enc)
28744 this._encoding = enc
28745 }
28746 if (this._encoding !== enc) {
28747 throw new Error('can\'t switch encodings')
28748 }
28749 var out = this._decoder.write(value)
28750 if (fin) {
28751 out += this._decoder.end()
28752 }
28753 return out
28754 }
28755
28756 }).call(this,require("buffer").Buffer)
28757 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
28758 (function (Buffer){
28759 'use strict';
28760 var inherits = require('inherits')
28761 var md5 = require('./md5')
28762 var rmd160 = require('ripemd160')
28763 var sha = require('sha.js')
28764
28765 var Base = require('cipher-base')
28766
28767 function HashNoConstructor(hash) {
28768 Base.call(this, 'digest')
28769
28770 this._hash = hash
28771 this.buffers = []
28772 }
28773
28774 inherits(HashNoConstructor, Base)
28775
28776 HashNoConstructor.prototype._update = function (data) {
28777 this.buffers.push(data)
28778 }
28779
28780 HashNoConstructor.prototype._final = function () {
28781 var buf = Buffer.concat(this.buffers)
28782 var r = this._hash(buf)
28783 this.buffers = null
28784
28785 return r
28786 }
28787
28788 function Hash(hash) {
28789 Base.call(this, 'digest')
28790
28791 this._hash = hash
28792 }
28793
28794 inherits(Hash, Base)
28795
28796 Hash.prototype._update = function (data) {
28797 this._hash.update(data)
28798 }
28799
28800 Hash.prototype._final = function () {
28801 return this._hash.digest()
28802 }
28803
28804 module.exports = function createHash (alg) {
28805 alg = alg.toLowerCase()
28806 if ('md5' === alg) return new HashNoConstructor(md5)
28807 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
28808
28809 return new Hash(sha(alg))
28810 }
28811
28812 }).call(this,require("buffer").Buffer)
28813 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
28814 (function (Buffer){
28815 'use strict';
28816 var intSize = 4;
28817 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
28818 var chrsz = 8;
28819
28820 function toArray(buf, bigEndian) {
28821 if ((buf.length % intSize) !== 0) {
28822 var len = buf.length + (intSize - (buf.length % intSize));
28823 buf = Buffer.concat([buf, zeroBuffer], len);
28824 }
28825
28826 var arr = [];
28827 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
28828 for (var i = 0; i < buf.length; i += intSize) {
28829 arr.push(fn.call(buf, i));
28830 }
28831 return arr;
28832 }
28833
28834 function toBuffer(arr, size, bigEndian) {
28835 var buf = new Buffer(size);
28836 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
28837 for (var i = 0; i < arr.length; i++) {
28838 fn.call(buf, arr[i], i * 4, true);
28839 }
28840 return buf;
28841 }
28842
28843 function hash(buf, fn, hashSize, bigEndian) {
28844 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
28845 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
28846 return toBuffer(arr, hashSize, bigEndian);
28847 }
28848 exports.hash = hash;
28849 }).call(this,require("buffer").Buffer)
28850 },{"buffer":5}],38:[function(require,module,exports){
28851 'use strict';
28852 /*
28853 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
28854 * Digest Algorithm, as defined in RFC 1321.
28855 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
28856 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
28857 * Distributed under the BSD License
28858 * See http://pajhome.org.uk/crypt/md5 for more info.
28859 */
28860
28861 var helpers = require('./helpers');
28862
28863 /*
28864 * Calculate the MD5 of an array of little-endian words, and a bit length
28865 */
28866 function core_md5(x, len)
28867 {
28868 /* append padding */
28869 x[len >> 5] |= 0x80 << ((len) % 32);
28870 x[(((len + 64) >>> 9) << 4) + 14] = len;
28871
28872 var a = 1732584193;
28873 var b = -271733879;
28874 var c = -1732584194;
28875 var d = 271733878;
28876
28877 for(var i = 0; i < x.length; i += 16)
28878 {
28879 var olda = a;
28880 var oldb = b;
28881 var oldc = c;
28882 var oldd = d;
28883
28884 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
28885 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
28886 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
28887 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
28888 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
28889 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
28890 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
28891 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
28892 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
28893 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
28894 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
28895 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
28896 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
28897 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
28898 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
28899 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
28900
28901 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
28902 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
28903 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
28904 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
28905 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
28906 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
28907 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
28908 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
28909 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
28910 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
28911 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
28912 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
28913 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
28914 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
28915 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
28916 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
28917
28918 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
28919 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
28920 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
28921 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
28922 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
28923 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
28924 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
28925 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
28926 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
28927 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
28928 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
28929 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
28930 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
28931 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
28932 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
28933 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
28934
28935 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
28936 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
28937 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
28938 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
28939 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
28940 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
28941 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
28942 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
28943 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
28944 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
28945 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
28946 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
28947 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
28948 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
28949 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
28950 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
28951
28952 a = safe_add(a, olda);
28953 b = safe_add(b, oldb);
28954 c = safe_add(c, oldc);
28955 d = safe_add(d, oldd);
28956 }
28957 return Array(a, b, c, d);
28958
28959 }
28960
28961 /*
28962 * These functions implement the four basic operations the algorithm uses.
28963 */
28964 function md5_cmn(q, a, b, x, s, t)
28965 {
28966 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
28967 }
28968 function md5_ff(a, b, c, d, x, s, t)
28969 {
28970 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
28971 }
28972 function md5_gg(a, b, c, d, x, s, t)
28973 {
28974 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
28975 }
28976 function md5_hh(a, b, c, d, x, s, t)
28977 {
28978 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
28979 }
28980 function md5_ii(a, b, c, d, x, s, t)
28981 {
28982 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
28983 }
28984
28985 /*
28986 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
28987 * to work around bugs in some JS interpreters.
28988 */
28989 function safe_add(x, y)
28990 {
28991 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
28992 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
28993 return (msw << 16) | (lsw & 0xFFFF);
28994 }
28995
28996 /*
28997 * Bitwise rotate a 32-bit number to the left.
28998 */
28999 function bit_rol(num, cnt)
29000 {
29001 return (num << cnt) | (num >>> (32 - cnt));
29002 }
29003
29004 module.exports = function md5(buf) {
29005 return helpers.hash(buf, core_md5, 16);
29006 };
29007 },{"./helpers":37}],39:[function(require,module,exports){
29008 'use strict';
29009
29010 var elliptic = exports;
29011
29012 elliptic.version = require('../package.json').version;
29013 elliptic.utils = require('./elliptic/utils');
29014 elliptic.rand = require('brorand');
29015 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
29016 elliptic.curve = require('./elliptic/curve');
29017 elliptic.curves = require('./elliptic/curves');
29018
29019 // Protocols
29020 elliptic.ec = require('./elliptic/ec');
29021 elliptic.eddsa = require('./elliptic/eddsa');
29022
29023 },{"../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){
29024 'use strict';
29025
29026 var BN = require('bn.js');
29027 var elliptic = require('../../elliptic');
29028 var utils = elliptic.utils;
29029 var getNAF = utils.getNAF;
29030 var getJSF = utils.getJSF;
29031 var assert = utils.assert;
29032
29033 function BaseCurve(type, conf) {
29034 this.type = type;
29035 this.p = new BN(conf.p, 16);
29036
29037 // Use Montgomery, when there is no fast reduction for the prime
29038 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
29039
29040 // Useful for many curves
29041 this.zero = new BN(0).toRed(this.red);
29042 this.one = new BN(1).toRed(this.red);
29043 this.two = new BN(2).toRed(this.red);
29044
29045 // Curve configuration, optional
29046 this.n = conf.n && new BN(conf.n, 16);
29047 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
29048
29049 // Temporary arrays
29050 this._wnafT1 = new Array(4);
29051 this._wnafT2 = new Array(4);
29052 this._wnafT3 = new Array(4);
29053 this._wnafT4 = new Array(4);
29054
29055 // Generalized Greg Maxwell's trick
29056 var adjustCount = this.n && this.p.div(this.n);
29057 if (!adjustCount || adjustCount.cmpn(100) > 0) {
29058 this.redN = null;
29059 } else {
29060 this._maxwellTrick = true;
29061 this.redN = this.n.toRed(this.red);
29062 }
29063 }
29064 module.exports = BaseCurve;
29065
29066 BaseCurve.prototype.point = function point() {
29067 throw new Error('Not implemented');
29068 };
29069
29070 BaseCurve.prototype.validate = function validate() {
29071 throw new Error('Not implemented');
29072 };
29073
29074 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
29075 assert(p.precomputed);
29076 var doubles = p._getDoubles();
29077
29078 var naf = getNAF(k, 1);
29079 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
29080 I /= 3;
29081
29082 // Translate into more windowed form
29083 var repr = [];
29084 for (var j = 0; j < naf.length; j += doubles.step) {
29085 var nafW = 0;
29086 for (var k = j + doubles.step - 1; k >= j; k--)
29087 nafW = (nafW << 1) + naf[k];
29088 repr.push(nafW);
29089 }
29090
29091 var a = this.jpoint(null, null, null);
29092 var b = this.jpoint(null, null, null);
29093 for (var i = I; i > 0; i--) {
29094 for (var j = 0; j < repr.length; j++) {
29095 var nafW = repr[j];
29096 if (nafW === i)
29097 b = b.mixedAdd(doubles.points[j]);
29098 else if (nafW === -i)
29099 b = b.mixedAdd(doubles.points[j].neg());
29100 }
29101 a = a.add(b);
29102 }
29103 return a.toP();
29104 };
29105
29106 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
29107 var w = 4;
29108
29109 // Precompute window
29110 var nafPoints = p._getNAFPoints(w);
29111 w = nafPoints.wnd;
29112 var wnd = nafPoints.points;
29113
29114 // Get NAF form
29115 var naf = getNAF(k, w);
29116
29117 // Add `this`*(N+1) for every w-NAF index
29118 var acc = this.jpoint(null, null, null);
29119 for (var i = naf.length - 1; i >= 0; i--) {
29120 // Count zeroes
29121 for (var k = 0; i >= 0 && naf[i] === 0; i--)
29122 k++;
29123 if (i >= 0)
29124 k++;
29125 acc = acc.dblp(k);
29126
29127 if (i < 0)
29128 break;
29129 var z = naf[i];
29130 assert(z !== 0);
29131 if (p.type === 'affine') {
29132 // J +- P
29133 if (z > 0)
29134 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
29135 else
29136 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
29137 } else {
29138 // J +- J
29139 if (z > 0)
29140 acc = acc.add(wnd[(z - 1) >> 1]);
29141 else
29142 acc = acc.add(wnd[(-z - 1) >> 1].neg());
29143 }
29144 }
29145 return p.type === 'affine' ? acc.toP() : acc;
29146 };
29147
29148 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
29149 points,
29150 coeffs,
29151 len,
29152 jacobianResult) {
29153 var wndWidth = this._wnafT1;
29154 var wnd = this._wnafT2;
29155 var naf = this._wnafT3;
29156
29157 // Fill all arrays
29158 var max = 0;
29159 for (var i = 0; i < len; i++) {
29160 var p = points[i];
29161 var nafPoints = p._getNAFPoints(defW);
29162 wndWidth[i] = nafPoints.wnd;
29163 wnd[i] = nafPoints.points;
29164 }
29165
29166 // Comb small window NAFs
29167 for (var i = len - 1; i >= 1; i -= 2) {
29168 var a = i - 1;
29169 var b = i;
29170 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
29171 naf[a] = getNAF(coeffs[a], wndWidth[a]);
29172 naf[b] = getNAF(coeffs[b], wndWidth[b]);
29173 max = Math.max(naf[a].length, max);
29174 max = Math.max(naf[b].length, max);
29175 continue;
29176 }
29177
29178 var comb = [
29179 points[a], /* 1 */
29180 null, /* 3 */
29181 null, /* 5 */
29182 points[b] /* 7 */
29183 ];
29184
29185 // Try to avoid Projective points, if possible
29186 if (points[a].y.cmp(points[b].y) === 0) {
29187 comb[1] = points[a].add(points[b]);
29188 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
29189 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
29190 comb[1] = points[a].toJ().mixedAdd(points[b]);
29191 comb[2] = points[a].add(points[b].neg());
29192 } else {
29193 comb[1] = points[a].toJ().mixedAdd(points[b]);
29194 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
29195 }
29196
29197 var index = [
29198 -3, /* -1 -1 */
29199 -1, /* -1 0 */
29200 -5, /* -1 1 */
29201 -7, /* 0 -1 */
29202 0, /* 0 0 */
29203 7, /* 0 1 */
29204 5, /* 1 -1 */
29205 1, /* 1 0 */
29206 3 /* 1 1 */
29207 ];
29208
29209 var jsf = getJSF(coeffs[a], coeffs[b]);
29210 max = Math.max(jsf[0].length, max);
29211 naf[a] = new Array(max);
29212 naf[b] = new Array(max);
29213 for (var j = 0; j < max; j++) {
29214 var ja = jsf[0][j] | 0;
29215 var jb = jsf[1][j] | 0;
29216
29217 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
29218 naf[b][j] = 0;
29219 wnd[a] = comb;
29220 }
29221 }
29222
29223 var acc = this.jpoint(null, null, null);
29224 var tmp = this._wnafT4;
29225 for (var i = max; i >= 0; i--) {
29226 var k = 0;
29227
29228 while (i >= 0) {
29229 var zero = true;
29230 for (var j = 0; j < len; j++) {
29231 tmp[j] = naf[j][i] | 0;
29232 if (tmp[j] !== 0)
29233 zero = false;
29234 }
29235 if (!zero)
29236 break;
29237 k++;
29238 i--;
29239 }
29240 if (i >= 0)
29241 k++;
29242 acc = acc.dblp(k);
29243 if (i < 0)
29244 break;
29245
29246 for (var j = 0; j < len; j++) {
29247 var z = tmp[j];
29248 var p;
29249 if (z === 0)
29250 continue;
29251 else if (z > 0)
29252 p = wnd[j][(z - 1) >> 1];
29253 else if (z < 0)
29254 p = wnd[j][(-z - 1) >> 1].neg();
29255
29256 if (p.type === 'affine')
29257 acc = acc.mixedAdd(p);
29258 else
29259 acc = acc.add(p);
29260 }
29261 }
29262 // Zeroify references
29263 for (var i = 0; i < len; i++)
29264 wnd[i] = null;
29265
29266 if (jacobianResult)
29267 return acc;
29268 else
29269 return acc.toP();
29270 };
29271
29272 function BasePoint(curve, type) {
29273 this.curve = curve;
29274 this.type = type;
29275 this.precomputed = null;
29276 }
29277 BaseCurve.BasePoint = BasePoint;
29278
29279 BasePoint.prototype.eq = function eq(/*other*/) {
29280 throw new Error('Not implemented');
29281 };
29282
29283 BasePoint.prototype.validate = function validate() {
29284 return this.curve.validate(this);
29285 };
29286
29287 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29288 bytes = utils.toArray(bytes, enc);
29289
29290 var len = this.p.byteLength();
29291
29292 // uncompressed, hybrid-odd, hybrid-even
29293 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
29294 bytes.length - 1 === 2 * len) {
29295 if (bytes[0] === 0x06)
29296 assert(bytes[bytes.length - 1] % 2 === 0);
29297 else if (bytes[0] === 0x07)
29298 assert(bytes[bytes.length - 1] % 2 === 1);
29299
29300 var res = this.point(bytes.slice(1, 1 + len),
29301 bytes.slice(1 + len, 1 + 2 * len));
29302
29303 return res;
29304 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
29305 bytes.length - 1 === len) {
29306 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
29307 }
29308 throw new Error('Unknown point format');
29309 };
29310
29311 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
29312 return this.encode(enc, true);
29313 };
29314
29315 BasePoint.prototype._encode = function _encode(compact) {
29316 var len = this.curve.p.byteLength();
29317 var x = this.getX().toArray('be', len);
29318
29319 if (compact)
29320 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
29321
29322 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
29323 };
29324
29325 BasePoint.prototype.encode = function encode(enc, compact) {
29326 return utils.encode(this._encode(compact), enc);
29327 };
29328
29329 BasePoint.prototype.precompute = function precompute(power) {
29330 if (this.precomputed)
29331 return this;
29332
29333 var precomputed = {
29334 doubles: null,
29335 naf: null,
29336 beta: null
29337 };
29338 precomputed.naf = this._getNAFPoints(8);
29339 precomputed.doubles = this._getDoubles(4, power);
29340 precomputed.beta = this._getBeta();
29341 this.precomputed = precomputed;
29342
29343 return this;
29344 };
29345
29346 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
29347 if (!this.precomputed)
29348 return false;
29349
29350 var doubles = this.precomputed.doubles;
29351 if (!doubles)
29352 return false;
29353
29354 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
29355 };
29356
29357 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
29358 if (this.precomputed && this.precomputed.doubles)
29359 return this.precomputed.doubles;
29360
29361 var doubles = [ this ];
29362 var acc = this;
29363 for (var i = 0; i < power; i += step) {
29364 for (var j = 0; j < step; j++)
29365 acc = acc.dbl();
29366 doubles.push(acc);
29367 }
29368 return {
29369 step: step,
29370 points: doubles
29371 };
29372 };
29373
29374 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
29375 if (this.precomputed && this.precomputed.naf)
29376 return this.precomputed.naf;
29377
29378 var res = [ this ];
29379 var max = (1 << wnd) - 1;
29380 var dbl = max === 1 ? null : this.dbl();
29381 for (var i = 1; i < max; i++)
29382 res[i] = res[i - 1].add(dbl);
29383 return {
29384 wnd: wnd,
29385 points: res
29386 };
29387 };
29388
29389 BasePoint.prototype._getBeta = function _getBeta() {
29390 return null;
29391 };
29392
29393 BasePoint.prototype.dblp = function dblp(k) {
29394 var r = this;
29395 for (var i = 0; i < k; i++)
29396 r = r.dbl();
29397 return r;
29398 };
29399
29400 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
29401 'use strict';
29402
29403 var curve = require('../curve');
29404 var elliptic = require('../../elliptic');
29405 var BN = require('bn.js');
29406 var inherits = require('inherits');
29407 var Base = curve.base;
29408
29409 var assert = elliptic.utils.assert;
29410
29411 function EdwardsCurve(conf) {
29412 // NOTE: Important as we are creating point in Base.call()
29413 this.twisted = (conf.a | 0) !== 1;
29414 this.mOneA = this.twisted && (conf.a | 0) === -1;
29415 this.extended = this.mOneA;
29416
29417 Base.call(this, 'edwards', conf);
29418
29419 this.a = new BN(conf.a, 16).umod(this.red.m);
29420 this.a = this.a.toRed(this.red);
29421 this.c = new BN(conf.c, 16).toRed(this.red);
29422 this.c2 = this.c.redSqr();
29423 this.d = new BN(conf.d, 16).toRed(this.red);
29424 this.dd = this.d.redAdd(this.d);
29425
29426 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
29427 this.oneC = (conf.c | 0) === 1;
29428 }
29429 inherits(EdwardsCurve, Base);
29430 module.exports = EdwardsCurve;
29431
29432 EdwardsCurve.prototype._mulA = function _mulA(num) {
29433 if (this.mOneA)
29434 return num.redNeg();
29435 else
29436 return this.a.redMul(num);
29437 };
29438
29439 EdwardsCurve.prototype._mulC = function _mulC(num) {
29440 if (this.oneC)
29441 return num;
29442 else
29443 return this.c.redMul(num);
29444 };
29445
29446 // Just for compatibility with Short curve
29447 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
29448 return this.point(x, y, z, t);
29449 };
29450
29451 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
29452 x = new BN(x, 16);
29453 if (!x.red)
29454 x = x.toRed(this.red);
29455
29456 var x2 = x.redSqr();
29457 var rhs = this.c2.redSub(this.a.redMul(x2));
29458 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
29459
29460 var y2 = rhs.redMul(lhs.redInvm());
29461 var y = y2.redSqrt();
29462 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29463 throw new Error('invalid point');
29464
29465 var isOdd = y.fromRed().isOdd();
29466 if (odd && !isOdd || !odd && isOdd)
29467 y = y.redNeg();
29468
29469 return this.point(x, y);
29470 };
29471
29472 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
29473 y = new BN(y, 16);
29474 if (!y.red)
29475 y = y.toRed(this.red);
29476
29477 // x^2 = (y^2 - 1) / (d y^2 + 1)
29478 var y2 = y.redSqr();
29479 var lhs = y2.redSub(this.one);
29480 var rhs = y2.redMul(this.d).redAdd(this.one);
29481 var x2 = lhs.redMul(rhs.redInvm());
29482
29483 if (x2.cmp(this.zero) === 0) {
29484 if (odd)
29485 throw new Error('invalid point');
29486 else
29487 return this.point(this.zero, y);
29488 }
29489
29490 var x = x2.redSqrt();
29491 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
29492 throw new Error('invalid point');
29493
29494 if (x.isOdd() !== odd)
29495 x = x.redNeg();
29496
29497 return this.point(x, y);
29498 };
29499
29500 EdwardsCurve.prototype.validate = function validate(point) {
29501 if (point.isInfinity())
29502 return true;
29503
29504 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
29505 point.normalize();
29506
29507 var x2 = point.x.redSqr();
29508 var y2 = point.y.redSqr();
29509 var lhs = x2.redMul(this.a).redAdd(y2);
29510 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
29511
29512 return lhs.cmp(rhs) === 0;
29513 };
29514
29515 function Point(curve, x, y, z, t) {
29516 Base.BasePoint.call(this, curve, 'projective');
29517 if (x === null && y === null && z === null) {
29518 this.x = this.curve.zero;
29519 this.y = this.curve.one;
29520 this.z = this.curve.one;
29521 this.t = this.curve.zero;
29522 this.zOne = true;
29523 } else {
29524 this.x = new BN(x, 16);
29525 this.y = new BN(y, 16);
29526 this.z = z ? new BN(z, 16) : this.curve.one;
29527 this.t = t && new BN(t, 16);
29528 if (!this.x.red)
29529 this.x = this.x.toRed(this.curve.red);
29530 if (!this.y.red)
29531 this.y = this.y.toRed(this.curve.red);
29532 if (!this.z.red)
29533 this.z = this.z.toRed(this.curve.red);
29534 if (this.t && !this.t.red)
29535 this.t = this.t.toRed(this.curve.red);
29536 this.zOne = this.z === this.curve.one;
29537
29538 // Use extended coordinates
29539 if (this.curve.extended && !this.t) {
29540 this.t = this.x.redMul(this.y);
29541 if (!this.zOne)
29542 this.t = this.t.redMul(this.z.redInvm());
29543 }
29544 }
29545 }
29546 inherits(Point, Base.BasePoint);
29547
29548 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29549 return Point.fromJSON(this, obj);
29550 };
29551
29552 EdwardsCurve.prototype.point = function point(x, y, z, t) {
29553 return new Point(this, x, y, z, t);
29554 };
29555
29556 Point.fromJSON = function fromJSON(curve, obj) {
29557 return new Point(curve, obj[0], obj[1], obj[2]);
29558 };
29559
29560 Point.prototype.inspect = function inspect() {
29561 if (this.isInfinity())
29562 return '<EC Point Infinity>';
29563 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29564 ' y: ' + this.y.fromRed().toString(16, 2) +
29565 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29566 };
29567
29568 Point.prototype.isInfinity = function isInfinity() {
29569 // XXX This code assumes that zero is always zero in red
29570 return this.x.cmpn(0) === 0 &&
29571 this.y.cmp(this.z) === 0;
29572 };
29573
29574 Point.prototype._extDbl = function _extDbl() {
29575 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29576 // #doubling-dbl-2008-hwcd
29577 // 4M + 4S
29578
29579 // A = X1^2
29580 var a = this.x.redSqr();
29581 // B = Y1^2
29582 var b = this.y.redSqr();
29583 // C = 2 * Z1^2
29584 var c = this.z.redSqr();
29585 c = c.redIAdd(c);
29586 // D = a * A
29587 var d = this.curve._mulA(a);
29588 // E = (X1 + Y1)^2 - A - B
29589 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
29590 // G = D + B
29591 var g = d.redAdd(b);
29592 // F = G - C
29593 var f = g.redSub(c);
29594 // H = D - B
29595 var h = d.redSub(b);
29596 // X3 = E * F
29597 var nx = e.redMul(f);
29598 // Y3 = G * H
29599 var ny = g.redMul(h);
29600 // T3 = E * H
29601 var nt = e.redMul(h);
29602 // Z3 = F * G
29603 var nz = f.redMul(g);
29604 return this.curve.point(nx, ny, nz, nt);
29605 };
29606
29607 Point.prototype._projDbl = function _projDbl() {
29608 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29609 // #doubling-dbl-2008-bbjlp
29610 // #doubling-dbl-2007-bl
29611 // and others
29612 // Generally 3M + 4S or 2M + 4S
29613
29614 // B = (X1 + Y1)^2
29615 var b = this.x.redAdd(this.y).redSqr();
29616 // C = X1^2
29617 var c = this.x.redSqr();
29618 // D = Y1^2
29619 var d = this.y.redSqr();
29620
29621 var nx;
29622 var ny;
29623 var nz;
29624 if (this.curve.twisted) {
29625 // E = a * C
29626 var e = this.curve._mulA(c);
29627 // F = E + D
29628 var f = e.redAdd(d);
29629 if (this.zOne) {
29630 // X3 = (B - C - D) * (F - 2)
29631 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
29632 // Y3 = F * (E - D)
29633 ny = f.redMul(e.redSub(d));
29634 // Z3 = F^2 - 2 * F
29635 nz = f.redSqr().redSub(f).redSub(f);
29636 } else {
29637 // H = Z1^2
29638 var h = this.z.redSqr();
29639 // J = F - 2 * H
29640 var j = f.redSub(h).redISub(h);
29641 // X3 = (B-C-D)*J
29642 nx = b.redSub(c).redISub(d).redMul(j);
29643 // Y3 = F * (E - D)
29644 ny = f.redMul(e.redSub(d));
29645 // Z3 = F * J
29646 nz = f.redMul(j);
29647 }
29648 } else {
29649 // E = C + D
29650 var e = c.redAdd(d);
29651 // H = (c * Z1)^2
29652 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
29653 // J = E - 2 * H
29654 var j = e.redSub(h).redSub(h);
29655 // X3 = c * (B - E) * J
29656 nx = this.curve._mulC(b.redISub(e)).redMul(j);
29657 // Y3 = c * E * (C - D)
29658 ny = this.curve._mulC(e).redMul(c.redISub(d));
29659 // Z3 = E * J
29660 nz = e.redMul(j);
29661 }
29662 return this.curve.point(nx, ny, nz);
29663 };
29664
29665 Point.prototype.dbl = function dbl() {
29666 if (this.isInfinity())
29667 return this;
29668
29669 // Double in extended coordinates
29670 if (this.curve.extended)
29671 return this._extDbl();
29672 else
29673 return this._projDbl();
29674 };
29675
29676 Point.prototype._extAdd = function _extAdd(p) {
29677 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29678 // #addition-add-2008-hwcd-3
29679 // 8M
29680
29681 // A = (Y1 - X1) * (Y2 - X2)
29682 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
29683 // B = (Y1 + X1) * (Y2 + X2)
29684 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
29685 // C = T1 * k * T2
29686 var c = this.t.redMul(this.curve.dd).redMul(p.t);
29687 // D = Z1 * 2 * Z2
29688 var d = this.z.redMul(p.z.redAdd(p.z));
29689 // E = B - A
29690 var e = b.redSub(a);
29691 // F = D - C
29692 var f = d.redSub(c);
29693 // G = D + C
29694 var g = d.redAdd(c);
29695 // H = B + A
29696 var h = b.redAdd(a);
29697 // X3 = E * F
29698 var nx = e.redMul(f);
29699 // Y3 = G * H
29700 var ny = g.redMul(h);
29701 // T3 = E * H
29702 var nt = e.redMul(h);
29703 // Z3 = F * G
29704 var nz = f.redMul(g);
29705 return this.curve.point(nx, ny, nz, nt);
29706 };
29707
29708 Point.prototype._projAdd = function _projAdd(p) {
29709 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29710 // #addition-add-2008-bbjlp
29711 // #addition-add-2007-bl
29712 // 10M + 1S
29713
29714 // A = Z1 * Z2
29715 var a = this.z.redMul(p.z);
29716 // B = A^2
29717 var b = a.redSqr();
29718 // C = X1 * X2
29719 var c = this.x.redMul(p.x);
29720 // D = Y1 * Y2
29721 var d = this.y.redMul(p.y);
29722 // E = d * C * D
29723 var e = this.curve.d.redMul(c).redMul(d);
29724 // F = B - E
29725 var f = b.redSub(e);
29726 // G = B + E
29727 var g = b.redAdd(e);
29728 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
29729 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
29730 var nx = a.redMul(f).redMul(tmp);
29731 var ny;
29732 var nz;
29733 if (this.curve.twisted) {
29734 // Y3 = A * G * (D - a * C)
29735 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
29736 // Z3 = F * G
29737 nz = f.redMul(g);
29738 } else {
29739 // Y3 = A * G * (D - C)
29740 ny = a.redMul(g).redMul(d.redSub(c));
29741 // Z3 = c * F * G
29742 nz = this.curve._mulC(f).redMul(g);
29743 }
29744 return this.curve.point(nx, ny, nz);
29745 };
29746
29747 Point.prototype.add = function add(p) {
29748 if (this.isInfinity())
29749 return p;
29750 if (p.isInfinity())
29751 return this;
29752
29753 if (this.curve.extended)
29754 return this._extAdd(p);
29755 else
29756 return this._projAdd(p);
29757 };
29758
29759 Point.prototype.mul = function mul(k) {
29760 if (this._hasDoubles(k))
29761 return this.curve._fixedNafMul(this, k);
29762 else
29763 return this.curve._wnafMul(this, k);
29764 };
29765
29766 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
29767 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
29768 };
29769
29770 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
29771 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
29772 };
29773
29774 Point.prototype.normalize = function normalize() {
29775 if (this.zOne)
29776 return this;
29777
29778 // Normalize coordinates
29779 var zi = this.z.redInvm();
29780 this.x = this.x.redMul(zi);
29781 this.y = this.y.redMul(zi);
29782 if (this.t)
29783 this.t = this.t.redMul(zi);
29784 this.z = this.curve.one;
29785 this.zOne = true;
29786 return this;
29787 };
29788
29789 Point.prototype.neg = function neg() {
29790 return this.curve.point(this.x.redNeg(),
29791 this.y,
29792 this.z,
29793 this.t && this.t.redNeg());
29794 };
29795
29796 Point.prototype.getX = function getX() {
29797 this.normalize();
29798 return this.x.fromRed();
29799 };
29800
29801 Point.prototype.getY = function getY() {
29802 this.normalize();
29803 return this.y.fromRed();
29804 };
29805
29806 Point.prototype.eq = function eq(other) {
29807 return this === other ||
29808 this.getX().cmp(other.getX()) === 0 &&
29809 this.getY().cmp(other.getY()) === 0;
29810 };
29811
29812 Point.prototype.eqXToP = function eqXToP(x) {
29813 var rx = x.toRed(this.curve.red).redMul(this.z);
29814 if (this.x.cmp(rx) === 0)
29815 return true;
29816
29817 var xc = x.clone();
29818 var t = this.curve.redN.redMul(this.z);
29819 for (;;) {
29820 xc.iadd(this.curve.n);
29821 if (xc.cmp(this.curve.p) >= 0)
29822 return false;
29823
29824 rx.redIAdd(t);
29825 if (this.x.cmp(rx) === 0)
29826 return true;
29827 }
29828 return false;
29829 };
29830
29831 // Compatibility with BaseCurve
29832 Point.prototype.toP = Point.prototype.normalize;
29833 Point.prototype.mixedAdd = Point.prototype.add;
29834
29835 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
29836 'use strict';
29837
29838 var curve = exports;
29839
29840 curve.base = require('./base');
29841 curve.short = require('./short');
29842 curve.mont = require('./mont');
29843 curve.edwards = require('./edwards');
29844
29845 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
29846 'use strict';
29847
29848 var curve = require('../curve');
29849 var BN = require('bn.js');
29850 var inherits = require('inherits');
29851 var Base = curve.base;
29852
29853 var elliptic = require('../../elliptic');
29854 var utils = elliptic.utils;
29855
29856 function MontCurve(conf) {
29857 Base.call(this, 'mont', conf);
29858
29859 this.a = new BN(conf.a, 16).toRed(this.red);
29860 this.b = new BN(conf.b, 16).toRed(this.red);
29861 this.i4 = new BN(4).toRed(this.red).redInvm();
29862 this.two = new BN(2).toRed(this.red);
29863 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
29864 }
29865 inherits(MontCurve, Base);
29866 module.exports = MontCurve;
29867
29868 MontCurve.prototype.validate = function validate(point) {
29869 var x = point.normalize().x;
29870 var x2 = x.redSqr();
29871 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
29872 var y = rhs.redSqrt();
29873
29874 return y.redSqr().cmp(rhs) === 0;
29875 };
29876
29877 function Point(curve, x, z) {
29878 Base.BasePoint.call(this, curve, 'projective');
29879 if (x === null && z === null) {
29880 this.x = this.curve.one;
29881 this.z = this.curve.zero;
29882 } else {
29883 this.x = new BN(x, 16);
29884 this.z = new BN(z, 16);
29885 if (!this.x.red)
29886 this.x = this.x.toRed(this.curve.red);
29887 if (!this.z.red)
29888 this.z = this.z.toRed(this.curve.red);
29889 }
29890 }
29891 inherits(Point, Base.BasePoint);
29892
29893 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29894 return this.point(utils.toArray(bytes, enc), 1);
29895 };
29896
29897 MontCurve.prototype.point = function point(x, z) {
29898 return new Point(this, x, z);
29899 };
29900
29901 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29902 return Point.fromJSON(this, obj);
29903 };
29904
29905 Point.prototype.precompute = function precompute() {
29906 // No-op
29907 };
29908
29909 Point.prototype._encode = function _encode() {
29910 return this.getX().toArray('be', this.curve.p.byteLength());
29911 };
29912
29913 Point.fromJSON = function fromJSON(curve, obj) {
29914 return new Point(curve, obj[0], obj[1] || curve.one);
29915 };
29916
29917 Point.prototype.inspect = function inspect() {
29918 if (this.isInfinity())
29919 return '<EC Point Infinity>';
29920 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29921 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29922 };
29923
29924 Point.prototype.isInfinity = function isInfinity() {
29925 // XXX This code assumes that zero is always zero in red
29926 return this.z.cmpn(0) === 0;
29927 };
29928
29929 Point.prototype.dbl = function dbl() {
29930 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
29931 // 2M + 2S + 4A
29932
29933 // A = X1 + Z1
29934 var a = this.x.redAdd(this.z);
29935 // AA = A^2
29936 var aa = a.redSqr();
29937 // B = X1 - Z1
29938 var b = this.x.redSub(this.z);
29939 // BB = B^2
29940 var bb = b.redSqr();
29941 // C = AA - BB
29942 var c = aa.redSub(bb);
29943 // X3 = AA * BB
29944 var nx = aa.redMul(bb);
29945 // Z3 = C * (BB + A24 * C)
29946 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
29947 return this.curve.point(nx, nz);
29948 };
29949
29950 Point.prototype.add = function add() {
29951 throw new Error('Not supported on Montgomery curve');
29952 };
29953
29954 Point.prototype.diffAdd = function diffAdd(p, diff) {
29955 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
29956 // 4M + 2S + 6A
29957
29958 // A = X2 + Z2
29959 var a = this.x.redAdd(this.z);
29960 // B = X2 - Z2
29961 var b = this.x.redSub(this.z);
29962 // C = X3 + Z3
29963 var c = p.x.redAdd(p.z);
29964 // D = X3 - Z3
29965 var d = p.x.redSub(p.z);
29966 // DA = D * A
29967 var da = d.redMul(a);
29968 // CB = C * B
29969 var cb = c.redMul(b);
29970 // X5 = Z1 * (DA + CB)^2
29971 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
29972 // Z5 = X1 * (DA - CB)^2
29973 var nz = diff.x.redMul(da.redISub(cb).redSqr());
29974 return this.curve.point(nx, nz);
29975 };
29976
29977 Point.prototype.mul = function mul(k) {
29978 var t = k.clone();
29979 var a = this; // (N / 2) * Q + Q
29980 var b = this.curve.point(null, null); // (N / 2) * Q
29981 var c = this; // Q
29982
29983 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
29984 bits.push(t.andln(1));
29985
29986 for (var i = bits.length - 1; i >= 0; i--) {
29987 if (bits[i] === 0) {
29988 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
29989 a = a.diffAdd(b, c);
29990 // N * Q = 2 * ((N / 2) * Q + Q))
29991 b = b.dbl();
29992 } else {
29993 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
29994 b = a.diffAdd(b, c);
29995 // N * Q + Q = 2 * ((N / 2) * Q + Q)
29996 a = a.dbl();
29997 }
29998 }
29999 return b;
30000 };
30001
30002 Point.prototype.mulAdd = function mulAdd() {
30003 throw new Error('Not supported on Montgomery curve');
30004 };
30005
30006 Point.prototype.jumlAdd = function jumlAdd() {
30007 throw new Error('Not supported on Montgomery curve');
30008 };
30009
30010 Point.prototype.eq = function eq(other) {
30011 return this.getX().cmp(other.getX()) === 0;
30012 };
30013
30014 Point.prototype.normalize = function normalize() {
30015 this.x = this.x.redMul(this.z.redInvm());
30016 this.z = this.curve.one;
30017 return this;
30018 };
30019
30020 Point.prototype.getX = function getX() {
30021 // Normalize coordinates
30022 this.normalize();
30023
30024 return this.x.fromRed();
30025 };
30026
30027 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
30028 'use strict';
30029
30030 var curve = require('../curve');
30031 var elliptic = require('../../elliptic');
30032 var BN = require('bn.js');
30033 var inherits = require('inherits');
30034 var Base = curve.base;
30035
30036 var assert = elliptic.utils.assert;
30037
30038 function ShortCurve(conf) {
30039 Base.call(this, 'short', conf);
30040
30041 this.a = new BN(conf.a, 16).toRed(this.red);
30042 this.b = new BN(conf.b, 16).toRed(this.red);
30043 this.tinv = this.two.redInvm();
30044
30045 this.zeroA = this.a.fromRed().cmpn(0) === 0;
30046 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
30047
30048 // If the curve is endomorphic, precalculate beta and lambda
30049 this.endo = this._getEndomorphism(conf);
30050 this._endoWnafT1 = new Array(4);
30051 this._endoWnafT2 = new Array(4);
30052 }
30053 inherits(ShortCurve, Base);
30054 module.exports = ShortCurve;
30055
30056 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
30057 // No efficient endomorphism
30058 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
30059 return;
30060
30061 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
30062 var beta;
30063 var lambda;
30064 if (conf.beta) {
30065 beta = new BN(conf.beta, 16).toRed(this.red);
30066 } else {
30067 var betas = this._getEndoRoots(this.p);
30068 // Choose the smallest beta
30069 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
30070 beta = beta.toRed(this.red);
30071 }
30072 if (conf.lambda) {
30073 lambda = new BN(conf.lambda, 16);
30074 } else {
30075 // Choose the lambda that is matching selected beta
30076 var lambdas = this._getEndoRoots(this.n);
30077 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
30078 lambda = lambdas[0];
30079 } else {
30080 lambda = lambdas[1];
30081 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
30082 }
30083 }
30084
30085 // Get basis vectors, used for balanced length-two representation
30086 var basis;
30087 if (conf.basis) {
30088 basis = conf.basis.map(function(vec) {
30089 return {
30090 a: new BN(vec.a, 16),
30091 b: new BN(vec.b, 16)
30092 };
30093 });
30094 } else {
30095 basis = this._getEndoBasis(lambda);
30096 }
30097
30098 return {
30099 beta: beta,
30100 lambda: lambda,
30101 basis: basis
30102 };
30103 };
30104
30105 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
30106 // Find roots of for x^2 + x + 1 in F
30107 // Root = (-1 +- Sqrt(-3)) / 2
30108 //
30109 var red = num === this.p ? this.red : BN.mont(num);
30110 var tinv = new BN(2).toRed(red).redInvm();
30111 var ntinv = tinv.redNeg();
30112
30113 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
30114
30115 var l1 = ntinv.redAdd(s).fromRed();
30116 var l2 = ntinv.redSub(s).fromRed();
30117 return [ l1, l2 ];
30118 };
30119
30120 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
30121 // aprxSqrt >= sqrt(this.n)
30122 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
30123
30124 // 3.74
30125 // Run EGCD, until r(L + 1) < aprxSqrt
30126 var u = lambda;
30127 var v = this.n.clone();
30128 var x1 = new BN(1);
30129 var y1 = new BN(0);
30130 var x2 = new BN(0);
30131 var y2 = new BN(1);
30132
30133 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
30134 var a0;
30135 var b0;
30136 // First vector
30137 var a1;
30138 var b1;
30139 // Second vector
30140 var a2;
30141 var b2;
30142
30143 var prevR;
30144 var i = 0;
30145 var r;
30146 var x;
30147 while (u.cmpn(0) !== 0) {
30148 var q = v.div(u);
30149 r = v.sub(q.mul(u));
30150 x = x2.sub(q.mul(x1));
30151 var y = y2.sub(q.mul(y1));
30152
30153 if (!a1 && r.cmp(aprxSqrt) < 0) {
30154 a0 = prevR.neg();
30155 b0 = x1;
30156 a1 = r.neg();
30157 b1 = x;
30158 } else if (a1 && ++i === 2) {
30159 break;
30160 }
30161 prevR = r;
30162
30163 v = u;
30164 u = r;
30165 x2 = x1;
30166 x1 = x;
30167 y2 = y1;
30168 y1 = y;
30169 }
30170 a2 = r.neg();
30171 b2 = x;
30172
30173 var len1 = a1.sqr().add(b1.sqr());
30174 var len2 = a2.sqr().add(b2.sqr());
30175 if (len2.cmp(len1) >= 0) {
30176 a2 = a0;
30177 b2 = b0;
30178 }
30179
30180 // Normalize signs
30181 if (a1.negative) {
30182 a1 = a1.neg();
30183 b1 = b1.neg();
30184 }
30185 if (a2.negative) {
30186 a2 = a2.neg();
30187 b2 = b2.neg();
30188 }
30189
30190 return [
30191 { a: a1, b: b1 },
30192 { a: a2, b: b2 }
30193 ];
30194 };
30195
30196 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
30197 var basis = this.endo.basis;
30198 var v1 = basis[0];
30199 var v2 = basis[1];
30200
30201 var c1 = v2.b.mul(k).divRound(this.n);
30202 var c2 = v1.b.neg().mul(k).divRound(this.n);
30203
30204 var p1 = c1.mul(v1.a);
30205 var p2 = c2.mul(v2.a);
30206 var q1 = c1.mul(v1.b);
30207 var q2 = c2.mul(v2.b);
30208
30209 // Calculate answer
30210 var k1 = k.sub(p1).sub(p2);
30211 var k2 = q1.add(q2).neg();
30212 return { k1: k1, k2: k2 };
30213 };
30214
30215 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
30216 x = new BN(x, 16);
30217 if (!x.red)
30218 x = x.toRed(this.red);
30219
30220 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
30221 var y = y2.redSqrt();
30222 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
30223 throw new Error('invalid point');
30224
30225 // XXX Is there any way to tell if the number is odd without converting it
30226 // to non-red form?
30227 var isOdd = y.fromRed().isOdd();
30228 if (odd && !isOdd || !odd && isOdd)
30229 y = y.redNeg();
30230
30231 return this.point(x, y);
30232 };
30233
30234 ShortCurve.prototype.validate = function validate(point) {
30235 if (point.inf)
30236 return true;
30237
30238 var x = point.x;
30239 var y = point.y;
30240
30241 var ax = this.a.redMul(x);
30242 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
30243 return y.redSqr().redISub(rhs).cmpn(0) === 0;
30244 };
30245
30246 ShortCurve.prototype._endoWnafMulAdd =
30247 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
30248 var npoints = this._endoWnafT1;
30249 var ncoeffs = this._endoWnafT2;
30250 for (var i = 0; i < points.length; i++) {
30251 var split = this._endoSplit(coeffs[i]);
30252 var p = points[i];
30253 var beta = p._getBeta();
30254
30255 if (split.k1.negative) {
30256 split.k1.ineg();
30257 p = p.neg(true);
30258 }
30259 if (split.k2.negative) {
30260 split.k2.ineg();
30261 beta = beta.neg(true);
30262 }
30263
30264 npoints[i * 2] = p;
30265 npoints[i * 2 + 1] = beta;
30266 ncoeffs[i * 2] = split.k1;
30267 ncoeffs[i * 2 + 1] = split.k2;
30268 }
30269 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
30270
30271 // Clean-up references to points and coefficients
30272 for (var j = 0; j < i * 2; j++) {
30273 npoints[j] = null;
30274 ncoeffs[j] = null;
30275 }
30276 return res;
30277 };
30278
30279 function Point(curve, x, y, isRed) {
30280 Base.BasePoint.call(this, curve, 'affine');
30281 if (x === null && y === null) {
30282 this.x = null;
30283 this.y = null;
30284 this.inf = true;
30285 } else {
30286 this.x = new BN(x, 16);
30287 this.y = new BN(y, 16);
30288 // Force redgomery representation when loading from JSON
30289 if (isRed) {
30290 this.x.forceRed(this.curve.red);
30291 this.y.forceRed(this.curve.red);
30292 }
30293 if (!this.x.red)
30294 this.x = this.x.toRed(this.curve.red);
30295 if (!this.y.red)
30296 this.y = this.y.toRed(this.curve.red);
30297 this.inf = false;
30298 }
30299 }
30300 inherits(Point, Base.BasePoint);
30301
30302 ShortCurve.prototype.point = function point(x, y, isRed) {
30303 return new Point(this, x, y, isRed);
30304 };
30305
30306 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
30307 return Point.fromJSON(this, obj, red);
30308 };
30309
30310 Point.prototype._getBeta = function _getBeta() {
30311 if (!this.curve.endo)
30312 return;
30313
30314 var pre = this.precomputed;
30315 if (pre && pre.beta)
30316 return pre.beta;
30317
30318 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
30319 if (pre) {
30320 var curve = this.curve;
30321 var endoMul = function(p) {
30322 return curve.point(p.x.redMul(curve.endo.beta), p.y);
30323 };
30324 pre.beta = beta;
30325 beta.precomputed = {
30326 beta: null,
30327 naf: pre.naf && {
30328 wnd: pre.naf.wnd,
30329 points: pre.naf.points.map(endoMul)
30330 },
30331 doubles: pre.doubles && {
30332 step: pre.doubles.step,
30333 points: pre.doubles.points.map(endoMul)
30334 }
30335 };
30336 }
30337 return beta;
30338 };
30339
30340 Point.prototype.toJSON = function toJSON() {
30341 if (!this.precomputed)
30342 return [ this.x, this.y ];
30343
30344 return [ this.x, this.y, this.precomputed && {
30345 doubles: this.precomputed.doubles && {
30346 step: this.precomputed.doubles.step,
30347 points: this.precomputed.doubles.points.slice(1)
30348 },
30349 naf: this.precomputed.naf && {
30350 wnd: this.precomputed.naf.wnd,
30351 points: this.precomputed.naf.points.slice(1)
30352 }
30353 } ];
30354 };
30355
30356 Point.fromJSON = function fromJSON(curve, obj, red) {
30357 if (typeof obj === 'string')
30358 obj = JSON.parse(obj);
30359 var res = curve.point(obj[0], obj[1], red);
30360 if (!obj[2])
30361 return res;
30362
30363 function obj2point(obj) {
30364 return curve.point(obj[0], obj[1], red);
30365 }
30366
30367 var pre = obj[2];
30368 res.precomputed = {
30369 beta: null,
30370 doubles: pre.doubles && {
30371 step: pre.doubles.step,
30372 points: [ res ].concat(pre.doubles.points.map(obj2point))
30373 },
30374 naf: pre.naf && {
30375 wnd: pre.naf.wnd,
30376 points: [ res ].concat(pre.naf.points.map(obj2point))
30377 }
30378 };
30379 return res;
30380 };
30381
30382 Point.prototype.inspect = function inspect() {
30383 if (this.isInfinity())
30384 return '<EC Point Infinity>';
30385 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
30386 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
30387 };
30388
30389 Point.prototype.isInfinity = function isInfinity() {
30390 return this.inf;
30391 };
30392
30393 Point.prototype.add = function add(p) {
30394 // O + P = P
30395 if (this.inf)
30396 return p;
30397
30398 // P + O = P
30399 if (p.inf)
30400 return this;
30401
30402 // P + P = 2P
30403 if (this.eq(p))
30404 return this.dbl();
30405
30406 // P + (-P) = O
30407 if (this.neg().eq(p))
30408 return this.curve.point(null, null);
30409
30410 // P + Q = O
30411 if (this.x.cmp(p.x) === 0)
30412 return this.curve.point(null, null);
30413
30414 var c = this.y.redSub(p.y);
30415 if (c.cmpn(0) !== 0)
30416 c = c.redMul(this.x.redSub(p.x).redInvm());
30417 var nx = c.redSqr().redISub(this.x).redISub(p.x);
30418 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30419 return this.curve.point(nx, ny);
30420 };
30421
30422 Point.prototype.dbl = function dbl() {
30423 if (this.inf)
30424 return this;
30425
30426 // 2P = O
30427 var ys1 = this.y.redAdd(this.y);
30428 if (ys1.cmpn(0) === 0)
30429 return this.curve.point(null, null);
30430
30431 var a = this.curve.a;
30432
30433 var x2 = this.x.redSqr();
30434 var dyinv = ys1.redInvm();
30435 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
30436
30437 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
30438 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30439 return this.curve.point(nx, ny);
30440 };
30441
30442 Point.prototype.getX = function getX() {
30443 return this.x.fromRed();
30444 };
30445
30446 Point.prototype.getY = function getY() {
30447 return this.y.fromRed();
30448 };
30449
30450 Point.prototype.mul = function mul(k) {
30451 k = new BN(k, 16);
30452
30453 if (this._hasDoubles(k))
30454 return this.curve._fixedNafMul(this, k);
30455 else if (this.curve.endo)
30456 return this.curve._endoWnafMulAdd([ this ], [ k ]);
30457 else
30458 return this.curve._wnafMul(this, k);
30459 };
30460
30461 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
30462 var points = [ this, p2 ];
30463 var coeffs = [ k1, k2 ];
30464 if (this.curve.endo)
30465 return this.curve._endoWnafMulAdd(points, coeffs);
30466 else
30467 return this.curve._wnafMulAdd(1, points, coeffs, 2);
30468 };
30469
30470 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
30471 var points = [ this, p2 ];
30472 var coeffs = [ k1, k2 ];
30473 if (this.curve.endo)
30474 return this.curve._endoWnafMulAdd(points, coeffs, true);
30475 else
30476 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
30477 };
30478
30479 Point.prototype.eq = function eq(p) {
30480 return this === p ||
30481 this.inf === p.inf &&
30482 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
30483 };
30484
30485 Point.prototype.neg = function neg(_precompute) {
30486 if (this.inf)
30487 return this;
30488
30489 var res = this.curve.point(this.x, this.y.redNeg());
30490 if (_precompute && this.precomputed) {
30491 var pre = this.precomputed;
30492 var negate = function(p) {
30493 return p.neg();
30494 };
30495 res.precomputed = {
30496 naf: pre.naf && {
30497 wnd: pre.naf.wnd,
30498 points: pre.naf.points.map(negate)
30499 },
30500 doubles: pre.doubles && {
30501 step: pre.doubles.step,
30502 points: pre.doubles.points.map(negate)
30503 }
30504 };
30505 }
30506 return res;
30507 };
30508
30509 Point.prototype.toJ = function toJ() {
30510 if (this.inf)
30511 return this.curve.jpoint(null, null, null);
30512
30513 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
30514 return res;
30515 };
30516
30517 function JPoint(curve, x, y, z) {
30518 Base.BasePoint.call(this, curve, 'jacobian');
30519 if (x === null && y === null && z === null) {
30520 this.x = this.curve.one;
30521 this.y = this.curve.one;
30522 this.z = new BN(0);
30523 } else {
30524 this.x = new BN(x, 16);
30525 this.y = new BN(y, 16);
30526 this.z = new BN(z, 16);
30527 }
30528 if (!this.x.red)
30529 this.x = this.x.toRed(this.curve.red);
30530 if (!this.y.red)
30531 this.y = this.y.toRed(this.curve.red);
30532 if (!this.z.red)
30533 this.z = this.z.toRed(this.curve.red);
30534
30535 this.zOne = this.z === this.curve.one;
30536 }
30537 inherits(JPoint, Base.BasePoint);
30538
30539 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
30540 return new JPoint(this, x, y, z);
30541 };
30542
30543 JPoint.prototype.toP = function toP() {
30544 if (this.isInfinity())
30545 return this.curve.point(null, null);
30546
30547 var zinv = this.z.redInvm();
30548 var zinv2 = zinv.redSqr();
30549 var ax = this.x.redMul(zinv2);
30550 var ay = this.y.redMul(zinv2).redMul(zinv);
30551
30552 return this.curve.point(ax, ay);
30553 };
30554
30555 JPoint.prototype.neg = function neg() {
30556 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
30557 };
30558
30559 JPoint.prototype.add = function add(p) {
30560 // O + P = P
30561 if (this.isInfinity())
30562 return p;
30563
30564 // P + O = P
30565 if (p.isInfinity())
30566 return this;
30567
30568 // 12M + 4S + 7A
30569 var pz2 = p.z.redSqr();
30570 var z2 = this.z.redSqr();
30571 var u1 = this.x.redMul(pz2);
30572 var u2 = p.x.redMul(z2);
30573 var s1 = this.y.redMul(pz2.redMul(p.z));
30574 var s2 = p.y.redMul(z2.redMul(this.z));
30575
30576 var h = u1.redSub(u2);
30577 var r = s1.redSub(s2);
30578 if (h.cmpn(0) === 0) {
30579 if (r.cmpn(0) !== 0)
30580 return this.curve.jpoint(null, null, null);
30581 else
30582 return this.dbl();
30583 }
30584
30585 var h2 = h.redSqr();
30586 var h3 = h2.redMul(h);
30587 var v = u1.redMul(h2);
30588
30589 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30590 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30591 var nz = this.z.redMul(p.z).redMul(h);
30592
30593 return this.curve.jpoint(nx, ny, nz);
30594 };
30595
30596 JPoint.prototype.mixedAdd = function mixedAdd(p) {
30597 // O + P = P
30598 if (this.isInfinity())
30599 return p.toJ();
30600
30601 // P + O = P
30602 if (p.isInfinity())
30603 return this;
30604
30605 // 8M + 3S + 7A
30606 var z2 = this.z.redSqr();
30607 var u1 = this.x;
30608 var u2 = p.x.redMul(z2);
30609 var s1 = this.y;
30610 var s2 = p.y.redMul(z2).redMul(this.z);
30611
30612 var h = u1.redSub(u2);
30613 var r = s1.redSub(s2);
30614 if (h.cmpn(0) === 0) {
30615 if (r.cmpn(0) !== 0)
30616 return this.curve.jpoint(null, null, null);
30617 else
30618 return this.dbl();
30619 }
30620
30621 var h2 = h.redSqr();
30622 var h3 = h2.redMul(h);
30623 var v = u1.redMul(h2);
30624
30625 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30626 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30627 var nz = this.z.redMul(h);
30628
30629 return this.curve.jpoint(nx, ny, nz);
30630 };
30631
30632 JPoint.prototype.dblp = function dblp(pow) {
30633 if (pow === 0)
30634 return this;
30635 if (this.isInfinity())
30636 return this;
30637 if (!pow)
30638 return this.dbl();
30639
30640 if (this.curve.zeroA || this.curve.threeA) {
30641 var r = this;
30642 for (var i = 0; i < pow; i++)
30643 r = r.dbl();
30644 return r;
30645 }
30646
30647 // 1M + 2S + 1A + N * (4S + 5M + 8A)
30648 // N = 1 => 6M + 6S + 9A
30649 var a = this.curve.a;
30650 var tinv = this.curve.tinv;
30651
30652 var jx = this.x;
30653 var jy = this.y;
30654 var jz = this.z;
30655 var jz4 = jz.redSqr().redSqr();
30656
30657 // Reuse results
30658 var jyd = jy.redAdd(jy);
30659 for (var i = 0; i < pow; i++) {
30660 var jx2 = jx.redSqr();
30661 var jyd2 = jyd.redSqr();
30662 var jyd4 = jyd2.redSqr();
30663 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30664
30665 var t1 = jx.redMul(jyd2);
30666 var nx = c.redSqr().redISub(t1.redAdd(t1));
30667 var t2 = t1.redISub(nx);
30668 var dny = c.redMul(t2);
30669 dny = dny.redIAdd(dny).redISub(jyd4);
30670 var nz = jyd.redMul(jz);
30671 if (i + 1 < pow)
30672 jz4 = jz4.redMul(jyd4);
30673
30674 jx = nx;
30675 jz = nz;
30676 jyd = dny;
30677 }
30678
30679 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
30680 };
30681
30682 JPoint.prototype.dbl = function dbl() {
30683 if (this.isInfinity())
30684 return this;
30685
30686 if (this.curve.zeroA)
30687 return this._zeroDbl();
30688 else if (this.curve.threeA)
30689 return this._threeDbl();
30690 else
30691 return this._dbl();
30692 };
30693
30694 JPoint.prototype._zeroDbl = function _zeroDbl() {
30695 var nx;
30696 var ny;
30697 var nz;
30698 // Z = 1
30699 if (this.zOne) {
30700 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30701 // #doubling-mdbl-2007-bl
30702 // 1M + 5S + 14A
30703
30704 // XX = X1^2
30705 var xx = this.x.redSqr();
30706 // YY = Y1^2
30707 var yy = this.y.redSqr();
30708 // YYYY = YY^2
30709 var yyyy = yy.redSqr();
30710 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30711 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30712 s = s.redIAdd(s);
30713 // M = 3 * XX + a; a = 0
30714 var m = xx.redAdd(xx).redIAdd(xx);
30715 // T = M ^ 2 - 2*S
30716 var t = m.redSqr().redISub(s).redISub(s);
30717
30718 // 8 * YYYY
30719 var yyyy8 = yyyy.redIAdd(yyyy);
30720 yyyy8 = yyyy8.redIAdd(yyyy8);
30721 yyyy8 = yyyy8.redIAdd(yyyy8);
30722
30723 // X3 = T
30724 nx = t;
30725 // Y3 = M * (S - T) - 8 * YYYY
30726 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30727 // Z3 = 2*Y1
30728 nz = this.y.redAdd(this.y);
30729 } else {
30730 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30731 // #doubling-dbl-2009-l
30732 // 2M + 5S + 13A
30733
30734 // A = X1^2
30735 var a = this.x.redSqr();
30736 // B = Y1^2
30737 var b = this.y.redSqr();
30738 // C = B^2
30739 var c = b.redSqr();
30740 // D = 2 * ((X1 + B)^2 - A - C)
30741 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
30742 d = d.redIAdd(d);
30743 // E = 3 * A
30744 var e = a.redAdd(a).redIAdd(a);
30745 // F = E^2
30746 var f = e.redSqr();
30747
30748 // 8 * C
30749 var c8 = c.redIAdd(c);
30750 c8 = c8.redIAdd(c8);
30751 c8 = c8.redIAdd(c8);
30752
30753 // X3 = F - 2 * D
30754 nx = f.redISub(d).redISub(d);
30755 // Y3 = E * (D - X3) - 8 * C
30756 ny = e.redMul(d.redISub(nx)).redISub(c8);
30757 // Z3 = 2 * Y1 * Z1
30758 nz = this.y.redMul(this.z);
30759 nz = nz.redIAdd(nz);
30760 }
30761
30762 return this.curve.jpoint(nx, ny, nz);
30763 };
30764
30765 JPoint.prototype._threeDbl = function _threeDbl() {
30766 var nx;
30767 var ny;
30768 var nz;
30769 // Z = 1
30770 if (this.zOne) {
30771 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
30772 // #doubling-mdbl-2007-bl
30773 // 1M + 5S + 15A
30774
30775 // XX = X1^2
30776 var xx = this.x.redSqr();
30777 // YY = Y1^2
30778 var yy = this.y.redSqr();
30779 // YYYY = YY^2
30780 var yyyy = yy.redSqr();
30781 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30782 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30783 s = s.redIAdd(s);
30784 // M = 3 * XX + a
30785 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
30786 // T = M^2 - 2 * S
30787 var t = m.redSqr().redISub(s).redISub(s);
30788 // X3 = T
30789 nx = t;
30790 // Y3 = M * (S - T) - 8 * YYYY
30791 var yyyy8 = yyyy.redIAdd(yyyy);
30792 yyyy8 = yyyy8.redIAdd(yyyy8);
30793 yyyy8 = yyyy8.redIAdd(yyyy8);
30794 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30795 // Z3 = 2 * Y1
30796 nz = this.y.redAdd(this.y);
30797 } else {
30798 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
30799 // 3M + 5S
30800
30801 // delta = Z1^2
30802 var delta = this.z.redSqr();
30803 // gamma = Y1^2
30804 var gamma = this.y.redSqr();
30805 // beta = X1 * gamma
30806 var beta = this.x.redMul(gamma);
30807 // alpha = 3 * (X1 - delta) * (X1 + delta)
30808 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
30809 alpha = alpha.redAdd(alpha).redIAdd(alpha);
30810 // X3 = alpha^2 - 8 * beta
30811 var beta4 = beta.redIAdd(beta);
30812 beta4 = beta4.redIAdd(beta4);
30813 var beta8 = beta4.redAdd(beta4);
30814 nx = alpha.redSqr().redISub(beta8);
30815 // Z3 = (Y1 + Z1)^2 - gamma - delta
30816 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
30817 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
30818 var ggamma8 = gamma.redSqr();
30819 ggamma8 = ggamma8.redIAdd(ggamma8);
30820 ggamma8 = ggamma8.redIAdd(ggamma8);
30821 ggamma8 = ggamma8.redIAdd(ggamma8);
30822 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
30823 }
30824
30825 return this.curve.jpoint(nx, ny, nz);
30826 };
30827
30828 JPoint.prototype._dbl = function _dbl() {
30829 var a = this.curve.a;
30830
30831 // 4M + 6S + 10A
30832 var jx = this.x;
30833 var jy = this.y;
30834 var jz = this.z;
30835 var jz4 = jz.redSqr().redSqr();
30836
30837 var jx2 = jx.redSqr();
30838 var jy2 = jy.redSqr();
30839
30840 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30841
30842 var jxd4 = jx.redAdd(jx);
30843 jxd4 = jxd4.redIAdd(jxd4);
30844 var t1 = jxd4.redMul(jy2);
30845 var nx = c.redSqr().redISub(t1.redAdd(t1));
30846 var t2 = t1.redISub(nx);
30847
30848 var jyd8 = jy2.redSqr();
30849 jyd8 = jyd8.redIAdd(jyd8);
30850 jyd8 = jyd8.redIAdd(jyd8);
30851 jyd8 = jyd8.redIAdd(jyd8);
30852 var ny = c.redMul(t2).redISub(jyd8);
30853 var nz = jy.redAdd(jy).redMul(jz);
30854
30855 return this.curve.jpoint(nx, ny, nz);
30856 };
30857
30858 JPoint.prototype.trpl = function trpl() {
30859 if (!this.curve.zeroA)
30860 return this.dbl().add(this);
30861
30862 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
30863 // 5M + 10S + ...
30864
30865 // XX = X1^2
30866 var xx = this.x.redSqr();
30867 // YY = Y1^2
30868 var yy = this.y.redSqr();
30869 // ZZ = Z1^2
30870 var zz = this.z.redSqr();
30871 // YYYY = YY^2
30872 var yyyy = yy.redSqr();
30873 // M = 3 * XX + a * ZZ2; a = 0
30874 var m = xx.redAdd(xx).redIAdd(xx);
30875 // MM = M^2
30876 var mm = m.redSqr();
30877 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
30878 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30879 e = e.redIAdd(e);
30880 e = e.redAdd(e).redIAdd(e);
30881 e = e.redISub(mm);
30882 // EE = E^2
30883 var ee = e.redSqr();
30884 // T = 16*YYYY
30885 var t = yyyy.redIAdd(yyyy);
30886 t = t.redIAdd(t);
30887 t = t.redIAdd(t);
30888 t = t.redIAdd(t);
30889 // U = (M + E)^2 - MM - EE - T
30890 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
30891 // X3 = 4 * (X1 * EE - 4 * YY * U)
30892 var yyu4 = yy.redMul(u);
30893 yyu4 = yyu4.redIAdd(yyu4);
30894 yyu4 = yyu4.redIAdd(yyu4);
30895 var nx = this.x.redMul(ee).redISub(yyu4);
30896 nx = nx.redIAdd(nx);
30897 nx = nx.redIAdd(nx);
30898 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
30899 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
30900 ny = ny.redIAdd(ny);
30901 ny = ny.redIAdd(ny);
30902 ny = ny.redIAdd(ny);
30903 // Z3 = (Z1 + E)^2 - ZZ - EE
30904 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
30905
30906 return this.curve.jpoint(nx, ny, nz);
30907 };
30908
30909 JPoint.prototype.mul = function mul(k, kbase) {
30910 k = new BN(k, kbase);
30911
30912 return this.curve._wnafMul(this, k);
30913 };
30914
30915 JPoint.prototype.eq = function eq(p) {
30916 if (p.type === 'affine')
30917 return this.eq(p.toJ());
30918
30919 if (this === p)
30920 return true;
30921
30922 // x1 * z2^2 == x2 * z1^2
30923 var z2 = this.z.redSqr();
30924 var pz2 = p.z.redSqr();
30925 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
30926 return false;
30927
30928 // y1 * z2^3 == y2 * z1^3
30929 var z3 = z2.redMul(this.z);
30930 var pz3 = pz2.redMul(p.z);
30931 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
30932 };
30933
30934 JPoint.prototype.eqXToP = function eqXToP(x) {
30935 var zs = this.z.redSqr();
30936 var rx = x.toRed(this.curve.red).redMul(zs);
30937 if (this.x.cmp(rx) === 0)
30938 return true;
30939
30940 var xc = x.clone();
30941 var t = this.curve.redN.redMul(zs);
30942 for (;;) {
30943 xc.iadd(this.curve.n);
30944 if (xc.cmp(this.curve.p) >= 0)
30945 return false;
30946
30947 rx.redIAdd(t);
30948 if (this.x.cmp(rx) === 0)
30949 return true;
30950 }
30951 return false;
30952 };
30953
30954 JPoint.prototype.inspect = function inspect() {
30955 if (this.isInfinity())
30956 return '<EC JPoint Infinity>';
30957 return '<EC JPoint x: ' + this.x.toString(16, 2) +
30958 ' y: ' + this.y.toString(16, 2) +
30959 ' z: ' + this.z.toString(16, 2) + '>';
30960 };
30961
30962 JPoint.prototype.isInfinity = function isInfinity() {
30963 // XXX This code assumes that zero is always zero in red
30964 return this.z.cmpn(0) === 0;
30965 };
30966
30967 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
30968 'use strict';
30969
30970 var curves = exports;
30971
30972 var hash = require('hash.js');
30973 var elliptic = require('../elliptic');
30974
30975 var assert = elliptic.utils.assert;
30976
30977 function PresetCurve(options) {
30978 if (options.type === 'short')
30979 this.curve = new elliptic.curve.short(options);
30980 else if (options.type === 'edwards')
30981 this.curve = new elliptic.curve.edwards(options);
30982 else
30983 this.curve = new elliptic.curve.mont(options);
30984 this.g = this.curve.g;
30985 this.n = this.curve.n;
30986 this.hash = options.hash;
30987
30988 assert(this.g.validate(), 'Invalid curve');
30989 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
30990 }
30991 curves.PresetCurve = PresetCurve;
30992
30993 function defineCurve(name, options) {
30994 Object.defineProperty(curves, name, {
30995 configurable: true,
30996 enumerable: true,
30997 get: function() {
30998 var curve = new PresetCurve(options);
30999 Object.defineProperty(curves, name, {
31000 configurable: true,
31001 enumerable: true,
31002 value: curve
31003 });
31004 return curve;
31005 }
31006 });
31007 }
31008
31009 defineCurve('p192', {
31010 type: 'short',
31011 prime: 'p192',
31012 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
31013 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
31014 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
31015 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
31016 hash: hash.sha256,
31017 gRed: false,
31018 g: [
31019 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
31020 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
31021 ]
31022 });
31023
31024 defineCurve('p224', {
31025 type: 'short',
31026 prime: 'p224',
31027 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
31028 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
31029 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
31030 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
31031 hash: hash.sha256,
31032 gRed: false,
31033 g: [
31034 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
31035 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
31036 ]
31037 });
31038
31039 defineCurve('p256', {
31040 type: 'short',
31041 prime: null,
31042 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
31043 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
31044 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
31045 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
31046 hash: hash.sha256,
31047 gRed: false,
31048 g: [
31049 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
31050 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
31051 ]
31052 });
31053
31054 defineCurve('p384', {
31055 type: 'short',
31056 prime: null,
31057 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31058 'fffffffe ffffffff 00000000 00000000 ffffffff',
31059 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31060 'fffffffe ffffffff 00000000 00000000 fffffffc',
31061 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
31062 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
31063 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
31064 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
31065 hash: hash.sha384,
31066 gRed: false,
31067 g: [
31068 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
31069 '5502f25d bf55296c 3a545e38 72760ab7',
31070 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
31071 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
31072 ]
31073 });
31074
31075 defineCurve('p521', {
31076 type: 'short',
31077 prime: null,
31078 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31079 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31080 'ffffffff ffffffff ffffffff ffffffff ffffffff',
31081 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31082 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31083 'ffffffff ffffffff ffffffff ffffffff fffffffc',
31084 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
31085 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
31086 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
31087 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31088 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
31089 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
31090 hash: hash.sha512,
31091 gRed: false,
31092 g: [
31093 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
31094 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
31095 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
31096 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
31097 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
31098 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
31099 ]
31100 });
31101
31102 defineCurve('curve25519', {
31103 type: 'mont',
31104 prime: 'p25519',
31105 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
31106 a: '76d06',
31107 b: '1',
31108 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
31109 hash: hash.sha256,
31110 gRed: false,
31111 g: [
31112 '9'
31113 ]
31114 });
31115
31116 defineCurve('ed25519', {
31117 type: 'edwards',
31118 prime: 'p25519',
31119 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
31120 a: '-1',
31121 c: '1',
31122 // -121665 * (121666^(-1)) (mod P)
31123 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
31124 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
31125 hash: hash.sha256,
31126 gRed: false,
31127 g: [
31128 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
31129
31130 // 4/5
31131 '6666666666666666666666666666666666666666666666666666666666666658'
31132 ]
31133 });
31134
31135 var pre;
31136 try {
31137 pre = require('./precomputed/secp256k1');
31138 } catch (e) {
31139 pre = undefined;
31140 }
31141
31142 defineCurve('secp256k1', {
31143 type: 'short',
31144 prime: 'k256',
31145 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
31146 a: '0',
31147 b: '7',
31148 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
31149 h: '1',
31150 hash: hash.sha256,
31151
31152 // Precomputed endomorphism
31153 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
31154 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
31155 basis: [
31156 {
31157 a: '3086d221a7d46bcde86c90e49284eb15',
31158 b: '-e4437ed6010e88286f547fa90abfe4c3'
31159 },
31160 {
31161 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
31162 b: '3086d221a7d46bcde86c90e49284eb15'
31163 }
31164 ],
31165
31166 gRed: false,
31167 g: [
31168 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
31169 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
31170 pre
31171 ]
31172 });
31173
31174 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
31175 'use strict';
31176
31177 var BN = require('bn.js');
31178 var elliptic = require('../../elliptic');
31179 var utils = elliptic.utils;
31180 var assert = utils.assert;
31181
31182 var KeyPair = require('./key');
31183 var Signature = require('./signature');
31184
31185 function EC(options) {
31186 if (!(this instanceof EC))
31187 return new EC(options);
31188
31189 // Shortcut `elliptic.ec(curve-name)`
31190 if (typeof options === 'string') {
31191 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
31192
31193 options = elliptic.curves[options];
31194 }
31195
31196 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
31197 if (options instanceof elliptic.curves.PresetCurve)
31198 options = { curve: options };
31199
31200 this.curve = options.curve.curve;
31201 this.n = this.curve.n;
31202 this.nh = this.n.ushrn(1);
31203 this.g = this.curve.g;
31204
31205 // Point on curve
31206 this.g = options.curve.g;
31207 this.g.precompute(options.curve.n.bitLength() + 1);
31208
31209 // Hash for function for DRBG
31210 this.hash = options.hash || options.curve.hash;
31211 }
31212 module.exports = EC;
31213
31214 EC.prototype.keyPair = function keyPair(options) {
31215 return new KeyPair(this, options);
31216 };
31217
31218 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
31219 return KeyPair.fromPrivate(this, priv, enc);
31220 };
31221
31222 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
31223 return KeyPair.fromPublic(this, pub, enc);
31224 };
31225
31226 EC.prototype.genKeyPair = function genKeyPair(options) {
31227 if (!options)
31228 options = {};
31229
31230 // Instantiate Hmac_DRBG
31231 var drbg = new elliptic.hmacDRBG({
31232 hash: this.hash,
31233 pers: options.pers,
31234 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
31235 nonce: this.n.toArray()
31236 });
31237
31238 var bytes = this.n.byteLength();
31239 var ns2 = this.n.sub(new BN(2));
31240 do {
31241 var priv = new BN(drbg.generate(bytes));
31242 if (priv.cmp(ns2) > 0)
31243 continue;
31244
31245 priv.iaddn(1);
31246 return this.keyFromPrivate(priv);
31247 } while (true);
31248 };
31249
31250 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
31251 var delta = msg.byteLength() * 8 - this.n.bitLength();
31252 if (delta > 0)
31253 msg = msg.ushrn(delta);
31254 if (!truncOnly && msg.cmp(this.n) >= 0)
31255 return msg.sub(this.n);
31256 else
31257 return msg;
31258 };
31259
31260 EC.prototype.sign = function sign(msg, key, enc, options) {
31261 if (typeof enc === 'object') {
31262 options = enc;
31263 enc = null;
31264 }
31265 if (!options)
31266 options = {};
31267
31268 key = this.keyFromPrivate(key, enc);
31269 msg = this._truncateToN(new BN(msg, 16));
31270
31271 // Zero-extend key to provide enough entropy
31272 var bytes = this.n.byteLength();
31273 var bkey = key.getPrivate().toArray('be', bytes);
31274
31275 // Zero-extend nonce to have the same byte size as N
31276 var nonce = msg.toArray('be', bytes);
31277
31278 // Instantiate Hmac_DRBG
31279 var drbg = new elliptic.hmacDRBG({
31280 hash: this.hash,
31281 entropy: bkey,
31282 nonce: nonce,
31283 pers: options.pers,
31284 persEnc: options.persEnc
31285 });
31286
31287 // Number of bytes to generate
31288 var ns1 = this.n.sub(new BN(1));
31289
31290 for (var iter = 0; true; iter++) {
31291 var k = options.k ?
31292 options.k(iter) :
31293 new BN(drbg.generate(this.n.byteLength()));
31294 k = this._truncateToN(k, true);
31295 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
31296 continue;
31297
31298 var kp = this.g.mul(k);
31299 if (kp.isInfinity())
31300 continue;
31301
31302 var kpX = kp.getX();
31303 var r = kpX.umod(this.n);
31304 if (r.cmpn(0) === 0)
31305 continue;
31306
31307 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
31308 s = s.umod(this.n);
31309 if (s.cmpn(0) === 0)
31310 continue;
31311
31312 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
31313 (kpX.cmp(r) !== 0 ? 2 : 0);
31314
31315 // Use complement of `s`, if it is > `n / 2`
31316 if (options.canonical && s.cmp(this.nh) > 0) {
31317 s = this.n.sub(s);
31318 recoveryParam ^= 1;
31319 }
31320
31321 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
31322 }
31323 };
31324
31325 EC.prototype.verify = function verify(msg, signature, key, enc) {
31326 msg = this._truncateToN(new BN(msg, 16));
31327 key = this.keyFromPublic(key, enc);
31328 signature = new Signature(signature, 'hex');
31329
31330 // Perform primitive values validation
31331 var r = signature.r;
31332 var s = signature.s;
31333 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
31334 return false;
31335 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
31336 return false;
31337
31338 // Validate signature
31339 var sinv = s.invm(this.n);
31340 var u1 = sinv.mul(msg).umod(this.n);
31341 var u2 = sinv.mul(r).umod(this.n);
31342
31343 if (!this.curve._maxwellTrick) {
31344 var p = this.g.mulAdd(u1, key.getPublic(), u2);
31345 if (p.isInfinity())
31346 return false;
31347
31348 return p.getX().umod(this.n).cmp(r) === 0;
31349 }
31350
31351 // NOTE: Greg Maxwell's trick, inspired by:
31352 // https://git.io/vad3K
31353
31354 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
31355 if (p.isInfinity())
31356 return false;
31357
31358 // Compare `p.x` of Jacobian point with `r`,
31359 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
31360 // inverse of `p.z^2`
31361 return p.eqXToP(r);
31362 };
31363
31364 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
31365 assert((3 & j) === j, 'The recovery param is more than two bits');
31366 signature = new Signature(signature, enc);
31367
31368 var n = this.n;
31369 var e = new BN(msg);
31370 var r = signature.r;
31371 var s = signature.s;
31372
31373 // A set LSB signifies that the y-coordinate is odd
31374 var isYOdd = j & 1;
31375 var isSecondKey = j >> 1;
31376 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
31377 throw new Error('Unable to find sencond key candinate');
31378
31379 // 1.1. Let x = r + jn.
31380 if (isSecondKey)
31381 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
31382 else
31383 r = this.curve.pointFromX(r, isYOdd);
31384
31385 var rInv = signature.r.invm(n);
31386 var s1 = n.sub(e).mul(rInv).umod(n);
31387 var s2 = s.mul(rInv).umod(n);
31388
31389 // 1.6.1 Compute Q = r^-1 (sR - eG)
31390 // Q = r^-1 (sR + -eG)
31391 return this.g.mulAdd(s1, r, s2);
31392 };
31393
31394 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
31395 signature = new Signature(signature, enc);
31396 if (signature.recoveryParam !== null)
31397 return signature.recoveryParam;
31398
31399 for (var i = 0; i < 4; i++) {
31400 var Qprime;
31401 try {
31402 Qprime = this.recoverPubKey(e, signature, i);
31403 } catch (e) {
31404 continue;
31405 }
31406
31407 if (Qprime.eq(Q))
31408 return i;
31409 }
31410 throw new Error('Unable to find valid recovery factor');
31411 };
31412
31413 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
31414 'use strict';
31415
31416 var BN = require('bn.js');
31417 var elliptic = require('../../elliptic');
31418 var utils = elliptic.utils;
31419 var assert = utils.assert;
31420
31421 function KeyPair(ec, options) {
31422 this.ec = ec;
31423 this.priv = null;
31424 this.pub = null;
31425
31426 // KeyPair(ec, { priv: ..., pub: ... })
31427 if (options.priv)
31428 this._importPrivate(options.priv, options.privEnc);
31429 if (options.pub)
31430 this._importPublic(options.pub, options.pubEnc);
31431 }
31432 module.exports = KeyPair;
31433
31434 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
31435 if (pub instanceof KeyPair)
31436 return pub;
31437
31438 return new KeyPair(ec, {
31439 pub: pub,
31440 pubEnc: enc
31441 });
31442 };
31443
31444 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
31445 if (priv instanceof KeyPair)
31446 return priv;
31447
31448 return new KeyPair(ec, {
31449 priv: priv,
31450 privEnc: enc
31451 });
31452 };
31453
31454 KeyPair.prototype.validate = function validate() {
31455 var pub = this.getPublic();
31456
31457 if (pub.isInfinity())
31458 return { result: false, reason: 'Invalid public key' };
31459 if (!pub.validate())
31460 return { result: false, reason: 'Public key is not a point' };
31461 if (!pub.mul(this.ec.curve.n).isInfinity())
31462 return { result: false, reason: 'Public key * N != O' };
31463
31464 return { result: true, reason: null };
31465 };
31466
31467 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
31468 // compact is optional argument
31469 if (typeof compact === 'string') {
31470 enc = compact;
31471 compact = null;
31472 }
31473
31474 if (!this.pub)
31475 this.pub = this.ec.g.mul(this.priv);
31476
31477 if (!enc)
31478 return this.pub;
31479
31480 return this.pub.encode(enc, compact);
31481 };
31482
31483 KeyPair.prototype.getPrivate = function getPrivate(enc) {
31484 if (enc === 'hex')
31485 return this.priv.toString(16, 2);
31486 else
31487 return this.priv;
31488 };
31489
31490 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
31491 this.priv = new BN(key, enc || 16);
31492
31493 // Ensure that the priv won't be bigger than n, otherwise we may fail
31494 // in fixed multiplication method
31495 this.priv = this.priv.umod(this.ec.curve.n);
31496 };
31497
31498 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
31499 if (key.x || key.y) {
31500 // Montgomery points only have an `x` coordinate.
31501 // Weierstrass/Edwards points on the other hand have both `x` and
31502 // `y` coordinates.
31503 if (this.ec.curve.type === 'mont') {
31504 assert(key.x, 'Need x coordinate');
31505 } else if (this.ec.curve.type === 'short' ||
31506 this.ec.curve.type === 'edwards') {
31507 assert(key.x && key.y, 'Need both x and y coordinate');
31508 }
31509 this.pub = this.ec.curve.point(key.x, key.y);
31510 return;
31511 }
31512 this.pub = this.ec.curve.decodePoint(key, enc);
31513 };
31514
31515 // ECDH
31516 KeyPair.prototype.derive = function derive(pub) {
31517 return pub.mul(this.priv).getX();
31518 };
31519
31520 // ECDSA
31521 KeyPair.prototype.sign = function sign(msg, enc, options) {
31522 return this.ec.sign(msg, this, enc, options);
31523 };
31524
31525 KeyPair.prototype.verify = function verify(msg, signature) {
31526 return this.ec.verify(msg, signature, this);
31527 };
31528
31529 KeyPair.prototype.inspect = function inspect() {
31530 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
31531 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
31532 };
31533
31534 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
31535 'use strict';
31536
31537 var BN = require('bn.js');
31538
31539 var elliptic = require('../../elliptic');
31540 var utils = elliptic.utils;
31541 var assert = utils.assert;
31542
31543 function Signature(options, enc) {
31544 if (options instanceof Signature)
31545 return options;
31546
31547 if (this._importDER(options, enc))
31548 return;
31549
31550 assert(options.r && options.s, 'Signature without r or s');
31551 this.r = new BN(options.r, 16);
31552 this.s = new BN(options.s, 16);
31553 if (options.recoveryParam === undefined)
31554 this.recoveryParam = null;
31555 else
31556 this.recoveryParam = options.recoveryParam;
31557 }
31558 module.exports = Signature;
31559
31560 function Position() {
31561 this.place = 0;
31562 }
31563
31564 function getLength(buf, p) {
31565 var initial = buf[p.place++];
31566 if (!(initial & 0x80)) {
31567 return initial;
31568 }
31569 var octetLen = initial & 0xf;
31570 var val = 0;
31571 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
31572 val <<= 8;
31573 val |= buf[off];
31574 }
31575 p.place = off;
31576 return val;
31577 }
31578
31579 function rmPadding(buf) {
31580 var i = 0;
31581 var len = buf.length - 1;
31582 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
31583 i++;
31584 }
31585 if (i === 0) {
31586 return buf;
31587 }
31588 return buf.slice(i);
31589 }
31590
31591 Signature.prototype._importDER = function _importDER(data, enc) {
31592 data = utils.toArray(data, enc);
31593 var p = new Position();
31594 if (data[p.place++] !== 0x30) {
31595 return false;
31596 }
31597 var len = getLength(data, p);
31598 if ((len + p.place) !== data.length) {
31599 return false;
31600 }
31601 if (data[p.place++] !== 0x02) {
31602 return false;
31603 }
31604 var rlen = getLength(data, p);
31605 var r = data.slice(p.place, rlen + p.place);
31606 p.place += rlen;
31607 if (data[p.place++] !== 0x02) {
31608 return false;
31609 }
31610 var slen = getLength(data, p);
31611 if (data.length !== slen + p.place) {
31612 return false;
31613 }
31614 var s = data.slice(p.place, slen + p.place);
31615 if (r[0] === 0 && (r[1] & 0x80)) {
31616 r = r.slice(1);
31617 }
31618 if (s[0] === 0 && (s[1] & 0x80)) {
31619 s = s.slice(1);
31620 }
31621
31622 this.r = new BN(r);
31623 this.s = new BN(s);
31624 this.recoveryParam = null;
31625
31626 return true;
31627 };
31628
31629 function constructLength(arr, len) {
31630 if (len < 0x80) {
31631 arr.push(len);
31632 return;
31633 }
31634 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
31635 arr.push(octets | 0x80);
31636 while (--octets) {
31637 arr.push((len >>> (octets << 3)) & 0xff);
31638 }
31639 arr.push(len);
31640 }
31641
31642 Signature.prototype.toDER = function toDER(enc) {
31643 var r = this.r.toArray();
31644 var s = this.s.toArray();
31645
31646 // Pad values
31647 if (r[0] & 0x80)
31648 r = [ 0 ].concat(r);
31649 // Pad values
31650 if (s[0] & 0x80)
31651 s = [ 0 ].concat(s);
31652
31653 r = rmPadding(r);
31654 s = rmPadding(s);
31655
31656 while (!s[0] && !(s[1] & 0x80)) {
31657 s = s.slice(1);
31658 }
31659 var arr = [ 0x02 ];
31660 constructLength(arr, r.length);
31661 arr = arr.concat(r);
31662 arr.push(0x02);
31663 constructLength(arr, s.length);
31664 var backHalf = arr.concat(s);
31665 var res = [ 0x30 ];
31666 constructLength(res, backHalf.length);
31667 res = res.concat(backHalf);
31668 return utils.encode(res, enc);
31669 };
31670
31671 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
31672 'use strict';
31673
31674 var hash = require('hash.js');
31675 var elliptic = require('../../elliptic');
31676 var utils = elliptic.utils;
31677 var assert = utils.assert;
31678 var parseBytes = utils.parseBytes;
31679 var KeyPair = require('./key');
31680 var Signature = require('./signature');
31681
31682 function EDDSA(curve) {
31683 assert(curve === 'ed25519', 'only tested with ed25519 so far');
31684
31685 if (!(this instanceof EDDSA))
31686 return new EDDSA(curve);
31687
31688 var curve = elliptic.curves[curve].curve;
31689 this.curve = curve;
31690 this.g = curve.g;
31691 this.g.precompute(curve.n.bitLength() + 1);
31692
31693 this.pointClass = curve.point().constructor;
31694 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
31695 this.hash = hash.sha512;
31696 }
31697
31698 module.exports = EDDSA;
31699
31700 /**
31701 * @param {Array|String} message - message bytes
31702 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
31703 * @returns {Signature} - signature
31704 */
31705 EDDSA.prototype.sign = function sign(message, secret) {
31706 message = parseBytes(message);
31707 var key = this.keyFromSecret(secret);
31708 var r = this.hashInt(key.messagePrefix(), message);
31709 var R = this.g.mul(r);
31710 var Rencoded = this.encodePoint(R);
31711 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
31712 .mul(key.priv());
31713 var S = r.add(s_).umod(this.curve.n);
31714 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
31715 };
31716
31717 /**
31718 * @param {Array} message - message bytes
31719 * @param {Array|String|Signature} sig - sig bytes
31720 * @param {Array|String|Point|KeyPair} pub - public key
31721 * @returns {Boolean} - true if public key matches sig of message
31722 */
31723 EDDSA.prototype.verify = function verify(message, sig, pub) {
31724 message = parseBytes(message);
31725 sig = this.makeSignature(sig);
31726 var key = this.keyFromPublic(pub);
31727 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
31728 var SG = this.g.mul(sig.S());
31729 var RplusAh = sig.R().add(key.pub().mul(h));
31730 return RplusAh.eq(SG);
31731 };
31732
31733 EDDSA.prototype.hashInt = function hashInt() {
31734 var hash = this.hash();
31735 for (var i = 0; i < arguments.length; i++)
31736 hash.update(arguments[i]);
31737 return utils.intFromLE(hash.digest()).umod(this.curve.n);
31738 };
31739
31740 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
31741 return KeyPair.fromPublic(this, pub);
31742 };
31743
31744 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
31745 return KeyPair.fromSecret(this, secret);
31746 };
31747
31748 EDDSA.prototype.makeSignature = function makeSignature(sig) {
31749 if (sig instanceof Signature)
31750 return sig;
31751 return new Signature(this, sig);
31752 };
31753
31754 /**
31755 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
31756 *
31757 * EDDSA defines methods for encoding and decoding points and integers. These are
31758 * helper convenience methods, that pass along to utility functions implied
31759 * parameters.
31760 *
31761 */
31762 EDDSA.prototype.encodePoint = function encodePoint(point) {
31763 var enc = point.getY().toArray('le', this.encodingLength);
31764 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
31765 return enc;
31766 };
31767
31768 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
31769 bytes = utils.parseBytes(bytes);
31770
31771 var lastIx = bytes.length - 1;
31772 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
31773 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
31774
31775 var y = utils.intFromLE(normed);
31776 return this.curve.pointFromY(y, xIsOdd);
31777 };
31778
31779 EDDSA.prototype.encodeInt = function encodeInt(num) {
31780 return num.toArray('le', this.encodingLength);
31781 };
31782
31783 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
31784 return utils.intFromLE(bytes);
31785 };
31786
31787 EDDSA.prototype.isPoint = function isPoint(val) {
31788 return val instanceof this.pointClass;
31789 };
31790
31791 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
31792 'use strict';
31793
31794 var elliptic = require('../../elliptic');
31795 var utils = elliptic.utils;
31796 var assert = utils.assert;
31797 var parseBytes = utils.parseBytes;
31798 var cachedProperty = utils.cachedProperty;
31799
31800 /**
31801 * @param {EDDSA} eddsa - instance
31802 * @param {Object} params - public/private key parameters
31803 *
31804 * @param {Array<Byte>} [params.secret] - secret seed bytes
31805 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
31806 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
31807 *
31808 */
31809 function KeyPair(eddsa, params) {
31810 this.eddsa = eddsa;
31811 this._secret = parseBytes(params.secret);
31812 if (eddsa.isPoint(params.pub))
31813 this._pub = params.pub;
31814 else
31815 this._pubBytes = parseBytes(params.pub);
31816 }
31817
31818 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
31819 if (pub instanceof KeyPair)
31820 return pub;
31821 return new KeyPair(eddsa, { pub: pub });
31822 };
31823
31824 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
31825 if (secret instanceof KeyPair)
31826 return secret;
31827 return new KeyPair(eddsa, { secret: secret });
31828 };
31829
31830 KeyPair.prototype.secret = function secret() {
31831 return this._secret;
31832 };
31833
31834 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
31835 return this.eddsa.encodePoint(this.pub());
31836 });
31837
31838 cachedProperty(KeyPair, 'pub', function pub() {
31839 if (this._pubBytes)
31840 return this.eddsa.decodePoint(this._pubBytes);
31841 return this.eddsa.g.mul(this.priv());
31842 });
31843
31844 cachedProperty(KeyPair, 'privBytes', function privBytes() {
31845 var eddsa = this.eddsa;
31846 var hash = this.hash();
31847 var lastIx = eddsa.encodingLength - 1;
31848
31849 var a = hash.slice(0, eddsa.encodingLength);
31850 a[0] &= 248;
31851 a[lastIx] &= 127;
31852 a[lastIx] |= 64;
31853
31854 return a;
31855 });
31856
31857 cachedProperty(KeyPair, 'priv', function priv() {
31858 return this.eddsa.decodeInt(this.privBytes());
31859 });
31860
31861 cachedProperty(KeyPair, 'hash', function hash() {
31862 return this.eddsa.hash().update(this.secret()).digest();
31863 });
31864
31865 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
31866 return this.hash().slice(this.eddsa.encodingLength);
31867 });
31868
31869 KeyPair.prototype.sign = function sign(message) {
31870 assert(this._secret, 'KeyPair can only verify');
31871 return this.eddsa.sign(message, this);
31872 };
31873
31874 KeyPair.prototype.verify = function verify(message, sig) {
31875 return this.eddsa.verify(message, sig, this);
31876 };
31877
31878 KeyPair.prototype.getSecret = function getSecret(enc) {
31879 assert(this._secret, 'KeyPair is public only');
31880 return utils.encode(this.secret(), enc);
31881 };
31882
31883 KeyPair.prototype.getPublic = function getPublic(enc) {
31884 return utils.encode(this.pubBytes(), enc);
31885 };
31886
31887 module.exports = KeyPair;
31888
31889 },{"../../elliptic":39}],51:[function(require,module,exports){
31890 'use strict';
31891
31892 var BN = require('bn.js');
31893 var elliptic = require('../../elliptic');
31894 var utils = elliptic.utils;
31895 var assert = utils.assert;
31896 var cachedProperty = utils.cachedProperty;
31897 var parseBytes = utils.parseBytes;
31898
31899 /**
31900 * @param {EDDSA} eddsa - eddsa instance
31901 * @param {Array<Bytes>|Object} sig -
31902 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
31903 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
31904 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
31905 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
31906 */
31907 function Signature(eddsa, sig) {
31908 this.eddsa = eddsa;
31909
31910 if (typeof sig !== 'object')
31911 sig = parseBytes(sig);
31912
31913 if (Array.isArray(sig)) {
31914 sig = {
31915 R: sig.slice(0, eddsa.encodingLength),
31916 S: sig.slice(eddsa.encodingLength)
31917 };
31918 }
31919
31920 assert(sig.R && sig.S, 'Signature without R or S');
31921
31922 if (eddsa.isPoint(sig.R))
31923 this._R = sig.R;
31924 if (sig.S instanceof BN)
31925 this._S = sig.S;
31926
31927 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
31928 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
31929 }
31930
31931 cachedProperty(Signature, 'S', function S() {
31932 return this.eddsa.decodeInt(this.Sencoded());
31933 });
31934
31935 cachedProperty(Signature, 'R', function R() {
31936 return this.eddsa.decodePoint(this.Rencoded());
31937 });
31938
31939 cachedProperty(Signature, 'Rencoded', function Rencoded() {
31940 return this.eddsa.encodePoint(this.R());
31941 });
31942
31943 cachedProperty(Signature, 'Sencoded', function Sencoded() {
31944 return this.eddsa.encodeInt(this.S());
31945 });
31946
31947 Signature.prototype.toBytes = function toBytes() {
31948 return this.Rencoded().concat(this.Sencoded());
31949 };
31950
31951 Signature.prototype.toHex = function toHex() {
31952 return utils.encode(this.toBytes(), 'hex').toUpperCase();
31953 };
31954
31955 module.exports = Signature;
31956
31957 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
31958 'use strict';
31959
31960 var hash = require('hash.js');
31961 var elliptic = require('../elliptic');
31962 var utils = elliptic.utils;
31963 var assert = utils.assert;
31964
31965 function HmacDRBG(options) {
31966 if (!(this instanceof HmacDRBG))
31967 return new HmacDRBG(options);
31968 this.hash = options.hash;
31969 this.predResist = !!options.predResist;
31970
31971 this.outLen = this.hash.outSize;
31972 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
31973
31974 this.reseed = null;
31975 this.reseedInterval = null;
31976 this.K = null;
31977 this.V = null;
31978
31979 var entropy = utils.toArray(options.entropy, options.entropyEnc);
31980 var nonce = utils.toArray(options.nonce, options.nonceEnc);
31981 var pers = utils.toArray(options.pers, options.persEnc);
31982 assert(entropy.length >= (this.minEntropy / 8),
31983 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31984 this._init(entropy, nonce, pers);
31985 }
31986 module.exports = HmacDRBG;
31987
31988 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
31989 var seed = entropy.concat(nonce).concat(pers);
31990
31991 this.K = new Array(this.outLen / 8);
31992 this.V = new Array(this.outLen / 8);
31993 for (var i = 0; i < this.V.length; i++) {
31994 this.K[i] = 0x00;
31995 this.V[i] = 0x01;
31996 }
31997
31998 this._update(seed);
31999 this.reseed = 1;
32000 this.reseedInterval = 0x1000000000000; // 2^48
32001 };
32002
32003 HmacDRBG.prototype._hmac = function hmac() {
32004 return new hash.hmac(this.hash, this.K);
32005 };
32006
32007 HmacDRBG.prototype._update = function update(seed) {
32008 var kmac = this._hmac()
32009 .update(this.V)
32010 .update([ 0x00 ]);
32011 if (seed)
32012 kmac = kmac.update(seed);
32013 this.K = kmac.digest();
32014 this.V = this._hmac().update(this.V).digest();
32015 if (!seed)
32016 return;
32017
32018 this.K = this._hmac()
32019 .update(this.V)
32020 .update([ 0x01 ])
32021 .update(seed)
32022 .digest();
32023 this.V = this._hmac().update(this.V).digest();
32024 };
32025
32026 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
32027 // Optional entropy enc
32028 if (typeof entropyEnc !== 'string') {
32029 addEnc = add;
32030 add = entropyEnc;
32031 entropyEnc = null;
32032 }
32033
32034 entropy = utils.toBuffer(entropy, entropyEnc);
32035 add = utils.toBuffer(add, addEnc);
32036
32037 assert(entropy.length >= (this.minEntropy / 8),
32038 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
32039
32040 this._update(entropy.concat(add || []));
32041 this.reseed = 1;
32042 };
32043
32044 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
32045 if (this.reseed > this.reseedInterval)
32046 throw new Error('Reseed is required');
32047
32048 // Optional encoding
32049 if (typeof enc !== 'string') {
32050 addEnc = add;
32051 add = enc;
32052 enc = null;
32053 }
32054
32055 // Optional additional data
32056 if (add) {
32057 add = utils.toArray(add, addEnc);
32058 this._update(add);
32059 }
32060
32061 var temp = [];
32062 while (temp.length < len) {
32063 this.V = this._hmac().update(this.V).digest();
32064 temp = temp.concat(this.V);
32065 }
32066
32067 var res = temp.slice(0, len);
32068 this._update(add);
32069 this.reseed++;
32070 return utils.encode(res, enc);
32071 };
32072
32073 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
32074 module.exports = {
32075 doubles: {
32076 step: 4,
32077 points: [
32078 [
32079 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
32080 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
32081 ],
32082 [
32083 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
32084 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
32085 ],
32086 [
32087 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
32088 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
32089 ],
32090 [
32091 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
32092 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
32093 ],
32094 [
32095 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
32096 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
32097 ],
32098 [
32099 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
32100 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
32101 ],
32102 [
32103 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
32104 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
32105 ],
32106 [
32107 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
32108 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
32109 ],
32110 [
32111 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
32112 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
32113 ],
32114 [
32115 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
32116 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
32117 ],
32118 [
32119 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
32120 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
32121 ],
32122 [
32123 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
32124 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
32125 ],
32126 [
32127 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
32128 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
32129 ],
32130 [
32131 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
32132 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
32133 ],
32134 [
32135 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
32136 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
32137 ],
32138 [
32139 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
32140 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
32141 ],
32142 [
32143 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
32144 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
32145 ],
32146 [
32147 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
32148 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
32149 ],
32150 [
32151 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
32152 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
32153 ],
32154 [
32155 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
32156 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
32157 ],
32158 [
32159 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
32160 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
32161 ],
32162 [
32163 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
32164 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
32165 ],
32166 [
32167 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
32168 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
32169 ],
32170 [
32171 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
32172 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
32173 ],
32174 [
32175 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
32176 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
32177 ],
32178 [
32179 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
32180 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
32181 ],
32182 [
32183 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
32184 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
32185 ],
32186 [
32187 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
32188 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
32189 ],
32190 [
32191 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
32192 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
32193 ],
32194 [
32195 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
32196 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
32197 ],
32198 [
32199 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
32200 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
32201 ],
32202 [
32203 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
32204 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
32205 ],
32206 [
32207 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
32208 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
32209 ],
32210 [
32211 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
32212 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
32213 ],
32214 [
32215 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
32216 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
32217 ],
32218 [
32219 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
32220 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
32221 ],
32222 [
32223 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
32224 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
32225 ],
32226 [
32227 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
32228 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
32229 ],
32230 [
32231 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
32232 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
32233 ],
32234 [
32235 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
32236 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
32237 ],
32238 [
32239 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
32240 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
32241 ],
32242 [
32243 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
32244 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
32245 ],
32246 [
32247 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
32248 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
32249 ],
32250 [
32251 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
32252 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
32253 ],
32254 [
32255 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
32256 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
32257 ],
32258 [
32259 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
32260 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
32261 ],
32262 [
32263 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
32264 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
32265 ],
32266 [
32267 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
32268 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
32269 ],
32270 [
32271 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
32272 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
32273 ],
32274 [
32275 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
32276 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
32277 ],
32278 [
32279 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
32280 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
32281 ],
32282 [
32283 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
32284 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
32285 ],
32286 [
32287 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
32288 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
32289 ],
32290 [
32291 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
32292 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
32293 ],
32294 [
32295 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
32296 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
32297 ],
32298 [
32299 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
32300 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
32301 ],
32302 [
32303 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
32304 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
32305 ],
32306 [
32307 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
32308 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
32309 ],
32310 [
32311 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
32312 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
32313 ],
32314 [
32315 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
32316 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
32317 ],
32318 [
32319 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
32320 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
32321 ],
32322 [
32323 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
32324 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
32325 ],
32326 [
32327 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
32328 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
32329 ],
32330 [
32331 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
32332 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
32333 ],
32334 [
32335 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
32336 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
32337 ]
32338 ]
32339 },
32340 naf: {
32341 wnd: 7,
32342 points: [
32343 [
32344 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
32345 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
32346 ],
32347 [
32348 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
32349 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
32350 ],
32351 [
32352 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
32353 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
32354 ],
32355 [
32356 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
32357 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
32358 ],
32359 [
32360 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
32361 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
32362 ],
32363 [
32364 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
32365 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
32366 ],
32367 [
32368 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
32369 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
32370 ],
32371 [
32372 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
32373 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
32374 ],
32375 [
32376 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
32377 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
32378 ],
32379 [
32380 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
32381 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
32382 ],
32383 [
32384 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
32385 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
32386 ],
32387 [
32388 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
32389 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
32390 ],
32391 [
32392 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
32393 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
32394 ],
32395 [
32396 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
32397 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
32398 ],
32399 [
32400 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
32401 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
32402 ],
32403 [
32404 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
32405 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
32406 ],
32407 [
32408 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
32409 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
32410 ],
32411 [
32412 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
32413 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
32414 ],
32415 [
32416 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
32417 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
32418 ],
32419 [
32420 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
32421 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
32422 ],
32423 [
32424 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
32425 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
32426 ],
32427 [
32428 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
32429 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
32430 ],
32431 [
32432 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
32433 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
32434 ],
32435 [
32436 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
32437 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
32438 ],
32439 [
32440 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
32441 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
32442 ],
32443 [
32444 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
32445 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
32446 ],
32447 [
32448 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
32449 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
32450 ],
32451 [
32452 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
32453 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
32454 ],
32455 [
32456 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
32457 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
32458 ],
32459 [
32460 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
32461 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
32462 ],
32463 [
32464 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
32465 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
32466 ],
32467 [
32468 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
32469 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
32470 ],
32471 [
32472 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
32473 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
32474 ],
32475 [
32476 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
32477 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
32478 ],
32479 [
32480 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
32481 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
32482 ],
32483 [
32484 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
32485 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
32486 ],
32487 [
32488 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
32489 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
32490 ],
32491 [
32492 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
32493 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
32494 ],
32495 [
32496 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
32497 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
32498 ],
32499 [
32500 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
32501 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
32502 ],
32503 [
32504 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
32505 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
32506 ],
32507 [
32508 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
32509 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
32510 ],
32511 [
32512 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
32513 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
32514 ],
32515 [
32516 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
32517 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
32518 ],
32519 [
32520 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
32521 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
32522 ],
32523 [
32524 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
32525 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
32526 ],
32527 [
32528 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
32529 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
32530 ],
32531 [
32532 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
32533 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
32534 ],
32535 [
32536 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
32537 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
32538 ],
32539 [
32540 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
32541 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
32542 ],
32543 [
32544 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
32545 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
32546 ],
32547 [
32548 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
32549 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
32550 ],
32551 [
32552 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
32553 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
32554 ],
32555 [
32556 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
32557 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
32558 ],
32559 [
32560 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
32561 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
32562 ],
32563 [
32564 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
32565 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
32566 ],
32567 [
32568 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
32569 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
32570 ],
32571 [
32572 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
32573 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
32574 ],
32575 [
32576 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
32577 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
32578 ],
32579 [
32580 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
32581 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
32582 ],
32583 [
32584 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
32585 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
32586 ],
32587 [
32588 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
32589 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
32590 ],
32591 [
32592 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
32593 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
32594 ],
32595 [
32596 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
32597 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
32598 ],
32599 [
32600 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
32601 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
32602 ],
32603 [
32604 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
32605 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
32606 ],
32607 [
32608 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
32609 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
32610 ],
32611 [
32612 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
32613 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
32614 ],
32615 [
32616 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
32617 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
32618 ],
32619 [
32620 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
32621 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
32622 ],
32623 [
32624 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
32625 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
32626 ],
32627 [
32628 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
32629 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
32630 ],
32631 [
32632 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
32633 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
32634 ],
32635 [
32636 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
32637 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
32638 ],
32639 [
32640 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
32641 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
32642 ],
32643 [
32644 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
32645 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
32646 ],
32647 [
32648 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
32649 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
32650 ],
32651 [
32652 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
32653 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
32654 ],
32655 [
32656 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
32657 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
32658 ],
32659 [
32660 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
32661 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
32662 ],
32663 [
32664 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
32665 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
32666 ],
32667 [
32668 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
32669 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
32670 ],
32671 [
32672 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
32673 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
32674 ],
32675 [
32676 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
32677 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
32678 ],
32679 [
32680 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
32681 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
32682 ],
32683 [
32684 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
32685 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
32686 ],
32687 [
32688 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
32689 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
32690 ],
32691 [
32692 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
32693 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
32694 ],
32695 [
32696 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
32697 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
32698 ],
32699 [
32700 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
32701 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
32702 ],
32703 [
32704 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
32705 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
32706 ],
32707 [
32708 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
32709 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
32710 ],
32711 [
32712 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
32713 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
32714 ],
32715 [
32716 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
32717 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
32718 ],
32719 [
32720 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
32721 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
32722 ],
32723 [
32724 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
32725 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
32726 ],
32727 [
32728 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
32729 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
32730 ],
32731 [
32732 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
32733 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
32734 ],
32735 [
32736 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
32737 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
32738 ],
32739 [
32740 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
32741 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
32742 ],
32743 [
32744 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
32745 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
32746 ],
32747 [
32748 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
32749 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
32750 ],
32751 [
32752 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
32753 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
32754 ],
32755 [
32756 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
32757 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
32758 ],
32759 [
32760 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
32761 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
32762 ],
32763 [
32764 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
32765 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
32766 ],
32767 [
32768 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
32769 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
32770 ],
32771 [
32772 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
32773 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
32774 ],
32775 [
32776 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
32777 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
32778 ],
32779 [
32780 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
32781 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
32782 ],
32783 [
32784 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
32785 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
32786 ],
32787 [
32788 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
32789 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
32790 ],
32791 [
32792 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
32793 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
32794 ],
32795 [
32796 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
32797 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
32798 ],
32799 [
32800 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
32801 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
32802 ],
32803 [
32804 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
32805 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
32806 ],
32807 [
32808 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
32809 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
32810 ],
32811 [
32812 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
32813 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
32814 ],
32815 [
32816 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
32817 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
32818 ],
32819 [
32820 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
32821 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
32822 ],
32823 [
32824 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
32825 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
32826 ],
32827 [
32828 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
32829 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
32830 ],
32831 [
32832 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
32833 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
32834 ],
32835 [
32836 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
32837 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
32838 ],
32839 [
32840 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
32841 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
32842 ],
32843 [
32844 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
32845 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
32846 ],
32847 [
32848 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
32849 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
32850 ]
32851 ]
32852 }
32853 };
32854
32855 },{}],54:[function(require,module,exports){
32856 'use strict';
32857
32858 var utils = exports;
32859 var BN = require('bn.js');
32860
32861 utils.assert = function assert(val, msg) {
32862 if (!val)
32863 throw new Error(msg || 'Assertion failed');
32864 };
32865
32866 function toArray(msg, enc) {
32867 if (Array.isArray(msg))
32868 return msg.slice();
32869 if (!msg)
32870 return [];
32871 var res = [];
32872 if (typeof msg !== 'string') {
32873 for (var i = 0; i < msg.length; i++)
32874 res[i] = msg[i] | 0;
32875 return res;
32876 }
32877 if (!enc) {
32878 for (var i = 0; i < msg.length; i++) {
32879 var c = msg.charCodeAt(i);
32880 var hi = c >> 8;
32881 var lo = c & 0xff;
32882 if (hi)
32883 res.push(hi, lo);
32884 else
32885 res.push(lo);
32886 }
32887 } else if (enc === 'hex') {
32888 msg = msg.replace(/[^a-z0-9]+/ig, '');
32889 if (msg.length % 2 !== 0)
32890 msg = '0' + msg;
32891 for (var i = 0; i < msg.length; i += 2)
32892 res.push(parseInt(msg[i] + msg[i + 1], 16));
32893 }
32894 return res;
32895 }
32896 utils.toArray = toArray;
32897
32898 function zero2(word) {
32899 if (word.length === 1)
32900 return '0' + word;
32901 else
32902 return word;
32903 }
32904 utils.zero2 = zero2;
32905
32906 function toHex(msg) {
32907 var res = '';
32908 for (var i = 0; i < msg.length; i++)
32909 res += zero2(msg[i].toString(16));
32910 return res;
32911 }
32912 utils.toHex = toHex;
32913
32914 utils.encode = function encode(arr, enc) {
32915 if (enc === 'hex')
32916 return toHex(arr);
32917 else
32918 return arr;
32919 };
32920
32921 // Represent num in a w-NAF form
32922 function getNAF(num, w) {
32923 var naf = [];
32924 var ws = 1 << (w + 1);
32925 var k = num.clone();
32926 while (k.cmpn(1) >= 0) {
32927 var z;
32928 if (k.isOdd()) {
32929 var mod = k.andln(ws - 1);
32930 if (mod > (ws >> 1) - 1)
32931 z = (ws >> 1) - mod;
32932 else
32933 z = mod;
32934 k.isubn(z);
32935 } else {
32936 z = 0;
32937 }
32938 naf.push(z);
32939
32940 // Optimization, shift by word if possible
32941 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
32942 for (var i = 1; i < shift; i++)
32943 naf.push(0);
32944 k.iushrn(shift);
32945 }
32946
32947 return naf;
32948 }
32949 utils.getNAF = getNAF;
32950
32951 // Represent k1, k2 in a Joint Sparse Form
32952 function getJSF(k1, k2) {
32953 var jsf = [
32954 [],
32955 []
32956 ];
32957
32958 k1 = k1.clone();
32959 k2 = k2.clone();
32960 var d1 = 0;
32961 var d2 = 0;
32962 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
32963
32964 // First phase
32965 var m14 = (k1.andln(3) + d1) & 3;
32966 var m24 = (k2.andln(3) + d2) & 3;
32967 if (m14 === 3)
32968 m14 = -1;
32969 if (m24 === 3)
32970 m24 = -1;
32971 var u1;
32972 if ((m14 & 1) === 0) {
32973 u1 = 0;
32974 } else {
32975 var m8 = (k1.andln(7) + d1) & 7;
32976 if ((m8 === 3 || m8 === 5) && m24 === 2)
32977 u1 = -m14;
32978 else
32979 u1 = m14;
32980 }
32981 jsf[0].push(u1);
32982
32983 var u2;
32984 if ((m24 & 1) === 0) {
32985 u2 = 0;
32986 } else {
32987 var m8 = (k2.andln(7) + d2) & 7;
32988 if ((m8 === 3 || m8 === 5) && m14 === 2)
32989 u2 = -m24;
32990 else
32991 u2 = m24;
32992 }
32993 jsf[1].push(u2);
32994
32995 // Second phase
32996 if (2 * d1 === u1 + 1)
32997 d1 = 1 - d1;
32998 if (2 * d2 === u2 + 1)
32999 d2 = 1 - d2;
33000 k1.iushrn(1);
33001 k2.iushrn(1);
33002 }
33003
33004 return jsf;
33005 }
33006 utils.getJSF = getJSF;
33007
33008 function cachedProperty(obj, name, computer) {
33009 var key = '_' + name;
33010 obj.prototype[name] = function cachedProperty() {
33011 return this[key] !== undefined ? this[key] :
33012 this[key] = computer.call(this);
33013 };
33014 }
33015 utils.cachedProperty = cachedProperty;
33016
33017 function parseBytes(bytes) {
33018 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
33019 bytes;
33020 }
33021 utils.parseBytes = parseBytes;
33022
33023 function intFromLE(bytes) {
33024 return new BN(bytes, 'hex', 'le');
33025 }
33026 utils.intFromLE = intFromLE;
33027
33028
33029 },{"bn.js":33}],55:[function(require,module,exports){
33030 module.exports={
33031 "_args": [
33032 [
33033 {
33034 "raw": "elliptic@^6.2.3",
33035 "scope": null,
33036 "escapedName": "elliptic",
33037 "name": "elliptic",
33038 "rawSpec": "^6.2.3",
33039 "spec": ">=6.2.3 <7.0.0",
33040 "type": "range"
33041 },
33042 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
33043 ]
33044 ],
33045 "_from": "elliptic@>=6.2.3 <7.0.0",
33046 "_id": "elliptic@6.3.3",
33047 "_inCache": true,
33048 "_location": "/elliptic",
33049 "_nodeVersion": "7.0.0",
33050 "_npmOperationalInternal": {
33051 "host": "packages-18-east.internal.npmjs.com",
33052 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
33053 },
33054 "_npmUser": {
33055 "name": "indutny",
33056 "email": "fedor@indutny.com"
33057 },
33058 "_npmVersion": "3.10.8",
33059 "_phantomChildren": {},
33060 "_requested": {
33061 "raw": "elliptic@^6.2.3",
33062 "scope": null,
33063 "escapedName": "elliptic",
33064 "name": "elliptic",
33065 "rawSpec": "^6.2.3",
33066 "spec": ">=6.2.3 <7.0.0",
33067 "type": "range"
33068 },
33069 "_requiredBy": [
33070 "/browserify-sign",
33071 "/create-ecdh",
33072 "/secp256k1"
33073 ],
33074 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
33075 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
33076 "_shrinkwrap": null,
33077 "_spec": "elliptic@^6.2.3",
33078 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
33079 "author": {
33080 "name": "Fedor Indutny",
33081 "email": "fedor@indutny.com"
33082 },
33083 "bugs": {
33084 "url": "https://github.com/indutny/elliptic/issues"
33085 },
33086 "dependencies": {
33087 "bn.js": "^4.4.0",
33088 "brorand": "^1.0.1",
33089 "hash.js": "^1.0.0",
33090 "inherits": "^2.0.1"
33091 },
33092 "description": "EC cryptography",
33093 "devDependencies": {
33094 "brfs": "^1.4.3",
33095 "coveralls": "^2.11.3",
33096 "grunt": "^0.4.5",
33097 "grunt-browserify": "^5.0.0",
33098 "grunt-cli": "^1.2.0",
33099 "grunt-contrib-connect": "^1.0.0",
33100 "grunt-contrib-copy": "^1.0.0",
33101 "grunt-contrib-uglify": "^1.0.1",
33102 "grunt-mocha-istanbul": "^3.0.1",
33103 "grunt-saucelabs": "^8.6.2",
33104 "istanbul": "^0.4.2",
33105 "jscs": "^2.9.0",
33106 "jshint": "^2.6.0",
33107 "mocha": "^2.1.0"
33108 },
33109 "directories": {},
33110 "dist": {
33111 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
33112 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
33113 },
33114 "files": [
33115 "lib"
33116 ],
33117 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
33118 "homepage": "https://github.com/indutny/elliptic",
33119 "keywords": [
33120 "EC",
33121 "Elliptic",
33122 "curve",
33123 "Cryptography"
33124 ],
33125 "license": "MIT",
33126 "main": "lib/elliptic.js",
33127 "maintainers": [
33128 {
33129 "name": "indutny",
33130 "email": "fedor@indutny.com"
33131 }
33132 ],
33133 "name": "elliptic",
33134 "optionalDependencies": {},
33135 "readme": "ERROR: No README data found!",
33136 "repository": {
33137 "type": "git",
33138 "url": "git+ssh://git@github.com/indutny/elliptic.git"
33139 },
33140 "scripts": {
33141 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
33142 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
33143 "lint": "npm run jscs && npm run jshint",
33144 "test": "npm run lint && npm run unit",
33145 "unit": "istanbul test _mocha --reporter=spec test/index.js",
33146 "version": "grunt dist && git add dist/"
33147 },
33148 "version": "6.3.3"
33149 }
33150
33151 },{}],56:[function(require,module,exports){
33152 (function (Buffer){
33153 'use strict';
33154
33155 var isHexPrefixed = require('is-hex-prefixed');
33156 var stripHexPrefix = require('strip-hex-prefix');
33157
33158 /**
33159 * Pads a `String` to have an even length
33160 * @param {String} value
33161 * @return {String} output
33162 */
33163 function padToEven(value) {
33164 var a = value; // eslint-disable-line
33165
33166 if (typeof a !== 'string') {
33167 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
33168 }
33169
33170 if (a.length % 2) {
33171 a = '0' + a;
33172 }
33173
33174 return a;
33175 }
33176
33177 /**
33178 * Converts a `Number` into a hex `String`
33179 * @param {Number} i
33180 * @return {String}
33181 */
33182 function intToHex(i) {
33183 var hex = i.toString(16); // eslint-disable-line
33184
33185 return '0x' + padToEven(hex);
33186 }
33187
33188 /**
33189 * Converts an `Number` to a `Buffer`
33190 * @param {Number} i
33191 * @return {Buffer}
33192 */
33193 function intToBuffer(i) {
33194 var hex = intToHex(i);
33195
33196 return new Buffer(hex.slice(2), 'hex');
33197 }
33198
33199 /**
33200 * Get the binary size of a string
33201 * @param {String} str
33202 * @return {Number}
33203 */
33204 function getBinarySize(str) {
33205 if (typeof str !== 'string') {
33206 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
33207 }
33208
33209 return Buffer.byteLength(str, 'utf8');
33210 }
33211
33212 /**
33213 * Returns TRUE if the first specified array contains all elements
33214 * from the second one. FALSE otherwise.
33215 *
33216 * @param {array} superset
33217 * @param {array} subset
33218 *
33219 * @returns {boolean}
33220 */
33221 function arrayContainsArray(superset, subset, some) {
33222 if (Array.isArray(superset) !== true) {
33223 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
33224 }
33225 if (Array.isArray(subset) !== true) {
33226 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
33227 }
33228
33229 return subset[Boolean(some) && 'some' || 'every'](function (value) {
33230 return superset.indexOf(value) >= 0;
33231 });
33232 }
33233
33234 /**
33235 * Should be called to get utf8 from it's hex representation
33236 *
33237 * @method toUtf8
33238 * @param {String} string in hex
33239 * @returns {String} ascii string representation of hex value
33240 */
33241 function toUtf8(hex) {
33242 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
33243
33244 return bufferValue.toString('utf8');
33245 }
33246
33247 /**
33248 * Should be called to get ascii from it's hex representation
33249 *
33250 * @method toAscii
33251 * @param {String} string in hex
33252 * @returns {String} ascii string representation of hex value
33253 */
33254 function toAscii(hex) {
33255 var str = ''; // eslint-disable-line
33256 var i = 0,
33257 l = hex.length; // eslint-disable-line
33258
33259 if (hex.substring(0, 2) === '0x') {
33260 i = 2;
33261 }
33262
33263 for (; i < l; i += 2) {
33264 var code = parseInt(hex.substr(i, 2), 16);
33265 str += String.fromCharCode(code);
33266 }
33267
33268 return str;
33269 }
33270
33271 /**
33272 * Should be called to get hex representation (prefixed by 0x) of utf8 string
33273 *
33274 * @method fromUtf8
33275 * @param {String} string
33276 * @param {Number} optional padding
33277 * @returns {String} hex representation of input string
33278 */
33279 function fromUtf8(stringValue) {
33280 var str = new Buffer(stringValue, 'utf8');
33281
33282 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
33283 }
33284
33285 /**
33286 * Should be called to get hex representation (prefixed by 0x) of ascii string
33287 *
33288 * @method fromAscii
33289 * @param {String} string
33290 * @param {Number} optional padding
33291 * @returns {String} hex representation of input string
33292 */
33293 function fromAscii(stringValue) {
33294 var hex = ''; // eslint-disable-line
33295 for (var i = 0; i < stringValue.length; i++) {
33296 // eslint-disable-line
33297 var code = stringValue.charCodeAt(i);
33298 var n = code.toString(16);
33299 hex += n.length < 2 ? '0' + n : n;
33300 }
33301
33302 return '0x' + hex;
33303 }
33304
33305 /**
33306 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
33307 *
33308 * @method getKeys get specific key from inner object array of objects
33309 * @param {String} params
33310 * @param {String} key
33311 * @param {Boolean} allowEmpty
33312 * @returns {Array} output just a simple array of output keys
33313 */
33314 function getKeys(params, key, allowEmpty) {
33315 if (!Array.isArray(params)) {
33316 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
33317 }
33318 if (typeof key !== 'string') {
33319 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
33320 }
33321
33322 var result = []; // eslint-disable-line
33323
33324 for (var i = 0; i < params.length; i++) {
33325 // eslint-disable-line
33326 var value = params[i][key]; // eslint-disable-line
33327 if (allowEmpty && !value) {
33328 value = '';
33329 } else if (typeof value !== 'string') {
33330 throw new Error('invalid abi');
33331 }
33332 result.push(value);
33333 }
33334
33335 return result;
33336 }
33337
33338 /**
33339 * Is the string a hex string.
33340 *
33341 * @method check if string is hex string of specific length
33342 * @param {String} value
33343 * @param {Number} length
33344 * @returns {Boolean} output the string is a hex string
33345 */
33346 function isHexString(value, length) {
33347 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
33348 return false;
33349 }
33350
33351 if (length && value.length !== 2 + 2 * length) {
33352 return false;
33353 }
33354
33355 return true;
33356 }
33357
33358 module.exports = {
33359 arrayContainsArray: arrayContainsArray,
33360 intToBuffer: intToBuffer,
33361 getBinarySize: getBinarySize,
33362 isHexPrefixed: isHexPrefixed,
33363 stripHexPrefix: stripHexPrefix,
33364 padToEven: padToEven,
33365 intToHex: intToHex,
33366 fromAscii: fromAscii,
33367 fromUtf8: fromUtf8,
33368 toAscii: toAscii,
33369 toUtf8: toUtf8,
33370 getKeys: getKeys,
33371 isHexString: isHexString
33372 };
33373 }).call(this,require("buffer").Buffer)
33374 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
33375 var hash = exports;
33376
33377 hash.utils = require('./hash/utils');
33378 hash.common = require('./hash/common');
33379 hash.sha = require('./hash/sha');
33380 hash.ripemd = require('./hash/ripemd');
33381 hash.hmac = require('./hash/hmac');
33382
33383 // Proxy hash functions to the main object
33384 hash.sha1 = hash.sha.sha1;
33385 hash.sha256 = hash.sha.sha256;
33386 hash.sha224 = hash.sha.sha224;
33387 hash.sha384 = hash.sha.sha384;
33388 hash.sha512 = hash.sha.sha512;
33389 hash.ripemd160 = hash.ripemd.ripemd160;
33390
33391 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
33392 var hash = require('../hash');
33393 var utils = hash.utils;
33394 var assert = utils.assert;
33395
33396 function BlockHash() {
33397 this.pending = null;
33398 this.pendingTotal = 0;
33399 this.blockSize = this.constructor.blockSize;
33400 this.outSize = this.constructor.outSize;
33401 this.hmacStrength = this.constructor.hmacStrength;
33402 this.padLength = this.constructor.padLength / 8;
33403 this.endian = 'big';
33404
33405 this._delta8 = this.blockSize / 8;
33406 this._delta32 = this.blockSize / 32;
33407 }
33408 exports.BlockHash = BlockHash;
33409
33410 BlockHash.prototype.update = function update(msg, enc) {
33411 // Convert message to array, pad it, and join into 32bit blocks
33412 msg = utils.toArray(msg, enc);
33413 if (!this.pending)
33414 this.pending = msg;
33415 else
33416 this.pending = this.pending.concat(msg);
33417 this.pendingTotal += msg.length;
33418
33419 // Enough data, try updating
33420 if (this.pending.length >= this._delta8) {
33421 msg = this.pending;
33422
33423 // Process pending data in blocks
33424 var r = msg.length % this._delta8;
33425 this.pending = msg.slice(msg.length - r, msg.length);
33426 if (this.pending.length === 0)
33427 this.pending = null;
33428
33429 msg = utils.join32(msg, 0, msg.length - r, this.endian);
33430 for (var i = 0; i < msg.length; i += this._delta32)
33431 this._update(msg, i, i + this._delta32);
33432 }
33433
33434 return this;
33435 };
33436
33437 BlockHash.prototype.digest = function digest(enc) {
33438 this.update(this._pad());
33439 assert(this.pending === null);
33440
33441 return this._digest(enc);
33442 };
33443
33444 BlockHash.prototype._pad = function pad() {
33445 var len = this.pendingTotal;
33446 var bytes = this._delta8;
33447 var k = bytes - ((len + this.padLength) % bytes);
33448 var res = new Array(k + this.padLength);
33449 res[0] = 0x80;
33450 for (var i = 1; i < k; i++)
33451 res[i] = 0;
33452
33453 // Append length
33454 len <<= 3;
33455 if (this.endian === 'big') {
33456 for (var t = 8; t < this.padLength; t++)
33457 res[i++] = 0;
33458
33459 res[i++] = 0;
33460 res[i++] = 0;
33461 res[i++] = 0;
33462 res[i++] = 0;
33463 res[i++] = (len >>> 24) & 0xff;
33464 res[i++] = (len >>> 16) & 0xff;
33465 res[i++] = (len >>> 8) & 0xff;
33466 res[i++] = len & 0xff;
33467 } else {
33468 res[i++] = len & 0xff;
33469 res[i++] = (len >>> 8) & 0xff;
33470 res[i++] = (len >>> 16) & 0xff;
33471 res[i++] = (len >>> 24) & 0xff;
33472 res[i++] = 0;
33473 res[i++] = 0;
33474 res[i++] = 0;
33475 res[i++] = 0;
33476
33477 for (var t = 8; t < this.padLength; t++)
33478 res[i++] = 0;
33479 }
33480
33481 return res;
33482 };
33483
33484 },{"../hash":57}],59:[function(require,module,exports){
33485 var hmac = exports;
33486
33487 var hash = require('../hash');
33488 var utils = hash.utils;
33489 var assert = utils.assert;
33490
33491 function Hmac(hash, key, enc) {
33492 if (!(this instanceof Hmac))
33493 return new Hmac(hash, key, enc);
33494 this.Hash = hash;
33495 this.blockSize = hash.blockSize / 8;
33496 this.outSize = hash.outSize / 8;
33497 this.inner = null;
33498 this.outer = null;
33499
33500 this._init(utils.toArray(key, enc));
33501 }
33502 module.exports = Hmac;
33503
33504 Hmac.prototype._init = function init(key) {
33505 // Shorten key, if needed
33506 if (key.length > this.blockSize)
33507 key = new this.Hash().update(key).digest();
33508 assert(key.length <= this.blockSize);
33509
33510 // Add padding to key
33511 for (var i = key.length; i < this.blockSize; i++)
33512 key.push(0);
33513
33514 for (var i = 0; i < key.length; i++)
33515 key[i] ^= 0x36;
33516 this.inner = new this.Hash().update(key);
33517
33518 // 0x36 ^ 0x5c = 0x6a
33519 for (var i = 0; i < key.length; i++)
33520 key[i] ^= 0x6a;
33521 this.outer = new this.Hash().update(key);
33522 };
33523
33524 Hmac.prototype.update = function update(msg, enc) {
33525 this.inner.update(msg, enc);
33526 return this;
33527 };
33528
33529 Hmac.prototype.digest = function digest(enc) {
33530 this.outer.update(this.inner.digest());
33531 return this.outer.digest(enc);
33532 };
33533
33534 },{"../hash":57}],60:[function(require,module,exports){
33535 var hash = require('../hash');
33536 var utils = hash.utils;
33537
33538 var rotl32 = utils.rotl32;
33539 var sum32 = utils.sum32;
33540 var sum32_3 = utils.sum32_3;
33541 var sum32_4 = utils.sum32_4;
33542 var BlockHash = hash.common.BlockHash;
33543
33544 function RIPEMD160() {
33545 if (!(this instanceof RIPEMD160))
33546 return new RIPEMD160();
33547
33548 BlockHash.call(this);
33549
33550 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
33551 this.endian = 'little';
33552 }
33553 utils.inherits(RIPEMD160, BlockHash);
33554 exports.ripemd160 = RIPEMD160;
33555
33556 RIPEMD160.blockSize = 512;
33557 RIPEMD160.outSize = 160;
33558 RIPEMD160.hmacStrength = 192;
33559 RIPEMD160.padLength = 64;
33560
33561 RIPEMD160.prototype._update = function update(msg, start) {
33562 var A = this.h[0];
33563 var B = this.h[1];
33564 var C = this.h[2];
33565 var D = this.h[3];
33566 var E = this.h[4];
33567 var Ah = A;
33568 var Bh = B;
33569 var Ch = C;
33570 var Dh = D;
33571 var Eh = E;
33572 for (var j = 0; j < 80; j++) {
33573 var T = sum32(
33574 rotl32(
33575 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
33576 s[j]),
33577 E);
33578 A = E;
33579 E = D;
33580 D = rotl32(C, 10);
33581 C = B;
33582 B = T;
33583 T = sum32(
33584 rotl32(
33585 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
33586 sh[j]),
33587 Eh);
33588 Ah = Eh;
33589 Eh = Dh;
33590 Dh = rotl32(Ch, 10);
33591 Ch = Bh;
33592 Bh = T;
33593 }
33594 T = sum32_3(this.h[1], C, Dh);
33595 this.h[1] = sum32_3(this.h[2], D, Eh);
33596 this.h[2] = sum32_3(this.h[3], E, Ah);
33597 this.h[3] = sum32_3(this.h[4], A, Bh);
33598 this.h[4] = sum32_3(this.h[0], B, Ch);
33599 this.h[0] = T;
33600 };
33601
33602 RIPEMD160.prototype._digest = function digest(enc) {
33603 if (enc === 'hex')
33604 return utils.toHex32(this.h, 'little');
33605 else
33606 return utils.split32(this.h, 'little');
33607 };
33608
33609 function f(j, x, y, z) {
33610 if (j <= 15)
33611 return x ^ y ^ z;
33612 else if (j <= 31)
33613 return (x & y) | ((~x) & z);
33614 else if (j <= 47)
33615 return (x | (~y)) ^ z;
33616 else if (j <= 63)
33617 return (x & z) | (y & (~z));
33618 else
33619 return x ^ (y | (~z));
33620 }
33621
33622 function K(j) {
33623 if (j <= 15)
33624 return 0x00000000;
33625 else if (j <= 31)
33626 return 0x5a827999;
33627 else if (j <= 47)
33628 return 0x6ed9eba1;
33629 else if (j <= 63)
33630 return 0x8f1bbcdc;
33631 else
33632 return 0xa953fd4e;
33633 }
33634
33635 function Kh(j) {
33636 if (j <= 15)
33637 return 0x50a28be6;
33638 else if (j <= 31)
33639 return 0x5c4dd124;
33640 else if (j <= 47)
33641 return 0x6d703ef3;
33642 else if (j <= 63)
33643 return 0x7a6d76e9;
33644 else
33645 return 0x00000000;
33646 }
33647
33648 var r = [
33649 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
33650 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
33651 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
33652 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
33653 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
33654 ];
33655
33656 var rh = [
33657 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
33658 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
33659 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
33660 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
33661 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
33662 ];
33663
33664 var s = [
33665 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
33666 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
33667 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
33668 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
33669 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
33670 ];
33671
33672 var sh = [
33673 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
33674 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
33675 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
33676 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
33677 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
33678 ];
33679
33680 },{"../hash":57}],61:[function(require,module,exports){
33681 var hash = require('../hash');
33682 var utils = hash.utils;
33683 var assert = utils.assert;
33684
33685 var rotr32 = utils.rotr32;
33686 var rotl32 = utils.rotl32;
33687 var sum32 = utils.sum32;
33688 var sum32_4 = utils.sum32_4;
33689 var sum32_5 = utils.sum32_5;
33690 var rotr64_hi = utils.rotr64_hi;
33691 var rotr64_lo = utils.rotr64_lo;
33692 var shr64_hi = utils.shr64_hi;
33693 var shr64_lo = utils.shr64_lo;
33694 var sum64 = utils.sum64;
33695 var sum64_hi = utils.sum64_hi;
33696 var sum64_lo = utils.sum64_lo;
33697 var sum64_4_hi = utils.sum64_4_hi;
33698 var sum64_4_lo = utils.sum64_4_lo;
33699 var sum64_5_hi = utils.sum64_5_hi;
33700 var sum64_5_lo = utils.sum64_5_lo;
33701 var BlockHash = hash.common.BlockHash;
33702
33703 var sha256_K = [
33704 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
33705 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
33706 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
33707 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
33708 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
33709 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
33710 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
33711 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
33712 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
33713 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
33714 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
33715 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
33716 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
33717 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
33718 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
33719 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
33720 ];
33721
33722 var sha512_K = [
33723 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
33724 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
33725 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
33726 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
33727 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
33728 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
33729 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
33730 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
33731 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
33732 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
33733 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
33734 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
33735 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
33736 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
33737 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
33738 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
33739 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
33740 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
33741 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
33742 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
33743 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
33744 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
33745 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
33746 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
33747 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
33748 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
33749 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
33750 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
33751 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
33752 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
33753 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
33754 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
33755 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
33756 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
33757 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
33758 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
33759 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
33760 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
33761 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
33762 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
33763 ];
33764
33765 var sha1_K = [
33766 0x5A827999, 0x6ED9EBA1,
33767 0x8F1BBCDC, 0xCA62C1D6
33768 ];
33769
33770 function SHA256() {
33771 if (!(this instanceof SHA256))
33772 return new SHA256();
33773
33774 BlockHash.call(this);
33775 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
33776 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
33777 this.k = sha256_K;
33778 this.W = new Array(64);
33779 }
33780 utils.inherits(SHA256, BlockHash);
33781 exports.sha256 = SHA256;
33782
33783 SHA256.blockSize = 512;
33784 SHA256.outSize = 256;
33785 SHA256.hmacStrength = 192;
33786 SHA256.padLength = 64;
33787
33788 SHA256.prototype._update = function _update(msg, start) {
33789 var W = this.W;
33790
33791 for (var i = 0; i < 16; i++)
33792 W[i] = msg[start + i];
33793 for (; i < W.length; i++)
33794 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
33795
33796 var a = this.h[0];
33797 var b = this.h[1];
33798 var c = this.h[2];
33799 var d = this.h[3];
33800 var e = this.h[4];
33801 var f = this.h[5];
33802 var g = this.h[6];
33803 var h = this.h[7];
33804
33805 assert(this.k.length === W.length);
33806 for (var i = 0; i < W.length; i++) {
33807 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
33808 var T2 = sum32(s0_256(a), maj32(a, b, c));
33809 h = g;
33810 g = f;
33811 f = e;
33812 e = sum32(d, T1);
33813 d = c;
33814 c = b;
33815 b = a;
33816 a = sum32(T1, T2);
33817 }
33818
33819 this.h[0] = sum32(this.h[0], a);
33820 this.h[1] = sum32(this.h[1], b);
33821 this.h[2] = sum32(this.h[2], c);
33822 this.h[3] = sum32(this.h[3], d);
33823 this.h[4] = sum32(this.h[4], e);
33824 this.h[5] = sum32(this.h[5], f);
33825 this.h[6] = sum32(this.h[6], g);
33826 this.h[7] = sum32(this.h[7], h);
33827 };
33828
33829 SHA256.prototype._digest = function digest(enc) {
33830 if (enc === 'hex')
33831 return utils.toHex32(this.h, 'big');
33832 else
33833 return utils.split32(this.h, 'big');
33834 };
33835
33836 function SHA224() {
33837 if (!(this instanceof SHA224))
33838 return new SHA224();
33839
33840 SHA256.call(this);
33841 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
33842 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
33843 }
33844 utils.inherits(SHA224, SHA256);
33845 exports.sha224 = SHA224;
33846
33847 SHA224.blockSize = 512;
33848 SHA224.outSize = 224;
33849 SHA224.hmacStrength = 192;
33850 SHA224.padLength = 64;
33851
33852 SHA224.prototype._digest = function digest(enc) {
33853 // Just truncate output
33854 if (enc === 'hex')
33855 return utils.toHex32(this.h.slice(0, 7), 'big');
33856 else
33857 return utils.split32(this.h.slice(0, 7), 'big');
33858 };
33859
33860 function SHA512() {
33861 if (!(this instanceof SHA512))
33862 return new SHA512();
33863
33864 BlockHash.call(this);
33865 this.h = [ 0x6a09e667, 0xf3bcc908,
33866 0xbb67ae85, 0x84caa73b,
33867 0x3c6ef372, 0xfe94f82b,
33868 0xa54ff53a, 0x5f1d36f1,
33869 0x510e527f, 0xade682d1,
33870 0x9b05688c, 0x2b3e6c1f,
33871 0x1f83d9ab, 0xfb41bd6b,
33872 0x5be0cd19, 0x137e2179 ];
33873 this.k = sha512_K;
33874 this.W = new Array(160);
33875 }
33876 utils.inherits(SHA512, BlockHash);
33877 exports.sha512 = SHA512;
33878
33879 SHA512.blockSize = 1024;
33880 SHA512.outSize = 512;
33881 SHA512.hmacStrength = 192;
33882 SHA512.padLength = 128;
33883
33884 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
33885 var W = this.W;
33886
33887 // 32 x 32bit words
33888 for (var i = 0; i < 32; i++)
33889 W[i] = msg[start + i];
33890 for (; i < W.length; i += 2) {
33891 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
33892 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
33893 var c1_hi = W[i - 14]; // i - 7
33894 var c1_lo = W[i - 13];
33895 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
33896 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
33897 var c3_hi = W[i - 32]; // i - 16
33898 var c3_lo = W[i - 31];
33899
33900 W[i] = sum64_4_hi(c0_hi, c0_lo,
33901 c1_hi, c1_lo,
33902 c2_hi, c2_lo,
33903 c3_hi, c3_lo);
33904 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
33905 c1_hi, c1_lo,
33906 c2_hi, c2_lo,
33907 c3_hi, c3_lo);
33908 }
33909 };
33910
33911 SHA512.prototype._update = function _update(msg, start) {
33912 this._prepareBlock(msg, start);
33913
33914 var W = this.W;
33915
33916 var ah = this.h[0];
33917 var al = this.h[1];
33918 var bh = this.h[2];
33919 var bl = this.h[3];
33920 var ch = this.h[4];
33921 var cl = this.h[5];
33922 var dh = this.h[6];
33923 var dl = this.h[7];
33924 var eh = this.h[8];
33925 var el = this.h[9];
33926 var fh = this.h[10];
33927 var fl = this.h[11];
33928 var gh = this.h[12];
33929 var gl = this.h[13];
33930 var hh = this.h[14];
33931 var hl = this.h[15];
33932
33933 assert(this.k.length === W.length);
33934 for (var i = 0; i < W.length; i += 2) {
33935 var c0_hi = hh;
33936 var c0_lo = hl;
33937 var c1_hi = s1_512_hi(eh, el);
33938 var c1_lo = s1_512_lo(eh, el);
33939 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
33940 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
33941 var c3_hi = this.k[i];
33942 var c3_lo = this.k[i + 1];
33943 var c4_hi = W[i];
33944 var c4_lo = W[i + 1];
33945
33946 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
33947 c1_hi, c1_lo,
33948 c2_hi, c2_lo,
33949 c3_hi, c3_lo,
33950 c4_hi, c4_lo);
33951 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
33952 c1_hi, c1_lo,
33953 c2_hi, c2_lo,
33954 c3_hi, c3_lo,
33955 c4_hi, c4_lo);
33956
33957 var c0_hi = s0_512_hi(ah, al);
33958 var c0_lo = s0_512_lo(ah, al);
33959 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
33960 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
33961
33962 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
33963 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
33964
33965 hh = gh;
33966 hl = gl;
33967
33968 gh = fh;
33969 gl = fl;
33970
33971 fh = eh;
33972 fl = el;
33973
33974 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
33975 el = sum64_lo(dl, dl, T1_hi, T1_lo);
33976
33977 dh = ch;
33978 dl = cl;
33979
33980 ch = bh;
33981 cl = bl;
33982
33983 bh = ah;
33984 bl = al;
33985
33986 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
33987 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
33988 }
33989
33990 sum64(this.h, 0, ah, al);
33991 sum64(this.h, 2, bh, bl);
33992 sum64(this.h, 4, ch, cl);
33993 sum64(this.h, 6, dh, dl);
33994 sum64(this.h, 8, eh, el);
33995 sum64(this.h, 10, fh, fl);
33996 sum64(this.h, 12, gh, gl);
33997 sum64(this.h, 14, hh, hl);
33998 };
33999
34000 SHA512.prototype._digest = function digest(enc) {
34001 if (enc === 'hex')
34002 return utils.toHex32(this.h, 'big');
34003 else
34004 return utils.split32(this.h, 'big');
34005 };
34006
34007 function SHA384() {
34008 if (!(this instanceof SHA384))
34009 return new SHA384();
34010
34011 SHA512.call(this);
34012 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
34013 0x629a292a, 0x367cd507,
34014 0x9159015a, 0x3070dd17,
34015 0x152fecd8, 0xf70e5939,
34016 0x67332667, 0xffc00b31,
34017 0x8eb44a87, 0x68581511,
34018 0xdb0c2e0d, 0x64f98fa7,
34019 0x47b5481d, 0xbefa4fa4 ];
34020 }
34021 utils.inherits(SHA384, SHA512);
34022 exports.sha384 = SHA384;
34023
34024 SHA384.blockSize = 1024;
34025 SHA384.outSize = 384;
34026 SHA384.hmacStrength = 192;
34027 SHA384.padLength = 128;
34028
34029 SHA384.prototype._digest = function digest(enc) {
34030 if (enc === 'hex')
34031 return utils.toHex32(this.h.slice(0, 12), 'big');
34032 else
34033 return utils.split32(this.h.slice(0, 12), 'big');
34034 };
34035
34036 function SHA1() {
34037 if (!(this instanceof SHA1))
34038 return new SHA1();
34039
34040 BlockHash.call(this);
34041 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
34042 0x10325476, 0xc3d2e1f0 ];
34043 this.W = new Array(80);
34044 }
34045
34046 utils.inherits(SHA1, BlockHash);
34047 exports.sha1 = SHA1;
34048
34049 SHA1.blockSize = 512;
34050 SHA1.outSize = 160;
34051 SHA1.hmacStrength = 80;
34052 SHA1.padLength = 64;
34053
34054 SHA1.prototype._update = function _update(msg, start) {
34055 var W = this.W;
34056
34057 for (var i = 0; i < 16; i++)
34058 W[i] = msg[start + i];
34059
34060 for(; i < W.length; i++)
34061 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
34062
34063 var a = this.h[0];
34064 var b = this.h[1];
34065 var c = this.h[2];
34066 var d = this.h[3];
34067 var e = this.h[4];
34068
34069 for (var i = 0; i < W.length; i++) {
34070 var s = ~~(i / 20);
34071 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
34072 e = d;
34073 d = c;
34074 c = rotl32(b, 30);
34075 b = a;
34076 a = t;
34077 }
34078
34079 this.h[0] = sum32(this.h[0], a);
34080 this.h[1] = sum32(this.h[1], b);
34081 this.h[2] = sum32(this.h[2], c);
34082 this.h[3] = sum32(this.h[3], d);
34083 this.h[4] = sum32(this.h[4], e);
34084 };
34085
34086 SHA1.prototype._digest = function digest(enc) {
34087 if (enc === 'hex')
34088 return utils.toHex32(this.h, 'big');
34089 else
34090 return utils.split32(this.h, 'big');
34091 };
34092
34093 function ch32(x, y, z) {
34094 return (x & y) ^ ((~x) & z);
34095 }
34096
34097 function maj32(x, y, z) {
34098 return (x & y) ^ (x & z) ^ (y & z);
34099 }
34100
34101 function p32(x, y, z) {
34102 return x ^ y ^ z;
34103 }
34104
34105 function s0_256(x) {
34106 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
34107 }
34108
34109 function s1_256(x) {
34110 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
34111 }
34112
34113 function g0_256(x) {
34114 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
34115 }
34116
34117 function g1_256(x) {
34118 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
34119 }
34120
34121 function ft_1(s, x, y, z) {
34122 if (s === 0)
34123 return ch32(x, y, z);
34124 if (s === 1 || s === 3)
34125 return p32(x, y, z);
34126 if (s === 2)
34127 return maj32(x, y, z);
34128 }
34129
34130 function ch64_hi(xh, xl, yh, yl, zh, zl) {
34131 var r = (xh & yh) ^ ((~xh) & zh);
34132 if (r < 0)
34133 r += 0x100000000;
34134 return r;
34135 }
34136
34137 function ch64_lo(xh, xl, yh, yl, zh, zl) {
34138 var r = (xl & yl) ^ ((~xl) & zl);
34139 if (r < 0)
34140 r += 0x100000000;
34141 return r;
34142 }
34143
34144 function maj64_hi(xh, xl, yh, yl, zh, zl) {
34145 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
34146 if (r < 0)
34147 r += 0x100000000;
34148 return r;
34149 }
34150
34151 function maj64_lo(xh, xl, yh, yl, zh, zl) {
34152 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
34153 if (r < 0)
34154 r += 0x100000000;
34155 return r;
34156 }
34157
34158 function s0_512_hi(xh, xl) {
34159 var c0_hi = rotr64_hi(xh, xl, 28);
34160 var c1_hi = rotr64_hi(xl, xh, 2); // 34
34161 var c2_hi = rotr64_hi(xl, xh, 7); // 39
34162
34163 var r = c0_hi ^ c1_hi ^ c2_hi;
34164 if (r < 0)
34165 r += 0x100000000;
34166 return r;
34167 }
34168
34169 function s0_512_lo(xh, xl) {
34170 var c0_lo = rotr64_lo(xh, xl, 28);
34171 var c1_lo = rotr64_lo(xl, xh, 2); // 34
34172 var c2_lo = rotr64_lo(xl, xh, 7); // 39
34173
34174 var r = c0_lo ^ c1_lo ^ c2_lo;
34175 if (r < 0)
34176 r += 0x100000000;
34177 return r;
34178 }
34179
34180 function s1_512_hi(xh, xl) {
34181 var c0_hi = rotr64_hi(xh, xl, 14);
34182 var c1_hi = rotr64_hi(xh, xl, 18);
34183 var c2_hi = rotr64_hi(xl, xh, 9); // 41
34184
34185 var r = c0_hi ^ c1_hi ^ c2_hi;
34186 if (r < 0)
34187 r += 0x100000000;
34188 return r;
34189 }
34190
34191 function s1_512_lo(xh, xl) {
34192 var c0_lo = rotr64_lo(xh, xl, 14);
34193 var c1_lo = rotr64_lo(xh, xl, 18);
34194 var c2_lo = rotr64_lo(xl, xh, 9); // 41
34195
34196 var r = c0_lo ^ c1_lo ^ c2_lo;
34197 if (r < 0)
34198 r += 0x100000000;
34199 return r;
34200 }
34201
34202 function g0_512_hi(xh, xl) {
34203 var c0_hi = rotr64_hi(xh, xl, 1);
34204 var c1_hi = rotr64_hi(xh, xl, 8);
34205 var c2_hi = shr64_hi(xh, xl, 7);
34206
34207 var r = c0_hi ^ c1_hi ^ c2_hi;
34208 if (r < 0)
34209 r += 0x100000000;
34210 return r;
34211 }
34212
34213 function g0_512_lo(xh, xl) {
34214 var c0_lo = rotr64_lo(xh, xl, 1);
34215 var c1_lo = rotr64_lo(xh, xl, 8);
34216 var c2_lo = shr64_lo(xh, xl, 7);
34217
34218 var r = c0_lo ^ c1_lo ^ c2_lo;
34219 if (r < 0)
34220 r += 0x100000000;
34221 return r;
34222 }
34223
34224 function g1_512_hi(xh, xl) {
34225 var c0_hi = rotr64_hi(xh, xl, 19);
34226 var c1_hi = rotr64_hi(xl, xh, 29); // 61
34227 var c2_hi = shr64_hi(xh, xl, 6);
34228
34229 var r = c0_hi ^ c1_hi ^ c2_hi;
34230 if (r < 0)
34231 r += 0x100000000;
34232 return r;
34233 }
34234
34235 function g1_512_lo(xh, xl) {
34236 var c0_lo = rotr64_lo(xh, xl, 19);
34237 var c1_lo = rotr64_lo(xl, xh, 29); // 61
34238 var c2_lo = shr64_lo(xh, xl, 6);
34239
34240 var r = c0_lo ^ c1_lo ^ c2_lo;
34241 if (r < 0)
34242 r += 0x100000000;
34243 return r;
34244 }
34245
34246 },{"../hash":57}],62:[function(require,module,exports){
34247 var utils = exports;
34248 var inherits = require('inherits');
34249
34250 function toArray(msg, enc) {
34251 if (Array.isArray(msg))
34252 return msg.slice();
34253 if (!msg)
34254 return [];
34255 var res = [];
34256 if (typeof msg === 'string') {
34257 if (!enc) {
34258 for (var i = 0; i < msg.length; i++) {
34259 var c = msg.charCodeAt(i);
34260 var hi = c >> 8;
34261 var lo = c & 0xff;
34262 if (hi)
34263 res.push(hi, lo);
34264 else
34265 res.push(lo);
34266 }
34267 } else if (enc === 'hex') {
34268 msg = msg.replace(/[^a-z0-9]+/ig, '');
34269 if (msg.length % 2 !== 0)
34270 msg = '0' + msg;
34271 for (var i = 0; i < msg.length; i += 2)
34272 res.push(parseInt(msg[i] + msg[i + 1], 16));
34273 }
34274 } else {
34275 for (var i = 0; i < msg.length; i++)
34276 res[i] = msg[i] | 0;
34277 }
34278 return res;
34279 }
34280 utils.toArray = toArray;
34281
34282 function toHex(msg) {
34283 var res = '';
34284 for (var i = 0; i < msg.length; i++)
34285 res += zero2(msg[i].toString(16));
34286 return res;
34287 }
34288 utils.toHex = toHex;
34289
34290 function htonl(w) {
34291 var res = (w >>> 24) |
34292 ((w >>> 8) & 0xff00) |
34293 ((w << 8) & 0xff0000) |
34294 ((w & 0xff) << 24);
34295 return res >>> 0;
34296 }
34297 utils.htonl = htonl;
34298
34299 function toHex32(msg, endian) {
34300 var res = '';
34301 for (var i = 0; i < msg.length; i++) {
34302 var w = msg[i];
34303 if (endian === 'little')
34304 w = htonl(w);
34305 res += zero8(w.toString(16));
34306 }
34307 return res;
34308 }
34309 utils.toHex32 = toHex32;
34310
34311 function zero2(word) {
34312 if (word.length === 1)
34313 return '0' + word;
34314 else
34315 return word;
34316 }
34317 utils.zero2 = zero2;
34318
34319 function zero8(word) {
34320 if (word.length === 7)
34321 return '0' + word;
34322 else if (word.length === 6)
34323 return '00' + word;
34324 else if (word.length === 5)
34325 return '000' + word;
34326 else if (word.length === 4)
34327 return '0000' + word;
34328 else if (word.length === 3)
34329 return '00000' + word;
34330 else if (word.length === 2)
34331 return '000000' + word;
34332 else if (word.length === 1)
34333 return '0000000' + word;
34334 else
34335 return word;
34336 }
34337 utils.zero8 = zero8;
34338
34339 function join32(msg, start, end, endian) {
34340 var len = end - start;
34341 assert(len % 4 === 0);
34342 var res = new Array(len / 4);
34343 for (var i = 0, k = start; i < res.length; i++, k += 4) {
34344 var w;
34345 if (endian === 'big')
34346 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
34347 else
34348 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
34349 res[i] = w >>> 0;
34350 }
34351 return res;
34352 }
34353 utils.join32 = join32;
34354
34355 function split32(msg, endian) {
34356 var res = new Array(msg.length * 4);
34357 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
34358 var m = msg[i];
34359 if (endian === 'big') {
34360 res[k] = m >>> 24;
34361 res[k + 1] = (m >>> 16) & 0xff;
34362 res[k + 2] = (m >>> 8) & 0xff;
34363 res[k + 3] = m & 0xff;
34364 } else {
34365 res[k + 3] = m >>> 24;
34366 res[k + 2] = (m >>> 16) & 0xff;
34367 res[k + 1] = (m >>> 8) & 0xff;
34368 res[k] = m & 0xff;
34369 }
34370 }
34371 return res;
34372 }
34373 utils.split32 = split32;
34374
34375 function rotr32(w, b) {
34376 return (w >>> b) | (w << (32 - b));
34377 }
34378 utils.rotr32 = rotr32;
34379
34380 function rotl32(w, b) {
34381 return (w << b) | (w >>> (32 - b));
34382 }
34383 utils.rotl32 = rotl32;
34384
34385 function sum32(a, b) {
34386 return (a + b) >>> 0;
34387 }
34388 utils.sum32 = sum32;
34389
34390 function sum32_3(a, b, c) {
34391 return (a + b + c) >>> 0;
34392 }
34393 utils.sum32_3 = sum32_3;
34394
34395 function sum32_4(a, b, c, d) {
34396 return (a + b + c + d) >>> 0;
34397 }
34398 utils.sum32_4 = sum32_4;
34399
34400 function sum32_5(a, b, c, d, e) {
34401 return (a + b + c + d + e) >>> 0;
34402 }
34403 utils.sum32_5 = sum32_5;
34404
34405 function assert(cond, msg) {
34406 if (!cond)
34407 throw new Error(msg || 'Assertion failed');
34408 }
34409 utils.assert = assert;
34410
34411 utils.inherits = inherits;
34412
34413 function sum64(buf, pos, ah, al) {
34414 var bh = buf[pos];
34415 var bl = buf[pos + 1];
34416
34417 var lo = (al + bl) >>> 0;
34418 var hi = (lo < al ? 1 : 0) + ah + bh;
34419 buf[pos] = hi >>> 0;
34420 buf[pos + 1] = lo;
34421 }
34422 exports.sum64 = sum64;
34423
34424 function sum64_hi(ah, al, bh, bl) {
34425 var lo = (al + bl) >>> 0;
34426 var hi = (lo < al ? 1 : 0) + ah + bh;
34427 return hi >>> 0;
34428 };
34429 exports.sum64_hi = sum64_hi;
34430
34431 function sum64_lo(ah, al, bh, bl) {
34432 var lo = al + bl;
34433 return lo >>> 0;
34434 };
34435 exports.sum64_lo = sum64_lo;
34436
34437 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
34438 var carry = 0;
34439 var lo = al;
34440 lo = (lo + bl) >>> 0;
34441 carry += lo < al ? 1 : 0;
34442 lo = (lo + cl) >>> 0;
34443 carry += lo < cl ? 1 : 0;
34444 lo = (lo + dl) >>> 0;
34445 carry += lo < dl ? 1 : 0;
34446
34447 var hi = ah + bh + ch + dh + carry;
34448 return hi >>> 0;
34449 };
34450 exports.sum64_4_hi = sum64_4_hi;
34451
34452 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
34453 var lo = al + bl + cl + dl;
34454 return lo >>> 0;
34455 };
34456 exports.sum64_4_lo = sum64_4_lo;
34457
34458 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34459 var carry = 0;
34460 var lo = al;
34461 lo = (lo + bl) >>> 0;
34462 carry += lo < al ? 1 : 0;
34463 lo = (lo + cl) >>> 0;
34464 carry += lo < cl ? 1 : 0;
34465 lo = (lo + dl) >>> 0;
34466 carry += lo < dl ? 1 : 0;
34467 lo = (lo + el) >>> 0;
34468 carry += lo < el ? 1 : 0;
34469
34470 var hi = ah + bh + ch + dh + eh + carry;
34471 return hi >>> 0;
34472 };
34473 exports.sum64_5_hi = sum64_5_hi;
34474
34475 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34476 var lo = al + bl + cl + dl + el;
34477
34478 return lo >>> 0;
34479 };
34480 exports.sum64_5_lo = sum64_5_lo;
34481
34482 function rotr64_hi(ah, al, num) {
34483 var r = (al << (32 - num)) | (ah >>> num);
34484 return r >>> 0;
34485 };
34486 exports.rotr64_hi = rotr64_hi;
34487
34488 function rotr64_lo(ah, al, num) {
34489 var r = (ah << (32 - num)) | (al >>> num);
34490 return r >>> 0;
34491 };
34492 exports.rotr64_lo = rotr64_lo;
34493
34494 function shr64_hi(ah, al, num) {
34495 return ah >>> num;
34496 };
34497 exports.shr64_hi = shr64_hi;
34498
34499 function shr64_lo(ah, al, num) {
34500 var r = (ah << (32 - num)) | (al >>> num);
34501 return r >>> 0;
34502 };
34503 exports.shr64_lo = shr64_lo;
34504
34505 },{"inherits":63}],63:[function(require,module,exports){
34506 arguments[4][9][0].apply(exports,arguments)
34507 },{"dup":9}],64:[function(require,module,exports){
34508 /**
34509 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
34510 * @param {String} str the string input value
34511 * @return {Boolean} a boolean if it is or is not hex prefixed
34512 * @throws if the str input is not a string
34513 */
34514 module.exports = function isHexPrefixed(str) {
34515 if (typeof str !== 'string') {
34516 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
34517 }
34518
34519 return str.slice(0, 2) === '0x';
34520 }
34521
34522 },{}],65:[function(require,module,exports){
34523 'use strict'
34524 module.exports = require('./lib/api')(require('./lib/keccak'))
34525
34526 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
34527 'use strict'
34528 var createKeccak = require('./keccak')
34529 var createShake = require('./shake')
34530
34531 module.exports = function (KeccakState) {
34532 var Keccak = createKeccak(KeccakState)
34533 var Shake = createShake(KeccakState)
34534
34535 return function (algorithm, options) {
34536 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
34537 switch (hash) {
34538 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
34539 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
34540 case 'keccak384': return new Keccak(832, 768, null, 384, options)
34541 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
34542
34543 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
34544 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
34545 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
34546 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
34547
34548 case 'shake128': return new Shake(1344, 256, 0x1f, options)
34549 case 'shake256': return new Shake(1088, 512, 0x1f, options)
34550
34551 default: throw new Error('Invald algorithm: ' + algorithm)
34552 }
34553 }
34554 }
34555
34556 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
34557 (function (Buffer){
34558 'use strict'
34559 var Transform = require('stream').Transform
34560 var inherits = require('inherits')
34561
34562 module.exports = function (KeccakState) {
34563 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
34564 Transform.call(this, options)
34565
34566 this._rate = rate
34567 this._capacity = capacity
34568 this._delimitedSuffix = delimitedSuffix
34569 this._hashBitLength = hashBitLength
34570 this._options = options
34571
34572 this._state = new KeccakState()
34573 this._state.initialize(rate, capacity)
34574 this._finalized = false
34575 }
34576
34577 inherits(Keccak, Transform)
34578
34579 Keccak.prototype._transform = function (chunk, encoding, callback) {
34580 var error = null
34581 try {
34582 this.update(chunk, encoding)
34583 } catch (err) {
34584 error = err
34585 }
34586
34587 callback(error)
34588 }
34589
34590 Keccak.prototype._flush = function (callback) {
34591 var error = null
34592 try {
34593 this.push(this.digest())
34594 } catch (err) {
34595 error = err
34596 }
34597
34598 callback(error)
34599 }
34600
34601 Keccak.prototype.update = function (data, encoding) {
34602 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34603 if (this._finalized) throw new Error('Digest already called')
34604 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34605
34606 this._state.absorb(data)
34607
34608 return this
34609 }
34610
34611 Keccak.prototype.digest = function (encoding) {
34612 if (this._finalized) throw new Error('Digest already called')
34613 this._finalized = true
34614
34615 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
34616 var digest = this._state.squeeze(this._hashBitLength / 8)
34617 if (encoding !== undefined) digest = digest.toString(encoding)
34618
34619 this._resetState()
34620
34621 return digest
34622 }
34623
34624 // remove result from memory
34625 Keccak.prototype._resetState = function () {
34626 this._state.initialize(this._rate, this._capacity)
34627 return this
34628 }
34629
34630 // because sometimes we need hash right now and little later
34631 Keccak.prototype._clone = function () {
34632 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
34633 this._state.copy(clone._state)
34634 clone._finalized = this._finalized
34635
34636 return clone
34637 }
34638
34639 return Keccak
34640 }
34641
34642 }).call(this,require("buffer").Buffer)
34643 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
34644 (function (Buffer){
34645 'use strict'
34646 var Transform = require('stream').Transform
34647 var inherits = require('inherits')
34648
34649 module.exports = function (KeccakState) {
34650 function Shake (rate, capacity, delimitedSuffix, options) {
34651 Transform.call(this, options)
34652
34653 this._rate = rate
34654 this._capacity = capacity
34655 this._delimitedSuffix = delimitedSuffix
34656 this._options = options
34657
34658 this._state = new KeccakState()
34659 this._state.initialize(rate, capacity)
34660 this._finalized = false
34661 }
34662
34663 inherits(Shake, Transform)
34664
34665 Shake.prototype._transform = function (chunk, encoding, callback) {
34666 var error = null
34667 try {
34668 this.update(chunk, encoding)
34669 } catch (err) {
34670 error = err
34671 }
34672
34673 callback(error)
34674 }
34675
34676 Shake.prototype._flush = function () {}
34677
34678 Shake.prototype._read = function (size) {
34679 this.push(this.squeeze(size))
34680 }
34681
34682 Shake.prototype.update = function (data, encoding) {
34683 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34684 if (this._finalized) throw new Error('Squeeze already called')
34685 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34686
34687 this._state.absorb(data)
34688
34689 return this
34690 }
34691
34692 Shake.prototype.squeeze = function (dataByteLength, encoding) {
34693 if (!this._finalized) {
34694 this._finalized = true
34695 this._state.absorbLastFewBits(this._delimitedSuffix)
34696 }
34697
34698 var data = this._state.squeeze(dataByteLength)
34699 if (encoding !== undefined) data = data.toString(encoding)
34700
34701 return data
34702 }
34703
34704 Shake.prototype._resetState = function () {
34705 this._state.initialize(this._rate, this._capacity)
34706 return this
34707 }
34708
34709 Shake.prototype._clone = function () {
34710 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
34711 this._state.copy(clone._state)
34712 clone._finalized = this._finalized
34713
34714 return clone
34715 }
34716
34717 return Shake
34718 }
34719
34720 }).call(this,require("buffer").Buffer)
34721 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
34722 'use strict'
34723 var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
34724
34725 exports.p1600 = function (s) {
34726 for (var round = 0; round < 24; ++round) {
34727 // theta
34728 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
34729 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
34730 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
34731 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
34732 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
34733 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
34734 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
34735 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
34736 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
34737 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
34738
34739 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
34740 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
34741 var t1slo0 = s[0] ^ lo
34742 var t1shi0 = s[1] ^ hi
34743 var t1slo5 = s[10] ^ lo
34744 var t1shi5 = s[11] ^ hi
34745 var t1slo10 = s[20] ^ lo
34746 var t1shi10 = s[21] ^ hi
34747 var t1slo15 = s[30] ^ lo
34748 var t1shi15 = s[31] ^ hi
34749 var t1slo20 = s[40] ^ lo
34750 var t1shi20 = s[41] ^ hi
34751 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
34752 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
34753 var t1slo1 = s[2] ^ lo
34754 var t1shi1 = s[3] ^ hi
34755 var t1slo6 = s[12] ^ lo
34756 var t1shi6 = s[13] ^ hi
34757 var t1slo11 = s[22] ^ lo
34758 var t1shi11 = s[23] ^ hi
34759 var t1slo16 = s[32] ^ lo
34760 var t1shi16 = s[33] ^ hi
34761 var t1slo21 = s[42] ^ lo
34762 var t1shi21 = s[43] ^ hi
34763 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
34764 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
34765 var t1slo2 = s[4] ^ lo
34766 var t1shi2 = s[5] ^ hi
34767 var t1slo7 = s[14] ^ lo
34768 var t1shi7 = s[15] ^ hi
34769 var t1slo12 = s[24] ^ lo
34770 var t1shi12 = s[25] ^ hi
34771 var t1slo17 = s[34] ^ lo
34772 var t1shi17 = s[35] ^ hi
34773 var t1slo22 = s[44] ^ lo
34774 var t1shi22 = s[45] ^ hi
34775 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
34776 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
34777 var t1slo3 = s[6] ^ lo
34778 var t1shi3 = s[7] ^ hi
34779 var t1slo8 = s[16] ^ lo
34780 var t1shi8 = s[17] ^ hi
34781 var t1slo13 = s[26] ^ lo
34782 var t1shi13 = s[27] ^ hi
34783 var t1slo18 = s[36] ^ lo
34784 var t1shi18 = s[37] ^ hi
34785 var t1slo23 = s[46] ^ lo
34786 var t1shi23 = s[47] ^ hi
34787 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
34788 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
34789 var t1slo4 = s[8] ^ lo
34790 var t1shi4 = s[9] ^ hi
34791 var t1slo9 = s[18] ^ lo
34792 var t1shi9 = s[19] ^ hi
34793 var t1slo14 = s[28] ^ lo
34794 var t1shi14 = s[29] ^ hi
34795 var t1slo19 = s[38] ^ lo
34796 var t1shi19 = s[39] ^ hi
34797 var t1slo24 = s[48] ^ lo
34798 var t1shi24 = s[49] ^ hi
34799
34800 // rho & pi
34801 var t2slo0 = t1slo0
34802 var t2shi0 = t1shi0
34803 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
34804 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
34805 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
34806 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
34807 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
34808 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
34809 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
34810 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
34811 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
34812 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
34813 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
34814 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
34815 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
34816 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
34817 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
34818 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
34819 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
34820 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
34821 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
34822 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
34823 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
34824 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
34825 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
34826 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
34827 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
34828 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
34829 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
34830 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
34831 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
34832 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
34833 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
34834 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
34835 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
34836 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
34837 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
34838 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
34839 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
34840 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
34841 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
34842 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
34843 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
34844 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
34845 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
34846 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
34847 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
34848 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
34849 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
34850 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
34851
34852 // chi
34853 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
34854 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
34855 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
34856 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
34857 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
34858 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
34859 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
34860 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
34861 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
34862 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
34863 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
34864 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
34865 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
34866 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
34867 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
34868 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
34869 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
34870 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
34871 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
34872 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
34873 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
34874 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
34875 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
34876 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
34877 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
34878 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
34879 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
34880 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
34881 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
34882 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
34883 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
34884 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
34885 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
34886 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
34887 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
34888 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
34889 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
34890 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
34891 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
34892 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
34893 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
34894 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
34895 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
34896 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
34897 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
34898 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
34899 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
34900 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
34901 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
34902 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
34903
34904 // iota
34905 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
34906 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
34907 }
34908 }
34909
34910 },{}],70:[function(require,module,exports){
34911 (function (Buffer){
34912 'use strict'
34913 var keccakState = require('./keccak-state-unroll')
34914
34915 function Keccak () {
34916 // much faster than `new Array(50)`
34917 this.state = [
34918 0, 0, 0, 0, 0,
34919 0, 0, 0, 0, 0,
34920 0, 0, 0, 0, 0,
34921 0, 0, 0, 0, 0,
34922 0, 0, 0, 0, 0
34923 ]
34924
34925 this.blockSize = null
34926 this.count = 0
34927 this.squeezing = false
34928 }
34929
34930 Keccak.prototype.initialize = function (rate, capacity) {
34931 for (var i = 0; i < 50; ++i) this.state[i] = 0
34932 this.blockSize = rate / 8
34933 this.count = 0
34934 this.squeezing = false
34935 }
34936
34937 Keccak.prototype.absorb = function (data) {
34938 for (var i = 0; i < data.length; ++i) {
34939 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
34940 this.count += 1
34941 if (this.count === this.blockSize) {
34942 keccakState.p1600(this.state)
34943 this.count = 0
34944 }
34945 }
34946 }
34947
34948 Keccak.prototype.absorbLastFewBits = function (bits) {
34949 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
34950 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
34951 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
34952 keccakState.p1600(this.state)
34953 this.count = 0
34954 this.squeezing = true
34955 }
34956
34957 Keccak.prototype.squeeze = function (length) {
34958 if (!this.squeezing) this.absorbLastFewBits(0x01)
34959
34960 var output = Buffer.allocUnsafe(length)
34961 for (var i = 0; i < length; ++i) {
34962 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
34963 this.count += 1
34964 if (this.count === this.blockSize) {
34965 keccakState.p1600(this.state)
34966 this.count = 0
34967 }
34968 }
34969
34970 return output
34971 }
34972
34973 Keccak.prototype.copy = function (dest) {
34974 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
34975 dest.blockSize = this.blockSize
34976 dest.count = this.count
34977 dest.squeezing = this.squeezing
34978 }
34979
34980 module.exports = Keccak
34981
34982 }).call(this,require("buffer").Buffer)
34983 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
34984 (function (Buffer){
34985 /*
34986 CryptoJS v3.1.2
34987 code.google.com/p/crypto-js
34988 (c) 2009-2013 by Jeff Mott. All rights reserved.
34989 code.google.com/p/crypto-js/wiki/License
34990 */
34991 /** @preserve
34992 (c) 2012 by Cédric Mesnil. All rights reserved.
34993
34994 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
34995
34996 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
34997 - 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.
34998
34999 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35000 */
35001
35002 // constants table
35003 var zl = [
35004 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
35005 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
35006 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
35007 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
35008 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
35009 ]
35010
35011 var zr = [
35012 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
35013 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
35014 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
35015 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
35016 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
35017 ]
35018
35019 var sl = [
35020 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
35021 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
35022 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
35023 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
35024 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
35025 ]
35026
35027 var sr = [
35028 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
35029 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
35030 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
35031 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
35032 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
35033 ]
35034
35035 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
35036 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
35037
35038 function bytesToWords (bytes) {
35039 var words = []
35040 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
35041 words[b >>> 5] |= bytes[i] << (24 - b % 32)
35042 }
35043 return words
35044 }
35045
35046 function wordsToBytes (words) {
35047 var bytes = []
35048 for (var b = 0; b < words.length * 32; b += 8) {
35049 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
35050 }
35051 return bytes
35052 }
35053
35054 function processBlock (H, M, offset) {
35055 // swap endian
35056 for (var i = 0; i < 16; i++) {
35057 var offset_i = offset + i
35058 var M_offset_i = M[offset_i]
35059
35060 // Swap
35061 M[offset_i] = (
35062 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
35063 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
35064 )
35065 }
35066
35067 // Working variables
35068 var al, bl, cl, dl, el
35069 var ar, br, cr, dr, er
35070
35071 ar = al = H[0]
35072 br = bl = H[1]
35073 cr = cl = H[2]
35074 dr = dl = H[3]
35075 er = el = H[4]
35076
35077 // computation
35078 var t
35079 for (i = 0; i < 80; i += 1) {
35080 t = (al + M[offset + zl[i]]) | 0
35081 if (i < 16) {
35082 t += f1(bl, cl, dl) + hl[0]
35083 } else if (i < 32) {
35084 t += f2(bl, cl, dl) + hl[1]
35085 } else if (i < 48) {
35086 t += f3(bl, cl, dl) + hl[2]
35087 } else if (i < 64) {
35088 t += f4(bl, cl, dl) + hl[3]
35089 } else {// if (i<80) {
35090 t += f5(bl, cl, dl) + hl[4]
35091 }
35092 t = t | 0
35093 t = rotl(t, sl[i])
35094 t = (t + el) | 0
35095 al = el
35096 el = dl
35097 dl = rotl(cl, 10)
35098 cl = bl
35099 bl = t
35100
35101 t = (ar + M[offset + zr[i]]) | 0
35102 if (i < 16) {
35103 t += f5(br, cr, dr) + hr[0]
35104 } else if (i < 32) {
35105 t += f4(br, cr, dr) + hr[1]
35106 } else if (i < 48) {
35107 t += f3(br, cr, dr) + hr[2]
35108 } else if (i < 64) {
35109 t += f2(br, cr, dr) + hr[3]
35110 } else {// if (i<80) {
35111 t += f1(br, cr, dr) + hr[4]
35112 }
35113
35114 t = t | 0
35115 t = rotl(t, sr[i])
35116 t = (t + er) | 0
35117 ar = er
35118 er = dr
35119 dr = rotl(cr, 10)
35120 cr = br
35121 br = t
35122 }
35123
35124 // intermediate hash value
35125 t = (H[1] + cl + dr) | 0
35126 H[1] = (H[2] + dl + er) | 0
35127 H[2] = (H[3] + el + ar) | 0
35128 H[3] = (H[4] + al + br) | 0
35129 H[4] = (H[0] + bl + cr) | 0
35130 H[0] = t
35131 }
35132
35133 function f1 (x, y, z) {
35134 return ((x) ^ (y) ^ (z))
35135 }
35136
35137 function f2 (x, y, z) {
35138 return (((x) & (y)) | ((~x) & (z)))
35139 }
35140
35141 function f3 (x, y, z) {
35142 return (((x) | (~(y))) ^ (z))
35143 }
35144
35145 function f4 (x, y, z) {
35146 return (((x) & (z)) | ((y) & (~(z))))
35147 }
35148
35149 function f5 (x, y, z) {
35150 return ((x) ^ ((y) | (~(z))))
35151 }
35152
35153 function rotl (x, n) {
35154 return (x << n) | (x >>> (32 - n))
35155 }
35156
35157 function ripemd160 (message) {
35158 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
35159
35160 if (typeof message === 'string') {
35161 message = new Buffer(message, 'utf8')
35162 }
35163
35164 var m = bytesToWords(message)
35165
35166 var nBitsLeft = message.length * 8
35167 var nBitsTotal = message.length * 8
35168
35169 // Add padding
35170 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
35171 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
35172 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
35173 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
35174 )
35175
35176 for (var i = 0; i < m.length; i += 16) {
35177 processBlock(H, m, i)
35178 }
35179
35180 // swap endian
35181 for (i = 0; i < 5; i++) {
35182 // shortcut
35183 var H_i = H[i]
35184
35185 // Swap
35186 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
35187 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
35188 }
35189
35190 var digestbytes = wordsToBytes(H)
35191 return new Buffer(digestbytes)
35192 }
35193
35194 module.exports = ripemd160
35195
35196 }).call(this,require("buffer").Buffer)
35197 },{"buffer":5}],72:[function(require,module,exports){
35198 (function (Buffer){
35199 const assert = require('assert')
35200 /**
35201 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
35202 * This function takes in a data, convert it to buffer if not, and a length for recursion
35203 *
35204 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
35205 * @returns {Buffer} - returns buffer of encoded data
35206 **/
35207 exports.encode = function (input) {
35208 if (input instanceof Array) {
35209 var output = []
35210 for (var i = 0; i < input.length; i++) {
35211 output.push(exports.encode(input[i]))
35212 }
35213 var buf = Buffer.concat(output)
35214 return Buffer.concat([encodeLength(buf.length, 192), buf])
35215 } else {
35216 input = toBuffer(input)
35217 if (input.length === 1 && input[0] < 128) {
35218 return input
35219 } else {
35220 return Buffer.concat([encodeLength(input.length, 128), input])
35221 }
35222 }
35223 }
35224
35225 function safeParseInt (v, base) {
35226 if (v.slice(0, 2) === '00') {
35227 throw (new Error('invalid RLP: extra zeros'))
35228 }
35229
35230 return parseInt(v, base)
35231 }
35232
35233 function encodeLength (len, offset) {
35234 if (len < 56) {
35235 return new Buffer([len + offset])
35236 } else {
35237 var hexLength = intToHex(len)
35238 var lLength = hexLength.length / 2
35239 var firstByte = intToHex(offset + 55 + lLength)
35240 return new Buffer(firstByte + hexLength, 'hex')
35241 }
35242 }
35243
35244 /**
35245 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
35246 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
35247 * @returns {Array} - returns decode Array of Buffers containg the original message
35248 **/
35249 exports.decode = function (input, stream) {
35250 if (!input || input.length === 0) {
35251 return new Buffer([])
35252 }
35253
35254 input = toBuffer(input)
35255 var decoded = _decode(input)
35256
35257 if (stream) {
35258 return decoded
35259 }
35260
35261 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
35262 return decoded.data
35263 }
35264
35265 exports.getLength = function (input) {
35266 if (!input || input.length === 0) {
35267 return new Buffer([])
35268 }
35269
35270 input = toBuffer(input)
35271 var firstByte = input[0]
35272 if (firstByte <= 0x7f) {
35273 return input.length
35274 } else if (firstByte <= 0xb7) {
35275 return firstByte - 0x7f
35276 } else if (firstByte <= 0xbf) {
35277 return firstByte - 0xb6
35278 } else if (firstByte <= 0xf7) {
35279 // a list between 0-55 bytes long
35280 return firstByte - 0xbf
35281 } else {
35282 // a list over 55 bytes long
35283 var llength = firstByte - 0xf6
35284 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35285 return llength + length
35286 }
35287 }
35288
35289 function _decode (input) {
35290 var length, llength, data, innerRemainder, d
35291 var decoded = []
35292 var firstByte = input[0]
35293
35294 if (firstByte <= 0x7f) {
35295 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
35296 return {
35297 data: input.slice(0, 1),
35298 remainder: input.slice(1)
35299 }
35300 } else if (firstByte <= 0xb7) {
35301 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
35302 // The range of the first byte is [0x80, 0xb7]
35303 length = firstByte - 0x7f
35304
35305 // set 0x80 null to 0
35306 if (firstByte === 0x80) {
35307 data = new Buffer([])
35308 } else {
35309 data = input.slice(1, length)
35310 }
35311
35312 if (length === 2 && data[0] < 0x80) {
35313 throw new Error('invalid rlp encoding: byte must be less 0x80')
35314 }
35315
35316 return {
35317 data: data,
35318 remainder: input.slice(length)
35319 }
35320 } else if (firstByte <= 0xbf) {
35321 llength = firstByte - 0xb6
35322 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35323 data = input.slice(llength, length + llength)
35324 if (data.length < length) {
35325 throw (new Error('invalid RLP'))
35326 }
35327
35328 return {
35329 data: data,
35330 remainder: input.slice(length + llength)
35331 }
35332 } else if (firstByte <= 0xf7) {
35333 // a list between 0-55 bytes long
35334 length = firstByte - 0xbf
35335 innerRemainder = input.slice(1, length)
35336 while (innerRemainder.length) {
35337 d = _decode(innerRemainder)
35338 decoded.push(d.data)
35339 innerRemainder = d.remainder
35340 }
35341
35342 return {
35343 data: decoded,
35344 remainder: input.slice(length)
35345 }
35346 } else {
35347 // a list over 55 bytes long
35348 llength = firstByte - 0xf6
35349 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35350 var totalLength = llength + length
35351 if (totalLength > input.length) {
35352 throw new Error('invalid rlp: total length is larger than the data')
35353 }
35354
35355 innerRemainder = input.slice(llength, totalLength)
35356 if (innerRemainder.length === 0) {
35357 throw new Error('invalid rlp, List has a invalid length')
35358 }
35359
35360 while (innerRemainder.length) {
35361 d = _decode(innerRemainder)
35362 decoded.push(d.data)
35363 innerRemainder = d.remainder
35364 }
35365 return {
35366 data: decoded,
35367 remainder: input.slice(totalLength)
35368 }
35369 }
35370 }
35371
35372 function isHexPrefixed (str) {
35373 return str.slice(0, 2) === '0x'
35374 }
35375
35376 // Removes 0x from a given String
35377 function stripHexPrefix (str) {
35378 if (typeof str !== 'string') {
35379 return str
35380 }
35381 return isHexPrefixed(str) ? str.slice(2) : str
35382 }
35383
35384 function intToHex (i) {
35385 var hex = i.toString(16)
35386 if (hex.length % 2) {
35387 hex = '0' + hex
35388 }
35389
35390 return hex
35391 }
35392
35393 function padToEven (a) {
35394 if (a.length % 2) a = '0' + a
35395 return a
35396 }
35397
35398 function intToBuffer (i) {
35399 var hex = intToHex(i)
35400 return new Buffer(hex, 'hex')
35401 }
35402
35403 function toBuffer (v) {
35404 if (!Buffer.isBuffer(v)) {
35405 if (typeof v === 'string') {
35406 if (isHexPrefixed(v)) {
35407 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
35408 } else {
35409 v = new Buffer(v)
35410 }
35411 } else if (typeof v === 'number') {
35412 if (!v) {
35413 v = new Buffer([])
35414 } else {
35415 v = intToBuffer(v)
35416 }
35417 } else if (v === null || v === undefined) {
35418 v = new Buffer([])
35419 } else if (v.toArray) {
35420 // converts a BN to a Buffer
35421 v = new Buffer(v.toArray())
35422 } else {
35423 throw new Error('invalid type')
35424 }
35425 }
35426 return v
35427 }
35428
35429 }).call(this,require("buffer").Buffer)
35430 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
35431 'use strict'
35432 module.exports = require('./lib')(require('./lib/elliptic'))
35433
35434 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
35435 (function (Buffer){
35436 'use strict'
35437 var toString = Object.prototype.toString
35438
35439 // TypeError
35440 exports.isArray = function (value, message) {
35441 if (!Array.isArray(value)) throw TypeError(message)
35442 }
35443
35444 exports.isBoolean = function (value, message) {
35445 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
35446 }
35447
35448 exports.isBuffer = function (value, message) {
35449 if (!Buffer.isBuffer(value)) throw TypeError(message)
35450 }
35451
35452 exports.isFunction = function (value, message) {
35453 if (toString.call(value) !== '[object Function]') throw TypeError(message)
35454 }
35455
35456 exports.isNumber = function (value, message) {
35457 if (toString.call(value) !== '[object Number]') throw TypeError(message)
35458 }
35459
35460 exports.isObject = function (value, message) {
35461 if (toString.call(value) !== '[object Object]') throw TypeError(message)
35462 }
35463
35464 // RangeError
35465 exports.isBufferLength = function (buffer, length, message) {
35466 if (buffer.length !== length) throw RangeError(message)
35467 }
35468
35469 exports.isBufferLength2 = function (buffer, length1, length2, message) {
35470 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
35471 }
35472
35473 exports.isLengthGTZero = function (value, message) {
35474 if (value.length === 0) throw RangeError(message)
35475 }
35476
35477 exports.isNumberInInterval = function (number, x, y, message) {
35478 if (number <= x || number >= y) throw RangeError(message)
35479 }
35480
35481 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
35482 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
35483 (function (Buffer){
35484 'use strict'
35485 var bip66 = require('bip66')
35486
35487 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
35488 // begin
35489 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
35490 // private key
35491 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35492 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35493 // middle
35494 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35495 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35496 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35497 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35498 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35499 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35500 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35501 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35502 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
35503 // public key
35504 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35506 0x00
35507 ])
35508
35509 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
35510 // begin
35511 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
35512 // private key
35513 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35514 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35515 // middle
35516 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35517 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35518 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35519 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35520 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35521 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35522 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
35523 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
35524 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35525 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35526 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
35527 // public key
35528 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35529 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35530 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35531 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35532 0x00
35533 ])
35534
35535 var ZERO_BUFFER_32 = new Buffer([
35536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35537 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
35538 ])
35539
35540 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
35541 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
35542 privateKey.copy(result, compressed ? 8 : 9)
35543 publicKey.copy(result, compressed ? 181 : 214)
35544 return result
35545 }
35546
35547 exports.privateKeyImport = function (privateKey) {
35548 var length = privateKey.length
35549
35550 // sequence header
35551 var index = 0
35552 if (length < index + 1 || privateKey[index] !== 0x30) return
35553 index += 1
35554
35555 // sequence length constructor
35556 if (length < index + 1 || !(privateKey[index] & 0x80)) return
35557
35558 var lenb = privateKey[index] & 0x7f
35559 index += 1
35560 if (lenb < 1 || lenb > 2) return
35561 if (length < index + lenb) return
35562
35563 // sequence length
35564 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
35565 index += lenb
35566 if (length < index + len) return
35567
35568 // sequence element 0: version number (=1)
35569 if (length < index + 3 ||
35570 privateKey[index] !== 0x02 ||
35571 privateKey[index + 1] !== 0x01 ||
35572 privateKey[index + 2] !== 0x01) {
35573 return
35574 }
35575 index += 3
35576
35577 // sequence element 1: octet string, up to 32 bytes
35578 if (length < index + 2 ||
35579 privateKey[index] !== 0x04 ||
35580 privateKey[index + 1] > 0x20 ||
35581 length < index + 2 + privateKey[index + 1]) {
35582 return
35583 }
35584
35585 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
35586 }
35587
35588 exports.signatureExport = function (sigObj) {
35589 var r = Buffer.concat([new Buffer([0]), sigObj.r])
35590 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
35591
35592 var s = Buffer.concat([new Buffer([0]), sigObj.s])
35593 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
35594
35595 return bip66.encode(r.slice(posR), s.slice(posS))
35596 }
35597
35598 exports.signatureImport = function (sig) {
35599 var r = new Buffer(ZERO_BUFFER_32)
35600 var s = new Buffer(ZERO_BUFFER_32)
35601
35602 try {
35603 var sigObj = bip66.decode(sig)
35604 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
35605 if (sigObj.r.length > 32) throw new Error('R length is too long')
35606 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
35607 if (sigObj.s.length > 32) throw new Error('S length is too long')
35608 } catch (err) {
35609 return
35610 }
35611
35612 sigObj.r.copy(r, 32 - sigObj.r.length)
35613 sigObj.s.copy(s, 32 - sigObj.s.length)
35614
35615 return { r: r, s: s }
35616 }
35617
35618 exports.signatureImportLax = function (sig) {
35619 var r = new Buffer(ZERO_BUFFER_32)
35620 var s = new Buffer(ZERO_BUFFER_32)
35621
35622 var length = sig.length
35623 var index = 0
35624
35625 // sequence tag byte
35626 if (sig[index++] !== 0x30) return
35627
35628 // sequence length byte
35629 var lenbyte = sig[index++]
35630 if (lenbyte & 0x80) {
35631 index += lenbyte - 0x80
35632 if (index > length) return
35633 }
35634
35635 // sequence tag byte for r
35636 if (sig[index++] !== 0x02) return
35637
35638 // length for r
35639 var rlen = sig[index++]
35640 if (rlen & 0x80) {
35641 lenbyte = rlen - 0x80
35642 if (index + lenbyte > length) return
35643 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35644 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
35645 }
35646 if (rlen > length - index) return
35647 var rindex = index
35648 index += rlen
35649
35650 // sequence tag byte for s
35651 if (sig[index++] !== 0x02) return
35652
35653 // length for s
35654 var slen = sig[index++]
35655 if (slen & 0x80) {
35656 lenbyte = slen - 0x80
35657 if (index + lenbyte > length) return
35658 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35659 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
35660 }
35661 if (slen > length - index) return
35662 var sindex = index
35663 index += slen
35664
35665 // ignore leading zeros in r
35666 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
35667 // copy r value
35668 if (rlen > 32) return
35669 var rvalue = sig.slice(rindex, rindex + rlen)
35670 rvalue.copy(r, 32 - rvalue.length)
35671
35672 // ignore leading zeros in s
35673 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
35674 // copy s value
35675 if (slen > 32) return
35676 var svalue = sig.slice(sindex, sindex + slen)
35677 svalue.copy(s, 32 - svalue.length)
35678
35679 return { r: r, s: s }
35680 }
35681
35682 }).call(this,require("buffer").Buffer)
35683 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
35684 (function (Buffer){
35685 'use strict'
35686 var createHash = require('create-hash')
35687 var BN = require('bn.js')
35688 var EC = require('elliptic').ec
35689
35690 var messages = require('../messages.json')
35691
35692 var ec = new EC('secp256k1')
35693 var ecparams = ec.curve
35694
35695 function loadCompressedPublicKey (first, xBuffer) {
35696 var x = new BN(xBuffer)
35697
35698 // overflow
35699 if (x.cmp(ecparams.p) >= 0) return null
35700 x = x.toRed(ecparams.red)
35701
35702 // compute corresponding Y
35703 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
35704 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
35705
35706 return ec.keyPair({ pub: { x: x, y: y } })
35707 }
35708
35709 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
35710 var x = new BN(xBuffer)
35711 var y = new BN(yBuffer)
35712
35713 // overflow
35714 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
35715
35716 x = x.toRed(ecparams.red)
35717 y = y.toRed(ecparams.red)
35718
35719 // is odd flag
35720 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
35721
35722 // x*x*x + b = y*y
35723 var x3 = x.redSqr().redIMul(x)
35724 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
35725
35726 return ec.keyPair({ pub: { x: x, y: y } })
35727 }
35728
35729 function loadPublicKey (publicKey) {
35730 var first = publicKey[0]
35731 switch (first) {
35732 case 0x02:
35733 case 0x03:
35734 if (publicKey.length !== 33) return null
35735 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
35736 case 0x04:
35737 case 0x06:
35738 case 0x07:
35739 if (publicKey.length !== 65) return null
35740 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
35741 default:
35742 return null
35743 }
35744 }
35745
35746 exports.privateKeyVerify = function (privateKey) {
35747 var bn = new BN(privateKey)
35748 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
35749 }
35750
35751 exports.privateKeyExport = function (privateKey, compressed) {
35752 var d = new BN(privateKey)
35753 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
35754
35755 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
35756 }
35757
35758 exports.privateKeyTweakAdd = function (privateKey, tweak) {
35759 var bn = new BN(tweak)
35760 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
35761
35762 bn.iadd(new BN(privateKey))
35763 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
35764 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
35765
35766 return bn.toArrayLike(Buffer, 'be', 32)
35767 }
35768
35769 exports.privateKeyTweakMul = function (privateKey, tweak) {
35770 var bn = new BN(tweak)
35771 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
35772
35773 bn.imul(new BN(privateKey))
35774 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
35775
35776 return bn.toArrayLike(Buffer, 'be', 32)
35777 }
35778
35779 exports.publicKeyCreate = function (privateKey, compressed) {
35780 var d = new BN(privateKey)
35781 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
35782
35783 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
35784 }
35785
35786 exports.publicKeyConvert = function (publicKey, compressed) {
35787 var pair = loadPublicKey(publicKey)
35788 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35789
35790 return new Buffer(pair.getPublic(compressed, true))
35791 }
35792
35793 exports.publicKeyVerify = function (publicKey) {
35794 return loadPublicKey(publicKey) !== null
35795 }
35796
35797 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
35798 var pair = loadPublicKey(publicKey)
35799 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35800
35801 tweak = new BN(tweak)
35802 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
35803
35804 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
35805 }
35806
35807 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
35808 var pair = loadPublicKey(publicKey)
35809 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35810
35811 tweak = new BN(tweak)
35812 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
35813
35814 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
35815 }
35816
35817 exports.publicKeyCombine = function (publicKeys, compressed) {
35818 var pairs = new Array(publicKeys.length)
35819 for (var i = 0; i < publicKeys.length; ++i) {
35820 pairs[i] = loadPublicKey(publicKeys[i])
35821 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35822 }
35823
35824 var point = pairs[0].pub
35825 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
35826 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
35827
35828 return new Buffer(point.encode(true, compressed))
35829 }
35830
35831 exports.signatureNormalize = function (signature) {
35832 var r = new BN(signature.slice(0, 32))
35833 var s = new BN(signature.slice(32, 64))
35834 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35835
35836 var result = new Buffer(signature)
35837 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
35838
35839 return result
35840 }
35841
35842 exports.signatureExport = function (signature) {
35843 var r = signature.slice(0, 32)
35844 var s = signature.slice(32, 64)
35845 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35846
35847 return { r: r, s: s }
35848 }
35849
35850 exports.signatureImport = function (sigObj) {
35851 var r = new BN(sigObj.r)
35852 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
35853
35854 var s = new BN(sigObj.s)
35855 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
35856
35857 return Buffer.concat([
35858 r.toArrayLike(Buffer, 'be', 32),
35859 s.toArrayLike(Buffer, 'be', 32)
35860 ])
35861 }
35862
35863 exports.sign = function (message, privateKey, noncefn, data) {
35864 if (typeof noncefn === 'function') {
35865 var getNonce = noncefn
35866 noncefn = function (counter) {
35867 var nonce = getNonce(message, privateKey, null, data, counter)
35868 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
35869
35870 return new BN(nonce)
35871 }
35872 }
35873
35874 var d = new BN(privateKey)
35875 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
35876
35877 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
35878 return {
35879 signature: Buffer.concat([
35880 result.r.toArrayLike(Buffer, 'be', 32),
35881 result.s.toArrayLike(Buffer, 'be', 32)
35882 ]),
35883 recovery: result.recoveryParam
35884 }
35885 }
35886
35887 exports.verify = function (message, signature, publicKey) {
35888 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35889
35890 var sigr = new BN(sigObj.r)
35891 var sigs = new BN(sigObj.s)
35892 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35893 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
35894
35895 var pair = loadPublicKey(publicKey)
35896 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35897
35898 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
35899 }
35900
35901 exports.recover = function (message, signature, recovery, compressed) {
35902 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35903
35904 var sigr = new BN(sigObj.r)
35905 var sigs = new BN(sigObj.s)
35906 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35907
35908 try {
35909 if (sigr.isZero() || sigs.isZero()) throw new Error()
35910
35911 var point = ec.recoverPubKey(message, sigObj, recovery)
35912 return new Buffer(point.encode(true, compressed))
35913 } catch (err) {
35914 throw new Error(messages.ECDSA_RECOVER_FAIL)
35915 }
35916 }
35917
35918 exports.ecdh = function (publicKey, privateKey) {
35919 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
35920 return createHash('sha256').update(shared).digest()
35921 }
35922
35923 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
35924 var pair = loadPublicKey(publicKey)
35925 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35926
35927 var scalar = new BN(privateKey)
35928 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
35929
35930 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
35931 }
35932
35933 }).call(this,require("buffer").Buffer)
35934 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
35935 'use strict'
35936 var assert = require('./assert')
35937 var der = require('./der')
35938 var messages = require('./messages.json')
35939
35940 function initCompressedValue (value, defaultValue) {
35941 if (value === undefined) return defaultValue
35942
35943 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
35944 return value
35945 }
35946
35947 module.exports = function (secp256k1) {
35948 return {
35949 privateKeyVerify: function (privateKey) {
35950 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35951 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
35952 },
35953
35954 privateKeyExport: function (privateKey, compressed) {
35955 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35956 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35957
35958 compressed = initCompressedValue(compressed, true)
35959 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
35960
35961 return der.privateKeyExport(privateKey, publicKey, compressed)
35962 },
35963
35964 privateKeyImport: function (privateKey) {
35965 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35966
35967 privateKey = der.privateKeyImport(privateKey)
35968 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
35969
35970 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
35971 },
35972
35973 privateKeyTweakAdd: function (privateKey, tweak) {
35974 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35975 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35976
35977 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35978 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35979
35980 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
35981 },
35982
35983 privateKeyTweakMul: function (privateKey, tweak) {
35984 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35985 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35986
35987 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35988 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35989
35990 return secp256k1.privateKeyTweakMul(privateKey, tweak)
35991 },
35992
35993 publicKeyCreate: function (privateKey, compressed) {
35994 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35995 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35996
35997 compressed = initCompressedValue(compressed, true)
35998
35999 return secp256k1.publicKeyCreate(privateKey, compressed)
36000 },
36001
36002 publicKeyConvert: function (publicKey, compressed) {
36003 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36004 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36005
36006 compressed = initCompressedValue(compressed, true)
36007
36008 return secp256k1.publicKeyConvert(publicKey, compressed)
36009 },
36010
36011 publicKeyVerify: function (publicKey) {
36012 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36013 return secp256k1.publicKeyVerify(publicKey)
36014 },
36015
36016 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
36017 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36018 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36019
36020 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
36021 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
36022
36023 compressed = initCompressedValue(compressed, true)
36024
36025 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
36026 },
36027
36028 publicKeyTweakMul: function (publicKey, tweak, compressed) {
36029 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36030 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36031
36032 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
36033 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
36034
36035 compressed = initCompressedValue(compressed, true)
36036
36037 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
36038 },
36039
36040 publicKeyCombine: function (publicKeys, compressed) {
36041 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
36042 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
36043 for (var i = 0; i < publicKeys.length; ++i) {
36044 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
36045 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36046 }
36047
36048 compressed = initCompressedValue(compressed, true)
36049
36050 return secp256k1.publicKeyCombine(publicKeys, compressed)
36051 },
36052
36053 signatureNormalize: function (signature) {
36054 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36055 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36056
36057 return secp256k1.signatureNormalize(signature)
36058 },
36059
36060 signatureExport: function (signature) {
36061 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36062 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36063
36064 var sigObj = secp256k1.signatureExport(signature)
36065 return der.signatureExport(sigObj)
36066 },
36067
36068 signatureImport: function (sig) {
36069 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36070 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36071
36072 var sigObj = der.signatureImport(sig)
36073 if (sigObj) return secp256k1.signatureImport(sigObj)
36074
36075 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
36076 },
36077
36078 signatureImportLax: function (sig) {
36079 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36080 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36081
36082 var sigObj = der.signatureImportLax(sig)
36083 if (sigObj) return secp256k1.signatureImport(sigObj)
36084
36085 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
36086 },
36087
36088 sign: function (message, privateKey, options) {
36089 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
36090 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
36091
36092 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
36093 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
36094
36095 var data = null
36096 var noncefn = null
36097 if (options !== undefined) {
36098 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
36099
36100 if (options.data !== undefined) {
36101 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
36102 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
36103 data = options.data
36104 }
36105
36106 if (options.noncefn !== undefined) {
36107 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
36108 noncefn = options.noncefn
36109 }
36110 }
36111
36112 return secp256k1.sign(message, privateKey, noncefn, data)
36113 },
36114
36115 verify: function (message, signature, publicKey) {
36116 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
36117 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
36118
36119 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36120 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36121
36122 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36123 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36124
36125 return secp256k1.verify(message, signature, publicKey)
36126 },
36127
36128 recover: function (message, signature, recovery, compressed) {
36129 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
36130 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
36131
36132 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36133 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36134
36135 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
36136 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
36137
36138 compressed = initCompressedValue(compressed, true)
36139
36140 return secp256k1.recover(message, signature, recovery, compressed)
36141 },
36142
36143 ecdh: function (publicKey, privateKey) {
36144 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36145 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36146
36147 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
36148 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
36149
36150 return secp256k1.ecdh(publicKey, privateKey)
36151 },
36152
36153 ecdhUnsafe: function (publicKey, privateKey, compressed) {
36154 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36155 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36156
36157 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
36158 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
36159
36160 compressed = initCompressedValue(compressed, true)
36161
36162 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
36163 }
36164 }
36165 }
36166
36167 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
36168 module.exports={
36169 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
36170 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
36171 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
36172 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
36173 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
36174 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
36175 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
36176 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
36177 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
36178 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
36179 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
36180 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
36181 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
36182 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
36183 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
36184 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
36185 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
36186 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
36187 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
36188 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
36189 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
36190 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
36191 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
36192 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
36193 "MSG32_TYPE_INVALID": "message should be a Buffer",
36194 "MSG32_LENGTH_INVALID": "message length is invalid",
36195 "OPTIONS_TYPE_INVALID": "options should be an Object",
36196 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
36197 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
36198 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
36199 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
36200 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
36201 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
36202 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
36203 }
36204
36205 },{}],79:[function(require,module,exports){
36206 (function (Buffer){
36207 // prototype class for hash functions
36208 function Hash (blockSize, finalSize) {
36209 this._block = new Buffer(blockSize)
36210 this._finalSize = finalSize
36211 this._blockSize = blockSize
36212 this._len = 0
36213 this._s = 0
36214 }
36215
36216 Hash.prototype.update = function (data, enc) {
36217 if (typeof data === 'string') {
36218 enc = enc || 'utf8'
36219 data = new Buffer(data, enc)
36220 }
36221
36222 var l = this._len += data.length
36223 var s = this._s || 0
36224 var f = 0
36225 var buffer = this._block
36226
36227 while (s < l) {
36228 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
36229 var ch = (t - f)
36230
36231 for (var i = 0; i < ch; i++) {
36232 buffer[(s % this._blockSize) + i] = data[i + f]
36233 }
36234
36235 s += ch
36236 f += ch
36237
36238 if ((s % this._blockSize) === 0) {
36239 this._update(buffer)
36240 }
36241 }
36242 this._s = s
36243
36244 return this
36245 }
36246
36247 Hash.prototype.digest = function (enc) {
36248 // Suppose the length of the message M, in bits, is l
36249 var l = this._len * 8
36250
36251 // Append the bit 1 to the end of the message
36252 this._block[this._len % this._blockSize] = 0x80
36253
36254 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
36255 this._block.fill(0, this._len % this._blockSize + 1)
36256
36257 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
36258 this._update(this._block)
36259 this._block.fill(0)
36260 }
36261
36262 // to this append the block which is equal to the number l written in binary
36263 // TODO: handle case where l is > Math.pow(2, 29)
36264 this._block.writeInt32BE(l, this._blockSize - 4)
36265
36266 var hash = this._update(this._block) || this._hash()
36267
36268 return enc ? hash.toString(enc) : hash
36269 }
36270
36271 Hash.prototype._update = function () {
36272 throw new Error('_update must be implemented by subclass')
36273 }
36274
36275 module.exports = Hash
36276
36277 }).call(this,require("buffer").Buffer)
36278 },{"buffer":5}],80:[function(require,module,exports){
36279 var exports = module.exports = function SHA (algorithm) {
36280 algorithm = algorithm.toLowerCase()
36281
36282 var Algorithm = exports[algorithm]
36283 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
36284
36285 return new Algorithm()
36286 }
36287
36288 exports.sha = require('./sha')
36289 exports.sha1 = require('./sha1')
36290 exports.sha224 = require('./sha224')
36291 exports.sha256 = require('./sha256')
36292 exports.sha384 = require('./sha384')
36293 exports.sha512 = require('./sha512')
36294
36295 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
36296 (function (Buffer){
36297 /*
36298 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
36299 * in FIPS PUB 180-1
36300 * This source code is derived from sha1.js of the same repository.
36301 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
36302 * operation was added.
36303 */
36304
36305 var inherits = require('inherits')
36306 var Hash = require('./hash')
36307
36308 var K = [
36309 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
36310 ]
36311
36312 var W = new Array(80)
36313
36314 function Sha () {
36315 this.init()
36316 this._w = W
36317
36318 Hash.call(this, 64, 56)
36319 }
36320
36321 inherits(Sha, Hash)
36322
36323 Sha.prototype.init = function () {
36324 this._a = 0x67452301
36325 this._b = 0xefcdab89
36326 this._c = 0x98badcfe
36327 this._d = 0x10325476
36328 this._e = 0xc3d2e1f0
36329
36330 return this
36331 }
36332
36333 function rotl5 (num) {
36334 return (num << 5) | (num >>> 27)
36335 }
36336
36337 function rotl30 (num) {
36338 return (num << 30) | (num >>> 2)
36339 }
36340
36341 function ft (s, b, c, d) {
36342 if (s === 0) return (b & c) | ((~b) & d)
36343 if (s === 2) return (b & c) | (b & d) | (c & d)
36344 return b ^ c ^ d
36345 }
36346
36347 Sha.prototype._update = function (M) {
36348 var W = this._w
36349
36350 var a = this._a | 0
36351 var b = this._b | 0
36352 var c = this._c | 0
36353 var d = this._d | 0
36354 var e = this._e | 0
36355
36356 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36357 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
36358
36359 for (var j = 0; j < 80; ++j) {
36360 var s = ~~(j / 20)
36361 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
36362
36363 e = d
36364 d = c
36365 c = rotl30(b)
36366 b = a
36367 a = t
36368 }
36369
36370 this._a = (a + this._a) | 0
36371 this._b = (b + this._b) | 0
36372 this._c = (c + this._c) | 0
36373 this._d = (d + this._d) | 0
36374 this._e = (e + this._e) | 0
36375 }
36376
36377 Sha.prototype._hash = function () {
36378 var H = new Buffer(20)
36379
36380 H.writeInt32BE(this._a | 0, 0)
36381 H.writeInt32BE(this._b | 0, 4)
36382 H.writeInt32BE(this._c | 0, 8)
36383 H.writeInt32BE(this._d | 0, 12)
36384 H.writeInt32BE(this._e | 0, 16)
36385
36386 return H
36387 }
36388
36389 module.exports = Sha
36390
36391 }).call(this,require("buffer").Buffer)
36392 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
36393 (function (Buffer){
36394 /*
36395 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
36396 * in FIPS PUB 180-1
36397 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
36398 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36399 * Distributed under the BSD License
36400 * See http://pajhome.org.uk/crypt/md5 for details.
36401 */
36402
36403 var inherits = require('inherits')
36404 var Hash = require('./hash')
36405
36406 var K = [
36407 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
36408 ]
36409
36410 var W = new Array(80)
36411
36412 function Sha1 () {
36413 this.init()
36414 this._w = W
36415
36416 Hash.call(this, 64, 56)
36417 }
36418
36419 inherits(Sha1, Hash)
36420
36421 Sha1.prototype.init = function () {
36422 this._a = 0x67452301
36423 this._b = 0xefcdab89
36424 this._c = 0x98badcfe
36425 this._d = 0x10325476
36426 this._e = 0xc3d2e1f0
36427
36428 return this
36429 }
36430
36431 function rotl1 (num) {
36432 return (num << 1) | (num >>> 31)
36433 }
36434
36435 function rotl5 (num) {
36436 return (num << 5) | (num >>> 27)
36437 }
36438
36439 function rotl30 (num) {
36440 return (num << 30) | (num >>> 2)
36441 }
36442
36443 function ft (s, b, c, d) {
36444 if (s === 0) return (b & c) | ((~b) & d)
36445 if (s === 2) return (b & c) | (b & d) | (c & d)
36446 return b ^ c ^ d
36447 }
36448
36449 Sha1.prototype._update = function (M) {
36450 var W = this._w
36451
36452 var a = this._a | 0
36453 var b = this._b | 0
36454 var c = this._c | 0
36455 var d = this._d | 0
36456 var e = this._e | 0
36457
36458 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36459 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
36460
36461 for (var j = 0; j < 80; ++j) {
36462 var s = ~~(j / 20)
36463 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
36464
36465 e = d
36466 d = c
36467 c = rotl30(b)
36468 b = a
36469 a = t
36470 }
36471
36472 this._a = (a + this._a) | 0
36473 this._b = (b + this._b) | 0
36474 this._c = (c + this._c) | 0
36475 this._d = (d + this._d) | 0
36476 this._e = (e + this._e) | 0
36477 }
36478
36479 Sha1.prototype._hash = function () {
36480 var H = new Buffer(20)
36481
36482 H.writeInt32BE(this._a | 0, 0)
36483 H.writeInt32BE(this._b | 0, 4)
36484 H.writeInt32BE(this._c | 0, 8)
36485 H.writeInt32BE(this._d | 0, 12)
36486 H.writeInt32BE(this._e | 0, 16)
36487
36488 return H
36489 }
36490
36491 module.exports = Sha1
36492
36493 }).call(this,require("buffer").Buffer)
36494 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
36495 (function (Buffer){
36496 /**
36497 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36498 * in FIPS 180-2
36499 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36500 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36501 *
36502 */
36503
36504 var inherits = require('inherits')
36505 var Sha256 = require('./sha256')
36506 var Hash = require('./hash')
36507
36508 var W = new Array(64)
36509
36510 function Sha224 () {
36511 this.init()
36512
36513 this._w = W // new Array(64)
36514
36515 Hash.call(this, 64, 56)
36516 }
36517
36518 inherits(Sha224, Sha256)
36519
36520 Sha224.prototype.init = function () {
36521 this._a = 0xc1059ed8
36522 this._b = 0x367cd507
36523 this._c = 0x3070dd17
36524 this._d = 0xf70e5939
36525 this._e = 0xffc00b31
36526 this._f = 0x68581511
36527 this._g = 0x64f98fa7
36528 this._h = 0xbefa4fa4
36529
36530 return this
36531 }
36532
36533 Sha224.prototype._hash = function () {
36534 var H = new Buffer(28)
36535
36536 H.writeInt32BE(this._a, 0)
36537 H.writeInt32BE(this._b, 4)
36538 H.writeInt32BE(this._c, 8)
36539 H.writeInt32BE(this._d, 12)
36540 H.writeInt32BE(this._e, 16)
36541 H.writeInt32BE(this._f, 20)
36542 H.writeInt32BE(this._g, 24)
36543
36544 return H
36545 }
36546
36547 module.exports = Sha224
36548
36549 }).call(this,require("buffer").Buffer)
36550 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
36551 (function (Buffer){
36552 /**
36553 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36554 * in FIPS 180-2
36555 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36556 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36557 *
36558 */
36559
36560 var inherits = require('inherits')
36561 var Hash = require('./hash')
36562
36563 var K = [
36564 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
36565 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
36566 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
36567 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
36568 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
36569 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
36570 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
36571 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
36572 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
36573 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
36574 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
36575 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
36576 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
36577 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
36578 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
36579 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
36580 ]
36581
36582 var W = new Array(64)
36583
36584 function Sha256 () {
36585 this.init()
36586
36587 this._w = W // new Array(64)
36588
36589 Hash.call(this, 64, 56)
36590 }
36591
36592 inherits(Sha256, Hash)
36593
36594 Sha256.prototype.init = function () {
36595 this._a = 0x6a09e667
36596 this._b = 0xbb67ae85
36597 this._c = 0x3c6ef372
36598 this._d = 0xa54ff53a
36599 this._e = 0x510e527f
36600 this._f = 0x9b05688c
36601 this._g = 0x1f83d9ab
36602 this._h = 0x5be0cd19
36603
36604 return this
36605 }
36606
36607 function ch (x, y, z) {
36608 return z ^ (x & (y ^ z))
36609 }
36610
36611 function maj (x, y, z) {
36612 return (x & y) | (z & (x | y))
36613 }
36614
36615 function sigma0 (x) {
36616 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
36617 }
36618
36619 function sigma1 (x) {
36620 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
36621 }
36622
36623 function gamma0 (x) {
36624 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
36625 }
36626
36627 function gamma1 (x) {
36628 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
36629 }
36630
36631 Sha256.prototype._update = function (M) {
36632 var W = this._w
36633
36634 var a = this._a | 0
36635 var b = this._b | 0
36636 var c = this._c | 0
36637 var d = this._d | 0
36638 var e = this._e | 0
36639 var f = this._f | 0
36640 var g = this._g | 0
36641 var h = this._h | 0
36642
36643 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36644 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
36645
36646 for (var j = 0; j < 64; ++j) {
36647 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
36648 var T2 = (sigma0(a) + maj(a, b, c)) | 0
36649
36650 h = g
36651 g = f
36652 f = e
36653 e = (d + T1) | 0
36654 d = c
36655 c = b
36656 b = a
36657 a = (T1 + T2) | 0
36658 }
36659
36660 this._a = (a + this._a) | 0
36661 this._b = (b + this._b) | 0
36662 this._c = (c + this._c) | 0
36663 this._d = (d + this._d) | 0
36664 this._e = (e + this._e) | 0
36665 this._f = (f + this._f) | 0
36666 this._g = (g + this._g) | 0
36667 this._h = (h + this._h) | 0
36668 }
36669
36670 Sha256.prototype._hash = function () {
36671 var H = new Buffer(32)
36672
36673 H.writeInt32BE(this._a, 0)
36674 H.writeInt32BE(this._b, 4)
36675 H.writeInt32BE(this._c, 8)
36676 H.writeInt32BE(this._d, 12)
36677 H.writeInt32BE(this._e, 16)
36678 H.writeInt32BE(this._f, 20)
36679 H.writeInt32BE(this._g, 24)
36680 H.writeInt32BE(this._h, 28)
36681
36682 return H
36683 }
36684
36685 module.exports = Sha256
36686
36687 }).call(this,require("buffer").Buffer)
36688 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
36689 (function (Buffer){
36690 var inherits = require('inherits')
36691 var SHA512 = require('./sha512')
36692 var Hash = require('./hash')
36693
36694 var W = new Array(160)
36695
36696 function Sha384 () {
36697 this.init()
36698 this._w = W
36699
36700 Hash.call(this, 128, 112)
36701 }
36702
36703 inherits(Sha384, SHA512)
36704
36705 Sha384.prototype.init = function () {
36706 this._ah = 0xcbbb9d5d
36707 this._bh = 0x629a292a
36708 this._ch = 0x9159015a
36709 this._dh = 0x152fecd8
36710 this._eh = 0x67332667
36711 this._fh = 0x8eb44a87
36712 this._gh = 0xdb0c2e0d
36713 this._hh = 0x47b5481d
36714
36715 this._al = 0xc1059ed8
36716 this._bl = 0x367cd507
36717 this._cl = 0x3070dd17
36718 this._dl = 0xf70e5939
36719 this._el = 0xffc00b31
36720 this._fl = 0x68581511
36721 this._gl = 0x64f98fa7
36722 this._hl = 0xbefa4fa4
36723
36724 return this
36725 }
36726
36727 Sha384.prototype._hash = function () {
36728 var H = new Buffer(48)
36729
36730 function writeInt64BE (h, l, offset) {
36731 H.writeInt32BE(h, offset)
36732 H.writeInt32BE(l, offset + 4)
36733 }
36734
36735 writeInt64BE(this._ah, this._al, 0)
36736 writeInt64BE(this._bh, this._bl, 8)
36737 writeInt64BE(this._ch, this._cl, 16)
36738 writeInt64BE(this._dh, this._dl, 24)
36739 writeInt64BE(this._eh, this._el, 32)
36740 writeInt64BE(this._fh, this._fl, 40)
36741
36742 return H
36743 }
36744
36745 module.exports = Sha384
36746
36747 }).call(this,require("buffer").Buffer)
36748 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
36749 (function (Buffer){
36750 var inherits = require('inherits')
36751 var Hash = require('./hash')
36752
36753 var K = [
36754 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
36755 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
36756 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
36757 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
36758 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
36759 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
36760 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
36761 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
36762 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
36763 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
36764 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
36765 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
36766 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
36767 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
36768 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
36769 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
36770 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
36771 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
36772 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
36773 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
36774 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
36775 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
36776 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
36777 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
36778 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
36779 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
36780 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
36781 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
36782 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
36783 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
36784 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
36785 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
36786 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
36787 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
36788 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
36789 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
36790 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
36791 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36792 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
36793 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
36794 ]
36795
36796 var W = new Array(160)
36797
36798 function Sha512 () {
36799 this.init()
36800 this._w = W
36801
36802 Hash.call(this, 128, 112)
36803 }
36804
36805 inherits(Sha512, Hash)
36806
36807 Sha512.prototype.init = function () {
36808 this._ah = 0x6a09e667
36809 this._bh = 0xbb67ae85
36810 this._ch = 0x3c6ef372
36811 this._dh = 0xa54ff53a
36812 this._eh = 0x510e527f
36813 this._fh = 0x9b05688c
36814 this._gh = 0x1f83d9ab
36815 this._hh = 0x5be0cd19
36816
36817 this._al = 0xf3bcc908
36818 this._bl = 0x84caa73b
36819 this._cl = 0xfe94f82b
36820 this._dl = 0x5f1d36f1
36821 this._el = 0xade682d1
36822 this._fl = 0x2b3e6c1f
36823 this._gl = 0xfb41bd6b
36824 this._hl = 0x137e2179
36825
36826 return this
36827 }
36828
36829 function Ch (x, y, z) {
36830 return z ^ (x & (y ^ z))
36831 }
36832
36833 function maj (x, y, z) {
36834 return (x & y) | (z & (x | y))
36835 }
36836
36837 function sigma0 (x, xl) {
36838 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
36839 }
36840
36841 function sigma1 (x, xl) {
36842 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
36843 }
36844
36845 function Gamma0 (x, xl) {
36846 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
36847 }
36848
36849 function Gamma0l (x, xl) {
36850 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
36851 }
36852
36853 function Gamma1 (x, xl) {
36854 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
36855 }
36856
36857 function Gamma1l (x, xl) {
36858 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
36859 }
36860
36861 function getCarry (a, b) {
36862 return (a >>> 0) < (b >>> 0) ? 1 : 0
36863 }
36864
36865 Sha512.prototype._update = function (M) {
36866 var W = this._w
36867
36868 var ah = this._ah | 0
36869 var bh = this._bh | 0
36870 var ch = this._ch | 0
36871 var dh = this._dh | 0
36872 var eh = this._eh | 0
36873 var fh = this._fh | 0
36874 var gh = this._gh | 0
36875 var hh = this._hh | 0
36876
36877 var al = this._al | 0
36878 var bl = this._bl | 0
36879 var cl = this._cl | 0
36880 var dl = this._dl | 0
36881 var el = this._el | 0
36882 var fl = this._fl | 0
36883 var gl = this._gl | 0
36884 var hl = this._hl | 0
36885
36886 for (var i = 0; i < 32; i += 2) {
36887 W[i] = M.readInt32BE(i * 4)
36888 W[i + 1] = M.readInt32BE(i * 4 + 4)
36889 }
36890 for (; i < 160; i += 2) {
36891 var xh = W[i - 15 * 2]
36892 var xl = W[i - 15 * 2 + 1]
36893 var gamma0 = Gamma0(xh, xl)
36894 var gamma0l = Gamma0l(xl, xh)
36895
36896 xh = W[i - 2 * 2]
36897 xl = W[i - 2 * 2 + 1]
36898 var gamma1 = Gamma1(xh, xl)
36899 var gamma1l = Gamma1l(xl, xh)
36900
36901 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
36902 var Wi7h = W[i - 7 * 2]
36903 var Wi7l = W[i - 7 * 2 + 1]
36904
36905 var Wi16h = W[i - 16 * 2]
36906 var Wi16l = W[i - 16 * 2 + 1]
36907
36908 var Wil = (gamma0l + Wi7l) | 0
36909 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
36910 Wil = (Wil + gamma1l) | 0
36911 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
36912 Wil = (Wil + Wi16l) | 0
36913 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
36914
36915 W[i] = Wih
36916 W[i + 1] = Wil
36917 }
36918
36919 for (var j = 0; j < 160; j += 2) {
36920 Wih = W[j]
36921 Wil = W[j + 1]
36922
36923 var majh = maj(ah, bh, ch)
36924 var majl = maj(al, bl, cl)
36925
36926 var sigma0h = sigma0(ah, al)
36927 var sigma0l = sigma0(al, ah)
36928 var sigma1h = sigma1(eh, el)
36929 var sigma1l = sigma1(el, eh)
36930
36931 // t1 = h + sigma1 + ch + K[j] + W[j]
36932 var Kih = K[j]
36933 var Kil = K[j + 1]
36934
36935 var chh = Ch(eh, fh, gh)
36936 var chl = Ch(el, fl, gl)
36937
36938 var t1l = (hl + sigma1l) | 0
36939 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
36940 t1l = (t1l + chl) | 0
36941 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
36942 t1l = (t1l + Kil) | 0
36943 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
36944 t1l = (t1l + Wil) | 0
36945 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
36946
36947 // t2 = sigma0 + maj
36948 var t2l = (sigma0l + majl) | 0
36949 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
36950
36951 hh = gh
36952 hl = gl
36953 gh = fh
36954 gl = fl
36955 fh = eh
36956 fl = el
36957 el = (dl + t1l) | 0
36958 eh = (dh + t1h + getCarry(el, dl)) | 0
36959 dh = ch
36960 dl = cl
36961 ch = bh
36962 cl = bl
36963 bh = ah
36964 bl = al
36965 al = (t1l + t2l) | 0
36966 ah = (t1h + t2h + getCarry(al, t1l)) | 0
36967 }
36968
36969 this._al = (this._al + al) | 0
36970 this._bl = (this._bl + bl) | 0
36971 this._cl = (this._cl + cl) | 0
36972 this._dl = (this._dl + dl) | 0
36973 this._el = (this._el + el) | 0
36974 this._fl = (this._fl + fl) | 0
36975 this._gl = (this._gl + gl) | 0
36976 this._hl = (this._hl + hl) | 0
36977
36978 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
36979 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
36980 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
36981 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
36982 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
36983 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
36984 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
36985 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
36986 }
36987
36988 Sha512.prototype._hash = function () {
36989 var H = new Buffer(64)
36990
36991 function writeInt64BE (h, l, offset) {
36992 H.writeInt32BE(h, offset)
36993 H.writeInt32BE(l, offset + 4)
36994 }
36995
36996 writeInt64BE(this._ah, this._al, 0)
36997 writeInt64BE(this._bh, this._bl, 8)
36998 writeInt64BE(this._ch, this._cl, 16)
36999 writeInt64BE(this._dh, this._dl, 24)
37000 writeInt64BE(this._eh, this._el, 32)
37001 writeInt64BE(this._fh, this._fl, 40)
37002 writeInt64BE(this._gh, this._gl, 48)
37003 writeInt64BE(this._hh, this._hl, 56)
37004
37005 return H
37006 }
37007
37008 module.exports = Sha512
37009
37010 }).call(this,require("buffer").Buffer)
37011 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
37012 var isHexPrefixed = require('is-hex-prefixed');
37013
37014 /**
37015 * Removes '0x' from a given `String` is present
37016 * @param {String} str the string value
37017 * @return {String|Optional} a string by pass if necessary
37018 */
37019 module.exports = function stripHexPrefix(str) {
37020 if (typeof str !== 'string') {
37021 return str;
37022 }
37023
37024 return isHexPrefixed(str) ? str.slice(2) : str;
37025 }
37026
37027 },{"is-hex-prefixed":64}]},{},[31])(31)
37028 });</script>
37029 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
37030
37031 //// base.js
37032
37033 /** @fileOverview Javascript cryptography implementation.
37034 *
37035 * Crush to remove comments, shorten variable names and
37036 * generally reduce transmission size.
37037 *
37038 * @author Emily Stark
37039 * @author Mike Hamburg
37040 * @author Dan Boneh
37041 */
37042
37043 "use strict";
37044 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
37045 /*global document, window, escape, unescape, module, require, Uint32Array */
37046
37047 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
37048 var sjcl = {
37049 /** @namespace Symmetric ciphers. */
37050 cipher: {},
37051
37052 /** @namespace Hash functions. Right now only SHA256 is implemented. */
37053 hash: {},
37054
37055 /** @namespace Key exchange functions. Right now only SRP is implemented. */
37056 keyexchange: {},
37057
37058 /** @namespace Block cipher modes of operation. */
37059 mode: {},
37060
37061 /** @namespace Miscellaneous. HMAC and PBKDF2. */
37062 misc: {},
37063
37064 /**
37065 * @namespace Bit array encoders and decoders.
37066 *
37067 * @description
37068 * The members of this namespace are functions which translate between
37069 * SJCL's bitArrays and other objects (usually strings). Because it
37070 * isn't always clear which direction is encoding and which is decoding,
37071 * the method names are "fromBits" and "toBits".
37072 */
37073 codec: {},
37074
37075 /** @namespace Exceptions. */
37076 exception: {
37077 /** @constructor Ciphertext is corrupt. */
37078 corrupt: function(message) {
37079 this.toString = function() { return "CORRUPT: "+this.message; };
37080 this.message = message;
37081 },
37082
37083 /** @constructor Invalid parameter. */
37084 invalid: function(message) {
37085 this.toString = function() { return "INVALID: "+this.message; };
37086 this.message = message;
37087 },
37088
37089 /** @constructor Bug or missing feature in SJCL. @constructor */
37090 bug: function(message) {
37091 this.toString = function() { return "BUG: "+this.message; };
37092 this.message = message;
37093 },
37094
37095 /** @constructor Something isn't ready. */
37096 notReady: function(message) {
37097 this.toString = function() { return "NOT READY: "+this.message; };
37098 this.message = message;
37099 }
37100 }
37101 };
37102
37103 if(typeof module !== 'undefined' && module.exports){
37104 module.exports = sjcl;
37105 }
37106 if (typeof define === "function") {
37107 define([], function () {
37108 return sjcl;
37109 });
37110 }
37111
37112
37113 //// bitArray.js
37114
37115 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
37116 *
37117 * @author Emily Stark
37118 * @author Mike Hamburg
37119 * @author Dan Boneh
37120 */
37121
37122 /** @namespace Arrays of bits, encoded as arrays of Numbers.
37123 *
37124 * @description
37125 * <p>
37126 * These objects are the currency accepted by SJCL's crypto functions.
37127 * </p>
37128 *
37129 * <p>
37130 * Most of our crypto primitives operate on arrays of 4-byte words internally,
37131 * but many of them can take arguments that are not a multiple of 4 bytes.
37132 * This library encodes arrays of bits (whose size need not be a multiple of 8
37133 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
37134 * array of words, 32 bits at a time. Since the words are double-precision
37135 * floating point numbers, they fit some extra data. We use this (in a private,
37136 * possibly-changing manner) to encode the number of bits actually present
37137 * in the last word of the array.
37138 * </p>
37139 *
37140 * <p>
37141 * Because bitwise ops clear this out-of-band data, these arrays can be passed
37142 * to ciphers like AES which want arrays of words.
37143 * </p>
37144 */
37145 sjcl.bitArray = {
37146 /**
37147 * Array slices in units of bits.
37148 * @param {bitArray} a The array to slice.
37149 * @param {Number} bstart The offset to the start of the slice, in bits.
37150 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
37151 * slice until the end of the array.
37152 * @return {bitArray} The requested slice.
37153 */
37154 bitSlice: function (a, bstart, bend) {
37155 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
37156 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
37157 },
37158
37159 /**
37160 * Extract a number packed into a bit array.
37161 * @param {bitArray} a The array to slice.
37162 * @param {Number} bstart The offset to the start of the slice, in bits.
37163 * @param {Number} length The length of the number to extract.
37164 * @return {Number} The requested slice.
37165 */
37166 extract: function(a, bstart, blength) {
37167 // FIXME: this Math.floor is not necessary at all, but for some reason
37168 // seems to suppress a bug in the Chromium JIT.
37169 var x, sh = Math.floor((-bstart-blength) & 31);
37170 if ((bstart + blength - 1 ^ bstart) & -32) {
37171 // it crosses a boundary
37172 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
37173 } else {
37174 // within a single word
37175 x = a[bstart/32|0] >>> sh;
37176 }
37177 return x & ((1<<blength) - 1);
37178 },
37179
37180 /**
37181 * Concatenate two bit arrays.
37182 * @param {bitArray} a1 The first array.
37183 * @param {bitArray} a2 The second array.
37184 * @return {bitArray} The concatenation of a1 and a2.
37185 */
37186 concat: function (a1, a2) {
37187 if (a1.length === 0 || a2.length === 0) {
37188 return a1.concat(a2);
37189 }
37190
37191 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
37192 if (shift === 32) {
37193 return a1.concat(a2);
37194 } else {
37195 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
37196 }
37197 },
37198
37199 /**
37200 * Find the length of an array of bits.
37201 * @param {bitArray} a The array.
37202 * @return {Number} The length of a, in bits.
37203 */
37204 bitLength: function (a) {
37205 var l = a.length, x;
37206 if (l === 0) { return 0; }
37207 x = a[l - 1];
37208 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
37209 },
37210
37211 /**
37212 * Truncate an array.
37213 * @param {bitArray} a The array.
37214 * @param {Number} len The length to truncate to, in bits.
37215 * @return {bitArray} A new array, truncated to len bits.
37216 */
37217 clamp: function (a, len) {
37218 if (a.length * 32 < len) { return a; }
37219 a = a.slice(0, Math.ceil(len / 32));
37220 var l = a.length;
37221 len = len & 31;
37222 if (l > 0 && len) {
37223 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
37224 }
37225 return a;
37226 },
37227
37228 /**
37229 * Make a partial word for a bit array.
37230 * @param {Number} len The number of bits in the word.
37231 * @param {Number} x The bits.
37232 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
37233 * @return {Number} The partial word.
37234 */
37235 partial: function (len, x, _end) {
37236 if (len === 32) { return x; }
37237 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
37238 },
37239
37240 /**
37241 * Get the number of bits used by a partial word.
37242 * @param {Number} x The partial word.
37243 * @return {Number} The number of bits used by the partial word.
37244 */
37245 getPartial: function (x) {
37246 return Math.round(x/0x10000000000) || 32;
37247 },
37248
37249 /**
37250 * Compare two arrays for equality in a predictable amount of time.
37251 * @param {bitArray} a The first array.
37252 * @param {bitArray} b The second array.
37253 * @return {boolean} true if a == b; false otherwise.
37254 */
37255 equal: function (a, b) {
37256 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
37257 return false;
37258 }
37259 var x = 0, i;
37260 for (i=0; i<a.length; i++) {
37261 x |= a[i]^b[i];
37262 }
37263 return (x === 0);
37264 },
37265
37266 /** Shift an array right.
37267 * @param {bitArray} a The array to shift.
37268 * @param {Number} shift The number of bits to shift.
37269 * @param {Number} [carry=0] A byte to carry in
37270 * @param {bitArray} [out=[]] An array to prepend to the output.
37271 * @private
37272 */
37273 _shiftRight: function (a, shift, carry, out) {
37274 var i, last2=0, shift2;
37275 if (out === undefined) { out = []; }
37276
37277 for (; shift >= 32; shift -= 32) {
37278 out.push(carry);
37279 carry = 0;
37280 }
37281 if (shift === 0) {
37282 return out.concat(a);
37283 }
37284
37285 for (i=0; i<a.length; i++) {
37286 out.push(carry | a[i]>>>shift);
37287 carry = a[i] << (32-shift);
37288 }
37289 last2 = a.length ? a[a.length-1] : 0;
37290 shift2 = sjcl.bitArray.getPartial(last2);
37291 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
37292 return out;
37293 },
37294
37295 /** xor a block of 4 words together.
37296 * @private
37297 */
37298 _xor4: function(x,y) {
37299 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
37300 },
37301
37302 /** byteswap a word array inplace.
37303 * (does not handle partial words)
37304 * @param {sjcl.bitArray} a word array
37305 * @return {sjcl.bitArray} byteswapped array
37306 */
37307 byteswapM: function(a) {
37308 var i, v, m = 0xff00;
37309 for (i = 0; i < a.length; ++i) {
37310 v = a[i];
37311 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
37312 }
37313 return a;
37314 }
37315 };
37316
37317
37318 //// codecString.js
37319
37320 /** @fileOverview Bit array codec implementations.
37321 *
37322 * @author Emily Stark
37323 * @author Mike Hamburg
37324 * @author Dan Boneh
37325 */
37326
37327 /** @namespace UTF-8 strings */
37328 sjcl.codec.utf8String = {
37329 /** Convert from a bitArray to a UTF-8 string. */
37330 fromBits: function (arr) {
37331 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
37332 for (i=0; i<bl/8; i++) {
37333 if ((i&3) === 0) {
37334 tmp = arr[i/4];
37335 }
37336 out += String.fromCharCode(tmp >>> 24);
37337 tmp <<= 8;
37338 }
37339 return decodeURIComponent(escape(out));
37340 },
37341
37342 /** Convert from a UTF-8 string to a bitArray. */
37343 toBits: function (str) {
37344 str = unescape(encodeURIComponent(str));
37345 var out = [], i, tmp=0;
37346 for (i=0; i<str.length; i++) {
37347 tmp = tmp << 8 | str.charCodeAt(i);
37348 if ((i&3) === 3) {
37349 out.push(tmp);
37350 tmp = 0;
37351 }
37352 }
37353 if (i&3) {
37354 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
37355 }
37356 return out;
37357 }
37358 };
37359
37360
37361 //// codecHex.js
37362
37363 /** @fileOverview Bit array codec implementations.
37364 *
37365 * @author Emily Stark
37366 * @author Mike Hamburg
37367 * @author Dan Boneh
37368 */
37369
37370 /** @namespace Hexadecimal */
37371 sjcl.codec.hex = {
37372 /** Convert from a bitArray to a hex string. */
37373 fromBits: function (arr) {
37374 var out = "", i;
37375 for (i=0; i<arr.length; i++) {
37376 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
37377 }
37378 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
37379 },
37380 /** Convert from a hex string to a bitArray. */
37381 toBits: function (str) {
37382 var i, out=[], len;
37383 str = str.replace(/\s|0x/g, "");
37384 len = str.length;
37385 str = str + "00000000";
37386 for (i=0; i<str.length; i+=8) {
37387 out.push(parseInt(str.substr(i,8),16)^0);
37388 }
37389 return sjcl.bitArray.clamp(out, len*4);
37390 }
37391 };
37392
37393
37394 //// sha512.js
37395
37396 /** @fileOverview Javascript SHA-512 implementation.
37397 *
37398 * This implementation was written for CryptoJS by Jeff Mott and adapted for
37399 * SJCL by Stefan Thomas.
37400 *
37401 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
37402 * Released with New BSD License
37403 *
37404 * @author Emily Stark
37405 * @author Mike Hamburg
37406 * @author Dan Boneh
37407 * @author Jeff Mott
37408 * @author Stefan Thomas
37409 */
37410
37411 /**
37412 * Context for a SHA-512 operation in progress.
37413 * @constructor
37414 * @class Secure Hash Algorithm, 512 bits.
37415 */
37416 sjcl.hash.sha512 = function (hash) {
37417 if (!this._key[0]) { this._precompute(); }
37418 if (hash) {
37419 this._h = hash._h.slice(0);
37420 this._buffer = hash._buffer.slice(0);
37421 this._length = hash._length;
37422 } else {
37423 this.reset();
37424 }
37425 };
37426
37427 /**
37428 * Hash a string or an array of words.
37429 * @static
37430 * @param {bitArray|String} data the data to hash.
37431 * @return {bitArray} The hash value, an array of 16 big-endian words.
37432 */
37433 sjcl.hash.sha512.hash = function (data) {
37434 return (new sjcl.hash.sha512()).update(data).finalize();
37435 };
37436
37437 sjcl.hash.sha512.prototype = {
37438 /**
37439 * The hash's block size, in bits.
37440 * @constant
37441 */
37442 blockSize: 1024,
37443
37444 /**
37445 * Reset the hash state.
37446 * @return this
37447 */
37448 reset:function () {
37449 this._h = this._init.slice(0);
37450 this._buffer = [];
37451 this._length = 0;
37452 return this;
37453 },
37454
37455 /**
37456 * Input several words to the hash.
37457 * @param {bitArray|String} data the data to hash.
37458 * @return this
37459 */
37460 update: function (data) {
37461 if (typeof data === "string") {
37462 data = sjcl.codec.utf8String.toBits(data);
37463 }
37464 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37465 ol = this._length,
37466 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37467 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
37468 this._block(b.splice(0,32));
37469 }
37470 return this;
37471 },
37472
37473 /**
37474 * Complete hashing and output the hash value.
37475 * @return {bitArray} The hash value, an array of 16 big-endian words.
37476 */
37477 finalize:function () {
37478 var i, b = this._buffer, h = this._h;
37479
37480 // Round out and push the buffer
37481 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37482
37483 // Round out the buffer to a multiple of 32 words, less the 4 length words.
37484 for (i = b.length + 4; i & 31; i++) {
37485 b.push(0);
37486 }
37487
37488 // append the length
37489 b.push(0);
37490 b.push(0);
37491 b.push(Math.floor(this._length / 0x100000000));
37492 b.push(this._length | 0);
37493
37494 while (b.length) {
37495 this._block(b.splice(0,32));
37496 }
37497
37498 this.reset();
37499 return h;
37500 },
37501
37502 /**
37503 * The SHA-512 initialization vector, to be precomputed.
37504 * @private
37505 */
37506 _init:[],
37507
37508 /**
37509 * Least significant 24 bits of SHA512 initialization values.
37510 *
37511 * Javascript only has 53 bits of precision, so we compute the 40 most
37512 * significant bits and add the remaining 24 bits as constants.
37513 *
37514 * @private
37515 */
37516 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
37517
37518 /*
37519 _init:
37520 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
37521 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
37522 */
37523
37524 /**
37525 * The SHA-512 hash key, to be precomputed.
37526 * @private
37527 */
37528 _key:[],
37529
37530 /**
37531 * Least significant 24 bits of SHA512 key values.
37532 * @private
37533 */
37534 _keyr:
37535 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
37536 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
37537 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
37538 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
37539 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
37540 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
37541 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
37542 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
37543 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
37544 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
37545
37546 /*
37547 _key:
37548 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37549 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37550 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37551 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37552 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37553 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37554 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37555 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37556 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37557 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37558 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37559 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37560 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37561 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37562 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37563 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37564 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37565 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37566 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37567 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
37568 */
37569
37570 /**
37571 * Function to precompute _init and _key.
37572 * @private
37573 */
37574 _precompute: function () {
37575 // XXX: This code is for precomputing the SHA256 constants, change for
37576 // SHA512 and re-enable.
37577 var i = 0, prime = 2, factor;
37578
37579 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37580 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
37581
37582 outer: for (; i<80; prime++) {
37583 for (factor=2; factor*factor <= prime; factor++) {
37584 if (prime % factor === 0) {
37585 // not a prime
37586 continue outer;
37587 }
37588 }
37589
37590 if (i<8) {
37591 this._init[i*2] = frac(Math.pow(prime, 1/2));
37592 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
37593 }
37594 this._key[i*2] = frac(Math.pow(prime, 1/3));
37595 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
37596 i++;
37597 }
37598 },
37599
37600 /**
37601 * Perform one cycle of SHA-512.
37602 * @param {bitArray} words one block of words.
37603 * @private
37604 */
37605 _block:function (words) {
37606 var i, wrh, wrl,
37607 w = words.slice(0),
37608 h = this._h,
37609 k = this._key,
37610 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
37611 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
37612 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
37613 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
37614
37615 // Working variables
37616 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
37617 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
37618 eh = h4h, el = h4l, fh = h5h, fl = h5l,
37619 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
37620
37621 for (i=0; i<80; i++) {
37622 // load up the input word for this round
37623 if (i<16) {
37624 wrh = w[i * 2];
37625 wrl = w[i * 2 + 1];
37626 } else {
37627 // Gamma0
37628 var gamma0xh = w[(i-15) * 2];
37629 var gamma0xl = w[(i-15) * 2 + 1];
37630 var gamma0h =
37631 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
37632 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
37633 (gamma0xh >>> 7);
37634 var gamma0l =
37635 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
37636 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
37637 ((gamma0xh << 25) | (gamma0xl >>> 7));
37638
37639 // Gamma1
37640 var gamma1xh = w[(i-2) * 2];
37641 var gamma1xl = w[(i-2) * 2 + 1];
37642 var gamma1h =
37643 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
37644 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
37645 (gamma1xh >>> 6);
37646 var gamma1l =
37647 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
37648 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
37649 ((gamma1xh << 26) | (gamma1xl >>> 6));
37650
37651 // Shortcuts
37652 var wr7h = w[(i-7) * 2];
37653 var wr7l = w[(i-7) * 2 + 1];
37654
37655 var wr16h = w[(i-16) * 2];
37656 var wr16l = w[(i-16) * 2 + 1];
37657
37658 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
37659 wrl = gamma0l + wr7l;
37660 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
37661 wrl += gamma1l;
37662 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
37663 wrl += wr16l;
37664 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
37665 }
37666
37667 w[i*2] = wrh |= 0;
37668 w[i*2 + 1] = wrl |= 0;
37669
37670 // Ch
37671 var chh = (eh & fh) ^ (~eh & gh);
37672 var chl = (el & fl) ^ (~el & gl);
37673
37674 // Maj
37675 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
37676 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
37677
37678 // Sigma0
37679 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
37680 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
37681
37682 // Sigma1
37683 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
37684 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
37685
37686 // K(round)
37687 var krh = k[i*2];
37688 var krl = k[i*2+1];
37689
37690 // t1 = h + sigma1 + ch + K(round) + W(round)
37691 var t1l = hl + sigma1l;
37692 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
37693 t1l += chl;
37694 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
37695 t1l += krl;
37696 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
37697 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
37698 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
37699
37700 // t2 = sigma0 + maj
37701 var t2l = sigma0l + majl;
37702 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
37703
37704 // Update working variables
37705 hh = gh;
37706 hl = gl;
37707 gh = fh;
37708 gl = fl;
37709 fh = eh;
37710 fl = el;
37711 el = (dl + t1l) | 0;
37712 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37713 dh = ch;
37714 dl = cl;
37715 ch = bh;
37716 cl = bl;
37717 bh = ah;
37718 bl = al;
37719 al = (t1l + t2l) | 0;
37720 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
37721 }
37722
37723 // Intermediate hash
37724 h0l = h[1] = (h0l + al) | 0;
37725 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
37726 h1l = h[3] = (h1l + bl) | 0;
37727 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
37728 h2l = h[5] = (h2l + cl) | 0;
37729 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
37730 h3l = h[7] = (h3l + dl) | 0;
37731 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37732 h4l = h[9] = (h4l + el) | 0;
37733 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
37734 h5l = h[11] = (h5l + fl) | 0;
37735 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
37736 h6l = h[13] = (h6l + gl) | 0;
37737 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
37738 h7l = h[15] = (h7l + hl) | 0;
37739 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
37740 }
37741 };
37742
37743
37744 //// hmac.js
37745
37746 /** @fileOverview HMAC implementation.
37747 *
37748 * @author Emily Stark
37749 * @author Mike Hamburg
37750 * @author Dan Boneh
37751 */
37752
37753 /** HMAC with the specified hash function.
37754 * @constructor
37755 * @param {bitArray} key the key for HMAC.
37756 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
37757 */
37758 sjcl.misc.hmac = function (key, Hash) {
37759 this._hash = Hash = Hash || sjcl.hash.sha256;
37760 var exKey = [[],[]], i,
37761 bs = Hash.prototype.blockSize / 32;
37762 this._baseHash = [new Hash(), new Hash()];
37763
37764 if (key.length > bs) {
37765 key = Hash.hash(key);
37766 }
37767
37768 for (i=0; i<bs; i++) {
37769 exKey[0][i] = key[i]^0x36363636;
37770 exKey[1][i] = key[i]^0x5C5C5C5C;
37771 }
37772
37773 this._baseHash[0].update(exKey[0]);
37774 this._baseHash[1].update(exKey[1]);
37775 this._resultHash = new Hash(this._baseHash[0]);
37776 };
37777
37778 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
37779 * @param {bitArray|String} data The data to mac.
37780 */
37781 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
37782 if (!this._updated) {
37783 this.update(data);
37784 return this.digest(data);
37785 } else {
37786 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
37787 }
37788 };
37789
37790 sjcl.misc.hmac.prototype.reset = function () {
37791 this._resultHash = new this._hash(this._baseHash[0]);
37792 this._updated = false;
37793 };
37794
37795 sjcl.misc.hmac.prototype.update = function (data) {
37796 this._updated = true;
37797 this._resultHash.update(data);
37798 };
37799
37800 sjcl.misc.hmac.prototype.digest = function () {
37801 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
37802
37803 this.reset();
37804
37805 return result;
37806 };
37807
37808
37809 //// pbkdf2.js
37810
37811
37812 /** @fileOverview Password-based key-derivation function, version 2.0.
37813 *
37814 * @author Emily Stark
37815 * @author Mike Hamburg
37816 * @author Dan Boneh
37817 */
37818
37819 /** Password-Based Key-Derivation Function, version 2.0.
37820 *
37821 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
37822 *
37823 * This is the method specified by RSA's PKCS #5 standard.
37824 *
37825 * @param {bitArray|String} password The password.
37826 * @param {bitArray|String} salt The salt. Should have lots of entropy.
37827 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
37828 * @param {Number} [length] The length of the derived key. Defaults to the
37829 output size of the hash function.
37830 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
37831 * @return {bitArray} the derived key.
37832 */
37833 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
37834 count = count || 1000;
37835
37836 if (length < 0 || count < 0) {
37837 throw sjcl.exception.invalid("invalid params to pbkdf2");
37838 }
37839
37840 if (typeof password === "string") {
37841 password = sjcl.codec.utf8String.toBits(password);
37842 }
37843
37844 if (typeof salt === "string") {
37845 salt = sjcl.codec.utf8String.toBits(salt);
37846 }
37847
37848 Prff = Prff || sjcl.misc.hmac;
37849
37850 var prf = new Prff(password),
37851 u, ui, i, j, k, out = [], b = sjcl.bitArray;
37852
37853 for (k = 1; 32 * out.length < (length || 1); k++) {
37854 u = ui = prf.encrypt(b.concat(salt,[k]));
37855
37856 for (i=1; i<count; i++) {
37857 ui = prf.encrypt(ui);
37858 for (j=0; j<ui.length; j++) {
37859 u[j] ^= ui[j];
37860 }
37861 }
37862
37863 out = out.concat(u);
37864 }
37865
37866 if (length) { out = b.clamp(out, length); }
37867
37868 return out;
37869 };
37870
37871
37872 //// sha256.js
37873
37874 /** @fileOverview Javascript SHA-256 implementation.
37875 *
37876 * An older version of this implementation is available in the public
37877 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
37878 * Stanford University 2008-2010 and BSD-licensed for liability
37879 * reasons.
37880 *
37881 * Special thanks to Aldo Cortesi for pointing out several bugs in
37882 * this code.
37883 *
37884 * @author Emily Stark
37885 * @author Mike Hamburg
37886 * @author Dan Boneh
37887 */
37888
37889 /**
37890 * Context for a SHA-256 operation in progress.
37891 * @constructor
37892 * @class Secure Hash Algorithm, 256 bits.
37893 */
37894 sjcl.hash.sha256 = function (hash) {
37895 if (!this._key[0]) { this._precompute(); }
37896 if (hash) {
37897 this._h = hash._h.slice(0);
37898 this._buffer = hash._buffer.slice(0);
37899 this._length = hash._length;
37900 } else {
37901 this.reset();
37902 }
37903 };
37904
37905 /**
37906 * Hash a string or an array of words.
37907 * @static
37908 * @param {bitArray|String} data the data to hash.
37909 * @return {bitArray} The hash value, an array of 16 big-endian words.
37910 */
37911 sjcl.hash.sha256.hash = function (data) {
37912 return (new sjcl.hash.sha256()).update(data).finalize();
37913 };
37914
37915 sjcl.hash.sha256.prototype = {
37916 /**
37917 * The hash's block size, in bits.
37918 * @constant
37919 */
37920 blockSize: 512,
37921
37922 /**
37923 * Reset the hash state.
37924 * @return this
37925 */
37926 reset:function () {
37927 this._h = this._init.slice(0);
37928 this._buffer = [];
37929 this._length = 0;
37930 return this;
37931 },
37932
37933 /**
37934 * Input several words to the hash.
37935 * @param {bitArray|String} data the data to hash.
37936 * @return this
37937 */
37938 update: function (data) {
37939 if (typeof data === "string") {
37940 data = sjcl.codec.utf8String.toBits(data);
37941 }
37942 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37943 ol = this._length,
37944 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37945 for (i = 512+ol & -512; i <= nl; i+= 512) {
37946 this._block(b.splice(0,16));
37947 }
37948 return this;
37949 },
37950
37951 /**
37952 * Complete hashing and output the hash value.
37953 * @return {bitArray} The hash value, an array of 8 big-endian words.
37954 */
37955 finalize:function () {
37956 var i, b = this._buffer, h = this._h;
37957
37958 // Round out and push the buffer
37959 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37960
37961 // Round out the buffer to a multiple of 16 words, less the 2 length words.
37962 for (i = b.length + 2; i & 15; i++) {
37963 b.push(0);
37964 }
37965
37966 // append the length
37967 b.push(Math.floor(this._length / 0x100000000));
37968 b.push(this._length | 0);
37969
37970 while (b.length) {
37971 this._block(b.splice(0,16));
37972 }
37973
37974 this.reset();
37975 return h;
37976 },
37977
37978 /**
37979 * The SHA-256 initialization vector, to be precomputed.
37980 * @private
37981 */
37982 _init:[],
37983 /*
37984 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
37985 */
37986
37987 /**
37988 * The SHA-256 hash key, to be precomputed.
37989 * @private
37990 */
37991 _key:[],
37992 /*
37993 _key:
37994 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37995 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37996 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37997 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37998 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37999 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
38000 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
38001 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
38002 */
38003
38004
38005 /**
38006 * Function to precompute _init and _key.
38007 * @private
38008 */
38009 _precompute: function () {
38010 var i = 0, prime = 2, factor;
38011
38012 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
38013
38014 outer: for (; i<64; prime++) {
38015 for (factor=2; factor*factor <= prime; factor++) {
38016 if (prime % factor === 0) {
38017 // not a prime
38018 continue outer;
38019 }
38020 }
38021
38022 if (i<8) {
38023 this._init[i] = frac(Math.pow(prime, 1/2));
38024 }
38025 this._key[i] = frac(Math.pow(prime, 1/3));
38026 i++;
38027 }
38028 },
38029
38030 /**
38031 * Perform one cycle of SHA-256.
38032 * @param {bitArray} words one block of words.
38033 * @private
38034 */
38035 _block:function (words) {
38036 var i, tmp, a, b,
38037 w = words.slice(0),
38038 h = this._h,
38039 k = this._key,
38040 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
38041 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
38042
38043 /* Rationale for placement of |0 :
38044 * If a value can overflow is original 32 bits by a factor of more than a few
38045 * million (2^23 ish), there is a possibility that it might overflow the
38046 * 53-bit mantissa and lose precision.
38047 *
38048 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
38049 * propagates around the loop, and on the hash state h[]. I don't believe
38050 * that the clamps on h4 and on h0 are strictly necessary, but it's close
38051 * (for h4 anyway), and better safe than sorry.
38052 *
38053 * The clamps on h[] are necessary for the output to be correct even in the
38054 * common case and for short inputs.
38055 */
38056 for (i=0; i<64; i++) {
38057 // load up the input word for this round
38058 if (i<16) {
38059 tmp = w[i];
38060 } else {
38061 a = w[(i+1 ) & 15];
38062 b = w[(i+14) & 15];
38063 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
38064 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
38065 w[i&15] + w[(i+9) & 15]) | 0;
38066 }
38067
38068 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
38069
38070 // shift register
38071 h7 = h6; h6 = h5; h5 = h4;
38072 h4 = h3 + tmp | 0;
38073 h3 = h2; h2 = h1; h1 = h0;
38074
38075 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
38076 }
38077
38078 h[0] = h[0]+h0 | 0;
38079 h[1] = h[1]+h1 | 0;
38080 h[2] = h[2]+h2 | 0;
38081 h[3] = h[3]+h3 | 0;
38082 h[4] = h[4]+h4 | 0;
38083 h[5] = h[5]+h5 | 0;
38084 h[6] = h[6]+h6 | 0;
38085 h[7] = h[7]+h7 | 0;
38086 }
38087 };
38088 </script>
38089 <script>// An extremely basic translation library
38090 //
38091 // Example usage:
38092 //
38093 // Set some html to be translated. Do this using the 'data-translate' attribute:
38094 //
38095 // <div data-translate>Test</div>
38096 // <div data-translate-html><em>keep em tag</em></div>
38097 // <input data-translate-placeholder placeholder="Example placeholder">
38098 // <span data-translate-title title="Example title"></span>
38099 //
38100 // Obtain all the phrases to be translated via js debug console:
38101 //
38102 // Translate.phrasesAsJson();
38103 //
38104 // Use that template to translate the phrases into another language.
38105 // Leave the key the same. Change the value to the new language.
38106 //
38107 // Create a js file to load the new phrases. In this example for Spanish,
38108 // es.js will contain the following code:
38109 //
38110 // Translate.loadForeignPhrases("es", {
38111 // "Test": "Test in Spanish",
38112 // "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
38113 // "Example placeholder": "Example placeholder in Spanish"
38114 // "Example title": "Example title in Spanish"
38115 // });
38116 //
38117 // In your UI put a listener for clicking on the Spanish button:
38118 //
38119 // mySpanishButton.addEventListener("click", function() {
38120 // Translate.setLanguage("es");
38121 // });
38122 // myEnglishButton.addEventListener("click", function() {
38123 // Translate.setLanguage("en");
38124 // });
38125
38126 Translate = new (function() {
38127
38128 var defaultLanguage = "en";
38129
38130 var allPhrases = {};
38131 allPhrases[defaultLanguage] = {};
38132
38133 // Node types
38134
38135 var text = {
38136 selector: "[data-translate]",
38137 getKey: function() {
38138 return this.textContent.trim().replace(/\s+/g, " ");
38139 },
38140 setPhrase: function(p) {
38141 this.textContent = p;
38142 },
38143 }
38144
38145 var html = {
38146 selector: "[data-translate-html]",
38147 getKey: function() {
38148 return this.innerHTML.trim().replace(/\s+/g, " ");
38149 },
38150 setPhrase: function(p) {
38151 this.innerHTML = p;
38152 },
38153 }
38154
38155 var placeholder = {
38156 selector: "[data-translate-placeholder]",
38157 getKey: function() {
38158 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
38159 },
38160 setPhrase: function(p) {
38161 this.setAttribute("placeholder", p);
38162 },
38163 }
38164
38165 var title = {
38166 selector: "[data-translate-title]",
38167 getKey: function() {
38168 return this.getAttribute("title").trim().replace(/\s+/g, " ");
38169 },
38170 setPhrase: function(p) {
38171 this.setAttribute("title", p);
38172 },
38173 }
38174
38175 // Get elements to be translated
38176 var allEls = getEls(text)
38177 .concat(getEls(html))
38178 .concat(getEls(placeholder))
38179 .concat(getEls(title));
38180
38181 // Provides access to phrases from a non-default language.
38182 // See phrases_en.js for example usage.
38183 this.loadForeignPhrases = function(language, phrases) {
38184 allPhrases[language] = phrases;
38185 }
38186
38187 // Displays a different language, eg "en" or "fr"
38188 this.setLanguage = function(language) {
38189 for (var i=0; i<allEls.length; i++) {
38190 var el = allEls[i];
38191 var key = el.key;
38192 if (!(language in allPhrases)) {
38193 console.log(language + " not in allPhrases");
38194 return;
38195 }
38196 if (!(key in allPhrases[language])) {
38197 console.log(language + " does not contain phrase: " + key);
38198 return;
38199 }
38200 var phrase = allPhrases[language][key];
38201 el.setPhrase(phrase);
38202 }
38203 }
38204
38205 // Converts the phrases to a key-pair json file.
38206 // This is a good way to export phrases for use in translation tools.
38207 this.phrasesAsJson = function(language) {
38208 var keys = [];
38209 for (var i=0; i<allEls.length; i++) {
38210 var el = allEls[i];
38211 var key = el.key;
38212 keys.push(key);
38213 }
38214 keys.sort();
38215 var output = {};
38216 for (var i=0; i<keys.length; i++) {
38217 var key = keys[i];
38218 var translated = "";
38219 if (language in allPhrases && key in allPhrases[language]) {
38220 translated = allPhrases[language][key];
38221 }
38222 output[key] = translated;
38223 }
38224 return JSON.stringify(output, null, 2);
38225 }
38226
38227 function getEls(nodeType) {
38228 var nodes = document.querySelectorAll(nodeType.selector);
38229 var els = [];
38230 for (var i=0; i<nodes.length; i++) {
38231 var node = nodes[i];
38232 node.getKey = nodeType.getKey;
38233 node.setPhrase = nodeType.setPhrase;
38234 node.key = node.getKey();
38235 allPhrases[defaultLanguage][node.key] = node.key;
38236 els.push(node);
38237 }
38238 return els;
38239 }
38240
38241 })();
38242 </script>
38243 <script>Translate.loadForeignPhrases("en",
38244 {
38245 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
38246 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
38247 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
38248 "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).": "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).",
38249 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
38250 "Account": "Account",
38251 "Address": "Address",
38252 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
38253 "BIP32 Derivation Path": "BIP32 Derivation Path",
38254 "BIP32 Extended Key": "BIP32 Extended Key",
38255 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
38256 "BIP32 Root Key": "BIP32 Root Key",
38257 "BIP39 Mnemonic": "BIP39 Mnemonic",
38258 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
38259 "BIP39 Seed": "BIP39 Seed",
38260 "Base 10": "Base 10",
38261 "Base 6": "Base 6",
38262 "Be careful - it can be easy to make mistakes if you don't know what you're doing.": "Be careful - it can be easy to make mistakes if you don't know what you're doing.",
38263 "Binary": "Binary",
38264 "Bitcoin Core": "Bitcoin Core",
38265 "Bits Per Event": "Bits Per Event",
38266 "Block Explorers": "Block Explorers",
38267 "Can be used with": "Can be used with",
38268 "Card": "Card",
38269 "Coin": "Coin",
38270 "Dice": "Dice",
38271 "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.": "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.",
38272 "Double-click that file to open it in a browser on any offline computer.": "Double-click that file to open it in a browser on any offline computer.",
38273 "Entropy": "Entropy",
38274 "Entropy Type": "Entropy Type",
38275 "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.": "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.",
38276 "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.": "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.",
38277 "Event Count": "Event Count",
38278 "External / Internal": "External / Internal",
38279 "Filtered Entropy": "Filtered Entropy",
38280 "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>": "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>",
38281 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.",
38282 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.",
38283 "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>": "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>",
38284 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
38285 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
38286 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
38287 "Get the source code from the repository": "Get the source code from the repository",
38288 "Hex": "Hex",
38289 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
38290 "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.": "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.",
38291 "In that case you might choose to use your own source of entropy.": "In that case you might choose to use your own source of entropy.",
38292 "In your browser, select file save-as, and save this page as a file.": "In your browser, select file save-as, and save this page as a file.",
38293 "Libraries": "Libraries",
38294 "Mnemonic Language": "Mnemonic Language",
38295 "Mnemonic Length": "Mnemonic Length",
38296 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
38297 "More info": "More info",
38298 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
38299 "Mycelium Wallet": "Mycelium Wallet",
38300 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
38301 "Offline Usage": "Offline Usage",
38302 "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.": "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.",
38303 "Path": "Path",
38304 "Private Key": "Private Key",
38305 "Private Keys": "Private Keys",
38306 "Public Key": "Public Key",
38307 "Purpose": "Purpose",
38308 "Raw Binary": "Raw Binary",
38309 "Read more": "Read more",
38310 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>",
38311 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>",
38312 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>",
38313 "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>": "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>",
38314 "Show": "Show",
38315 "Show more rows": "Show more rows",
38316 "Strength": "Strength",
38317 "Supply my own source of entropy": "Supply my own source of entropy",
38318 "The built in random generator can generally be trusted more than your own intuition about randomness.": "The built in random generator can generally be trusted more than your own intuition about randomness.",
38319 "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.": "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.",
38320 "This means flipping a fair coin, rolling a fair dice, noise measurements etc.": "This means flipping a fair coin, rolling a fair dice, noise measurements etc.",
38321 "This project is 100% open-source code": "This project is 100% open-source code",
38322 "Toggle": "Toggle",
38323 "Total Bits": "Total Bits",
38324 "Use hardened addresses": "Use hardened addresses",
38325 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
38326 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
38327 "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.": "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.",
38328 "Valid entropy values include:": "Valid entropy values include:",
38329 "Warning": "Warning",
38330 "Word Count": "Word Count",
38331 "You are not a good source of entropy.": "You are not a good source of entropy.",
38332 "You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).": "You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).",
38333 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
38334 "words": "words"
38335 }
38336 );
38337 </script>
38338 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38339 WORDLISTS["english"] = [
38340 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
38341 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
38342 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
38343 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
38344 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
38345 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
38346 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
38347 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
38348 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
38349 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
38350 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
38351 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
38352 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
38353 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
38354 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
38355 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
38356 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
38357 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
38358 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
38359 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
38360 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
38361 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
38362 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
38363 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
38364 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
38365 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
38366 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
38367 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
38368 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
38369 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
38370 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
38371 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
38372 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
38373 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
38374 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
38375 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
38376 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
38377 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
38378 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
38379 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
38380 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
38381 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
38382 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
38383 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
38384 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
38385 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
38386 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
38387 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
38388 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
38389 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
38390 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
38391 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
38392 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
38393 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
38394 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
38395 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
38396 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
38397 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
38398 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
38399 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
38400 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
38401 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
38402 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
38403 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
38404 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
38405 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
38406 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
38407 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
38408 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
38409 "film","filter","final","find","fine","finger","finish","fire","firm","first",
38410 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
38411 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
38412 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
38413 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
38414 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
38415 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
38416 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
38417 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
38418 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
38419 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
38420 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
38421 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
38422 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
38423 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
38424 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
38425 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
38426 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
38427 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
38428 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
38429 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
38430 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
38431 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
38432 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
38433 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
38434 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
38435 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
38436 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
38437 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
38438 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
38439 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
38440 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
38441 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
38442 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
38443 "liar","liberty","library","license","life","lift","light","like","limb","limit",
38444 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
38445 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
38446 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
38447 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
38448 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
38449 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
38450 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
38451 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
38452 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
38453 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
38454 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
38455 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
38456 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
38457 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
38458 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
38459 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
38460 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
38461 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
38462 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
38463 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
38464 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
38465 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
38466 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
38467 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
38468 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
38469 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
38470 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
38471 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
38472 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
38473 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
38474 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
38475 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
38476 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
38477 "prize","problem","process","produce","profit","program","project","promote","proof","property",
38478 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
38479 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
38480 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
38481 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
38482 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
38483 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
38484 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
38485 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
38486 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
38487 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
38488 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
38489 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
38490 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
38491 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
38492 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
38493 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
38494 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
38495 "scrub","sea","search","season","seat","second","secret","section","security","seed",
38496 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
38497 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
38498 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
38499 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
38500 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
38501 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
38502 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
38503 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
38504 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
38505 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
38506 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
38507 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
38508 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
38509 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
38510 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
38511 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
38512 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
38513 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
38514 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
38515 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
38516 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
38517 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
38518 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
38519 "thank","that","theme","then","theory","there","they","thing","this","thought",
38520 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
38521 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
38522 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
38523 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
38524 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
38525 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
38526 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
38527 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
38528 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
38529 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
38530 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
38531 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
38532 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
38533 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
38534 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
38535 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
38536 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
38537 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
38538 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
38539 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
38540 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
38541 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
38542 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
38543 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
38544 "yellow","you","young","youth","zebra","zero","zone","zoo"]
38545 </script>
38546 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38547 WORDLISTS["japanese"] = [
38548 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
38549 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
38550 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
38551 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
38552 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
38553 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
38554 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
38555 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
38556 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
38557 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
38558 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
38559 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
38560 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
38561 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
38562 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
38563 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
38564 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
38565 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
38566 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
38567 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
38568 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
38569 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
38570 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
38571 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
38572 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
38573 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
38574 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
38575 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
38576 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
38577 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
38578 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
38579 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
38580 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
38581 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
38582 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
38583 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
38584 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
38585 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
38586 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
38587 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
38588 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
38589 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
38590 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
38591 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
38592 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
38593 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
38594 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
38595 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
38596 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
38597 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
38598 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
38599 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
38600 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
38601 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
38602 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
38603 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
38604 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
38605 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
38606 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
38607 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
38608 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
38609 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
38610 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
38611 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
38612 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
38613 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
38614 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
38615 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
38616 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
38617 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
38618 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
38619 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
38620 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
38621 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
38622 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
38623 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
38624 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
38625 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
38626 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
38627 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
38628 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
38629 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
38630 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
38631 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
38632 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
38633 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
38634 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
38635 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
38636 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
38637 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
38638 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
38639 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
38640 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
38641 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
38642 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
38643 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
38644 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
38645 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
38646 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
38647 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
38648 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
38649 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
38650 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
38651 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
38652 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
38653 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
38654 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
38655 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
38656 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
38657 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
38658 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
38659 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
38660 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
38661 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
38662 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
38663 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
38664 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
38665 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
38666 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
38667 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
38668 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
38669 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
38670 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
38671 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
38672 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
38673 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
38674 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
38675 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
38676 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
38677 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
38678 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
38679 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
38680 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
38681 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
38682 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
38683 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
38684 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
38685 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
38686 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
38687 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
38688 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
38689 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
38690 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
38691 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
38692 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
38693 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
38694 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
38695 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
38696 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
38697 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
38698 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
38699 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
38700 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
38701 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
38702 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
38703 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
38704 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
38705 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
38706 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
38707 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
38708 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
38709 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
38710 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
38711 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
38712 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
38713 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
38714 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
38715 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
38716 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
38717 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
38718 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
38719 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
38720 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
38721 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
38722 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
38723 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
38724 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
38725 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
38726 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
38727 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
38728 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
38729 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
38730 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
38731 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
38732 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
38733 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
38734 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
38735 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
38736 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
38737 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
38738 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
38739 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
38740 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
38741 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
38742 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
38743 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
38744 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
38745 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
38746 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
38747 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
38748 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
38749 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
38750 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
38751 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
38752 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
38753 </script>
38754 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38755 WORDLISTS["spanish"] = [
38756 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
38757 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
38758 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
38759 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
38760 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
38761 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
38762 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
38763 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
38764 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
38765 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
38766 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
38767 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
38768 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
38769 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
38770 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
38771 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
38772 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
38773 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
38774 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
38775 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
38776 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
38777 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
38778 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
38779 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
38780 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
38781 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
38782 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
38783 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
38784 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
38785 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
38786 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
38787 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
38788 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
38789 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
38790 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
38791 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
38792 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
38793 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
38794 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
38795 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
38796 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
38797 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
38798 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
38799 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
38800 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
38801 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
38802 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
38803 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
38804 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
38805 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
38806 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
38807 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
38808 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
38809 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
38810 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
38811 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
38812 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
38813 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
38814 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
38815 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
38816 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
38817 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
38818 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
38819 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
38820 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
38821 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
38822 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
38823 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
38824 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
38825 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
38826 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
38827 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
38828 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
38829 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
38830 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
38831 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
38832 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
38833 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
38834 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
38835 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
38836 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
38837 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
38838 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
38839 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
38840 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
38841 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
38842 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
38843 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
38844 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
38845 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
38846 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
38847 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
38848 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
38849 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
38850 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
38851 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
38852 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
38853 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
38854 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
38855 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
38856 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
38857 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
38858 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
38859 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
38860 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
38861 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
38862 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
38863 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
38864 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
38865 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
38866 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
38867 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
38868 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
38869 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
38870 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
38871 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
38872 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
38873 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
38874 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
38875 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
38876 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
38877 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
38878 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
38879 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
38880 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
38881 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
38882 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
38883 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
38884 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
38885 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
38886 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
38887 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
38888 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
38889 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
38890 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
38891 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
38892 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
38893 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
38894 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
38895 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
38896 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
38897 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
38898 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
38899 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
38900 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
38901 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
38902 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
38903 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
38904 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
38905 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
38906 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
38907 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
38908 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
38909 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
38910 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
38911 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
38912 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
38913 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
38914 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
38915 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
38916 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
38917 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
38918 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
38919 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
38920 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
38921 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
38922 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
38923 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
38924 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
38925 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
38926 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
38927 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
38928 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
38929 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
38930 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
38931 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
38932 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
38933 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
38934 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
38935 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
38936 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
38937 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
38938 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
38939 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
38940 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
38941 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
38942 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
38943 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
38944 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
38945 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
38946 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
38947 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
38948 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
38949 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
38950 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
38951 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
38952 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
38953 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
38954 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
38955 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
38956 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
38957 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
38958 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
38959 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
38960 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
38961 </script>
38962 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38963 WORDLISTS["chinese_simplified"] = [
38964 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
38965 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
38966 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
38967 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
38968 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
38969 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
38970 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
38971 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
38972 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
38973 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
38974 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
38975 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38976 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
38977 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
38978 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
38979 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
38980 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
38981 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
38982 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
38983 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
38984 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
38985 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
38986 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
38987 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
38988 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
38989 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
38990 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
38991 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
38992 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
38993 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
38994 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
38995 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
38996 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
38997 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
38998 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
38999 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
39000 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
39001 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
39002 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
39003 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
39004 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
39005 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
39006 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
39007 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
39008 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
39009 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
39010 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
39011 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
39012 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
39013 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
39014 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
39015 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
39016 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
39017 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
39018 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
39019 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
39020 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
39021 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
39022 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
39023 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
39024 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
39025 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
39026 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
39027 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
39028 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
39029 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
39030 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
39031 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
39032 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
39033 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
39034 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
39035 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
39036 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
39037 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
39038 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
39039 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
39040 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
39041 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
39042 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
39043 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
39044 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
39045 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
39046 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
39047 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
39048 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
39049 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
39050 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
39051 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
39052 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
39053 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
39054 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
39055 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
39056 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
39057 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
39058 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
39059 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
39060 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
39061 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
39062 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
39063 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
39064 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
39065 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
39066 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
39067 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
39068 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
39069 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
39070 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
39071 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
39072 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
39073 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
39074 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
39075 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
39076 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
39077 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
39078 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
39079 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
39080 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
39081 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
39082 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
39083 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
39084 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
39085 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
39086 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
39087 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
39088 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
39089 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
39090 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
39091 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
39092 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
39093 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
39094 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
39095 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
39096 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
39097 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
39098 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
39099 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
39100 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
39101 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
39102 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
39103 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
39104 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
39105 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
39106 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
39107 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
39108 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
39109 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
39110 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
39111 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
39112 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
39113 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
39114 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
39115 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
39116 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
39117 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
39118 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
39119 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
39120 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
39121 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
39122 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
39123 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
39124 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
39125 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
39126 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
39127 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
39128 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
39129 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
39130 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
39131 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
39132 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
39133 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
39134 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
39135 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
39136 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
39137 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
39138 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
39139 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
39140 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
39141 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
39142 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
39143 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
39144 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
39145 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
39146 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
39147 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
39148 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
39149 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
39150 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
39151 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
39152 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
39153 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
39154 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
39155 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
39156 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
39157 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
39158 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
39159 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
39160 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
39161 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
39162 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
39163 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
39164 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
39165 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
39166 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
39167 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
39168 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
39169 </script>
39170 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39171 WORDLISTS["chinese_traditional"] = [
39172 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
39173 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
39174 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
39175 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
39176 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
39177 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
39178 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
39179 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
39180 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
39181 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
39182 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
39183 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
39184 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
39185 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
39186 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
39187 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
39188 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
39189 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
39190 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
39191 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
39192 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
39193 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
39194 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
39195 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
39196 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
39197 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
39198 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
39199 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
39200 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
39201 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
39202 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
39203 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
39204 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
39205 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
39206 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
39207 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
39208 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
39209 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
39210 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
39211 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
39212 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
39213 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
39214 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
39215 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
39216 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
39217 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
39218 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
39219 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
39220 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
39221 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
39222 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
39223 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
39224 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
39225 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
39226 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
39227 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
39228 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
39229 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
39230 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
39231 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
39232 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
39233 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
39234 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
39235 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
39236 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
39237 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
39238 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
39239 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
39240 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
39241 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
39242 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
39243 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
39244 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
39245 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
39246 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
39247 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
39248 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
39249 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
39250 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
39251 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
39252 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
39253 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
39254 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
39255 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
39256 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
39257 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
39258 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
39259 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
39260 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
39261 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
39262 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
39263 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
39264 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
39265 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
39266 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
39267 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
39268 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
39269 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
39270 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
39271 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
39272 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
39273 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
39274 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
39275 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
39276 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
39277 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
39278 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
39279 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
39280 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
39281 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
39282 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
39283 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
39284 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
39285 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
39286 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
39287 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
39288 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
39289 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
39290 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
39291 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
39292 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
39293 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
39294 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
39295 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
39296 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
39297 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
39298 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
39299 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
39300 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
39301 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
39302 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
39303 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
39304 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
39305 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
39306 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
39307 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
39308 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
39309 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
39310 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
39311 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
39312 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
39313 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
39314 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
39315 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
39316 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
39317 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
39318 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
39319 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
39320 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
39321 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
39322 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
39323 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
39324 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
39325 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
39326 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
39327 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
39328 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
39329 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
39330 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
39331 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
39332 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
39333 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
39334 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
39335 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
39336 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
39337 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
39338 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
39339 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
39340 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
39341 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
39342 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
39343 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
39344 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
39345 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
39346 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
39347 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
39348 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
39349 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
39350 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
39351 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
39352 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
39353 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
39354 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
39355 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
39356 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
39357 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
39358 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
39359 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
39360 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
39361 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
39362 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
39363 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
39364 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
39365 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
39366 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
39367 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
39368 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
39369 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
39370 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
39371 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
39372 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
39373 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
39374 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
39375 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
39376 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
39377 </script>
39378 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39379 WORDLISTS["french"] = [
39380 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
39381 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
39382 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
39383 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
39384 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
39385 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
39386 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
39387 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
39388 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
39389 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
39390 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
39391 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
39392 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
39393 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
39394 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
39395 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
39396 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
39397 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
39398 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
39399 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
39400 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
39401 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
39402 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
39403 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
39404 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
39405 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
39406 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
39407 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
39408 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
39409 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
39410 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
39411 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
39412 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
39413 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
39414 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
39415 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
39416 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
39417 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
39418 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
39419 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
39420 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
39421 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
39422 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
39423 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
39424 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
39425 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
39426 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
39427 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
39428 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
39429 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
39430 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
39431 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
39432 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
39433 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
39434 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
39435 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
39436 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
39437 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
39438 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
39439 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
39440 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
39441 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
39442 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
39443 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
39444 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
39445 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
39446 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
39447 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
39448 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
39449 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
39450 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
39451 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
39452 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
39453 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
39454 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
39455 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
39456 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
39457 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
39458 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
39459 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
39460 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
39461 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
39462 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
39463 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
39464 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
39465 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
39466 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
39467 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
39468 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
39469 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
39470 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
39471 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
39472 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
39473 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
39474 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
39475 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
39476 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
39477 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
39478 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
39479 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
39480 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
39481 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
39482 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
39483 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
39484 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
39485 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
39486 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
39487 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
39488 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
39489 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
39490 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
39491 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
39492 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
39493 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
39494 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
39495 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
39496 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
39497 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
39498 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
39499 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
39500 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
39501 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
39502 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
39503 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
39504 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
39505 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
39506 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
39507 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
39508 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
39509 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
39510 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
39511 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
39512 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
39513 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
39514 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
39515 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
39516 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
39517 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
39518 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
39519 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
39520 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
39521 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
39522 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
39523 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
39524 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
39525 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
39526 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
39527 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
39528 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
39529 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
39530 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
39531 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
39532 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
39533 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
39534 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
39535 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
39536 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
39537 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
39538 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
39539 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
39540 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
39541 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
39542 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
39543 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
39544 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
39545 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
39546 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
39547 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
39548 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
39549 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
39550 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
39551 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
39552 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
39553 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
39554 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
39555 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
39556 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
39557 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
39558 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
39559 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
39560 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
39561 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
39562 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
39563 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
39564 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
39565 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
39566 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
39567 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
39568 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
39569 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
39570 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
39571 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
39572 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
39573 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
39574 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
39575 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
39576 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
39577 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
39578 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
39579 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
39580 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
39581 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
39582 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
39583 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
39584 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
39585 </script>
39586 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39587 WORDLISTS["italian"] = [
39588 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
39589 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
39590 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
39591 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
39592 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
39593 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
39594 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
39595 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
39596 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
39597 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
39598 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
39599 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
39600 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
39601 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
39602 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
39603 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
39604 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
39605 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
39606 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
39607 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
39608 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
39609 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
39610 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
39611 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
39612 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
39613 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
39614 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
39615 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
39616 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
39617 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
39618 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
39619 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
39620 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
39621 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
39622 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
39623 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
39624 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
39625 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
39626 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
39627 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
39628 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
39629 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
39630 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
39631 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
39632 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
39633 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
39634 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
39635 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
39636 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
39637 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
39638 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
39639 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
39640 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
39641 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
39642 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
39643 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
39644 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
39645 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
39646 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
39647 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
39648 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
39649 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
39650 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
39651 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
39652 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
39653 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
39654 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
39655 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
39656 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
39657 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
39658 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
39659 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
39660 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
39661 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
39662 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
39663 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
39664 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
39665 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
39666 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
39667 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
39668 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
39669 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
39670 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
39671 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
39672 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
39673 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
39674 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
39675 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
39676 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
39677 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
39678 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
39679 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
39680 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
39681 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
39682 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
39683 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
39684 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
39685 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
39686 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
39687 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
39688 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
39689 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
39690 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
39691 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
39692 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
39693 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
39694 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
39695 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
39696 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
39697 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
39698 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
39699 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
39700 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
39701 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
39702 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
39703 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
39704 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
39705 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
39706 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
39707 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
39708 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
39709 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
39710 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
39711 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
39712 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
39713 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
39714 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
39715 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
39716 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
39717 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
39718 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
39719 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
39720 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
39721 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
39722 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
39723 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
39724 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
39725 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
39726 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
39727 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
39728 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
39729 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
39730 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
39731 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
39732 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
39733 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
39734 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
39735 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
39736 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
39737 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
39738 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
39739 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
39740 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
39741 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
39742 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
39743 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
39744 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
39745 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
39746 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
39747 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
39748 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
39749 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
39750 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
39751 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
39752 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
39753 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
39754 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
39755 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
39756 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
39757 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
39758 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
39759 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
39760 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
39761 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
39762 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
39763 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
39764 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
39765 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
39766 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
39767 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
39768 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
39769 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
39770 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
39771 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
39772 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
39773 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
39774 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
39775 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
39776 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
39777 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
39778 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
39779 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
39780 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
39781 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
39782 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
39783 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
39784 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
39785 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
39786 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
39787 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
39788 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
39789 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
39790 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
39791 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
39792 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
39793 </script>
39794 <script>/*
39795 * Copyright (c) 2013 Pavol Rusnak
39796 *
39797 * Permission is hereby granted, free of charge, to any person obtaining a copy of
39798 * this software and associated documentation files (the "Software"), to deal in
39799 * the Software without restriction, including without limitation the rights to
39800 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
39801 * of the Software, and to permit persons to whom the Software is furnished to do
39802 * so, subject to the following conditions:
39803 *
39804 * The above copyright notice and this permission notice shall be included in all
39805 * copies or substantial portions of the Software.
39806 *
39807 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39808 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39809 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
39810 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
39811 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
39812 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39813 */
39814
39815 /*
39816 * Javascript port from python by Ian Coleman
39817 *
39818 * Requires code from sjcl
39819 * https://github.com/bitwiseshiftleft/sjcl
39820 */
39821
39822 var Mnemonic = function(language) {
39823
39824 var PBKDF2_ROUNDS = 2048;
39825 var RADIX = 2048;
39826
39827 var self = this;
39828 var wordlist = [];
39829
39830 var hmacSHA512 = function(key) {
39831 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
39832 this.encrypt = function() {
39833 return hasher.encrypt.apply(hasher, arguments);
39834 };
39835 };
39836
39837 function init() {
39838 wordlist = WORDLISTS[language];
39839 if (wordlist.length != RADIX) {
39840 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
39841 throw err;
39842 }
39843 }
39844
39845 self.generate = function(strength) {
39846 strength = strength || 128;
39847 var r = strength % 32;
39848 if (r > 0) {
39849 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
39850 }
39851 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
39852 if (!hasStrongCrypto) {
39853 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
39854 }
39855 var buffer = new Uint8Array(strength / 8);
39856 var data = crypto.getRandomValues(buffer);
39857 return self.toMnemonic(data);
39858 }
39859
39860 self.toMnemonic = function(byteArray) {
39861 if (byteArray.length % 4 > 0) {
39862 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
39863 }
39864
39865 //h = hashlib.sha256(data).hexdigest()
39866 var data = byteArrayToWordArray(byteArray);
39867 var hash = sjcl.hash.sha256.hash(data);
39868 var h = sjcl.codec.hex.fromBits(hash);
39869
39870 // b is a binary string, eg '00111010101100...'
39871 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
39872 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
39873 //
39874 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
39875 // c = bin(int(h, 16))[2:].zfill(256)
39876 // d = c[:len(data) * 8 / 32]
39877 var a = byteArrayToBinaryString(byteArray);
39878 var c = zfill(hexStringToBinaryString(h), 256);
39879 var d = c.substring(0, byteArray.length * 8 / 32);
39880 // b = line1 + line2
39881 var b = a + d;
39882
39883 var result = [];
39884 var blen = b.length / 11;
39885 for (var i=0; i<blen; i++) {
39886 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
39887 result.push(wordlist[idx]);
39888 }
39889 return self.joinWords(result);
39890 }
39891
39892 self.check = function(mnemonic) {
39893 var mnemonic = self.splitWords(mnemonic);
39894 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
39895 return false
39896 }
39897 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
39898 var idx = [];
39899 for (var i=0; i<mnemonic.length; i++) {
39900 var word = mnemonic[i];
39901 var wordIndex = wordlist.indexOf(word);
39902 if (wordIndex == -1) {
39903 return false;
39904 }
39905 var binaryIndex = zfill(wordIndex.toString(2), 11);
39906 idx.push(binaryIndex);
39907 }
39908 var b = idx.join('');
39909 var l = b.length;
39910 //d = b[:l / 33 * 32]
39911 //h = b[-l / 33:]
39912 var d = b.substring(0, l / 33 * 32);
39913 var h = b.substring(l - l / 33, l);
39914 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
39915 var nd = binaryStringToWordArray(d);
39916 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
39917 var ndHash = sjcl.hash.sha256.hash(nd);
39918 var ndHex = sjcl.codec.hex.fromBits(ndHash);
39919 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
39920 var nh = ndBstr.substring(0,l/33);
39921 return h == nh;
39922 }
39923
39924 self.toSeed = function(mnemonic, passphrase) {
39925 passphrase = passphrase || '';
39926 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
39927 var mnemonicNormalized = self.normalizeString(mnemonic);
39928 passphrase = self.normalizeString(passphrase)
39929 passphrase = "mnemonic" + passphrase;
39930 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
39931 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
39932 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
39933 var hashHex = sjcl.codec.hex.fromBits(result);
39934 return hashHex;
39935 }
39936
39937 self.splitWords = function(mnemonic) {
39938 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
39939 }
39940
39941 self.joinWords = function(words) {
39942 // Set space correctly depending on the language
39943 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
39944 var space = " ";
39945 if (language == "japanese") {
39946 space = "\u3000"; // ideographic space
39947 }
39948 return words.join(space);
39949 }
39950
39951 self.normalizeString = function(str) {
39952 if (typeof str.normalize == "function") {
39953 return str.normalize("NFKD");
39954 }
39955 else {
39956 // TODO decide how to handle this in the future.
39957 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
39958 return str;
39959 }
39960 }
39961
39962 function byteArrayToWordArray(data) {
39963 var a = [];
39964 for (var i=0; i<data.length/4; i++) {
39965 v = 0;
39966 v += data[i*4 + 0] << 8 * 3;
39967 v += data[i*4 + 1] << 8 * 2;
39968 v += data[i*4 + 2] << 8 * 1;
39969 v += data[i*4 + 3] << 8 * 0;
39970 a.push(v);
39971 }
39972 return a;
39973 }
39974
39975 function byteArrayToBinaryString(data) {
39976 var bin = "";
39977 for (var i=0; i<data.length; i++) {
39978 bin += zfill(data[i].toString(2), 8);
39979 }
39980 return bin;
39981 }
39982
39983 function hexStringToBinaryString(hexString) {
39984 binaryString = "";
39985 for (var i=0; i<hexString.length; i++) {
39986 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
39987 }
39988 return binaryString;
39989 }
39990
39991 function binaryStringToWordArray(binary) {
39992 var aLen = binary.length / 32;
39993 var a = [];
39994 for (var i=0; i<aLen; i++) {
39995 var valueStr = binary.substring(0,32);
39996 var value = parseInt(valueStr, 2);
39997 a.push(value);
39998 binary = binary.slice(32);
39999 }
40000 return a;
40001 }
40002
40003 // Pad a numeric string on the left with zero digits until the given width
40004 // is reached.
40005 // Note this differs to the python implementation because it does not
40006 // handle numbers starting with a sign.
40007 function zfill(source, length) {
40008 source = source.toString();
40009 while (source.length < length) {
40010 source = '0' + source;
40011 }
40012 return source;
40013 }
40014
40015 init();
40016
40017 }
40018 </script>
40019 <script>/*
40020 JavaScript BigInteger library version 0.9.1
40021 http://silentmatt.com/biginteger/
40022
40023 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
40024 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
40025 Licensed under the MIT license.
40026
40027 Support for arbitrary internal representation base was added by
40028 Vitaly Magerya.
40029 */
40030
40031 /*
40032 File: biginteger.js
40033
40034 Exports:
40035
40036 <BigInteger>
40037 */
40038 (function(exports) {
40039 "use strict";
40040 /*
40041 Class: BigInteger
40042 An arbitrarily-large integer.
40043
40044 <BigInteger> objects should be considered immutable. None of the "built-in"
40045 methods modify *this* or their arguments. All properties should be
40046 considered private.
40047
40048 All the methods of <BigInteger> instances can be called "statically". The
40049 static versions are convenient if you don't already have a <BigInteger>
40050 object.
40051
40052 As an example, these calls are equivalent.
40053
40054 > BigInteger(4).multiply(5); // returns BigInteger(20);
40055 > BigInteger.multiply(4, 5); // returns BigInteger(20);
40056
40057 > var a = 42;
40058 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
40059 */
40060
40061 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
40062
40063 /*
40064 Constructor: BigInteger()
40065 Convert a value to a <BigInteger>.
40066
40067 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
40068 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
40069 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
40070 without a radix argument.
40071
40072 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
40073 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
40074 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
40075 > var n3 = BigInteger(n2); // Return n2, unchanged
40076
40077 The constructor form only takes an array and a sign. *n* must be an
40078 array of numbers in little-endian order, where each digit is between 0
40079 and BigInteger.base. The second parameter sets the sign: -1 for
40080 negative, +1 for positive, or 0 for zero. The array is *not copied and
40081 may be modified*. If the array contains only zeros, the sign parameter
40082 is ignored and is forced to zero.
40083
40084 > new BigInteger([5], -1): create a new BigInteger with value -5
40085
40086 Parameters:
40087
40088 n - Value to convert to a <BigInteger>.
40089
40090 Returns:
40091
40092 A <BigInteger> value.
40093
40094 See Also:
40095
40096 <parse>, <BigInteger>
40097 */
40098 function BigInteger(n, s, token) {
40099 if (token !== CONSTRUCT) {
40100 if (n instanceof BigInteger) {
40101 return n;
40102 }
40103 else if (typeof n === "undefined") {
40104 return ZERO;
40105 }
40106 return BigInteger.parse(n);
40107 }
40108
40109 n = n || []; // Provide the nullary constructor for subclasses.
40110 while (n.length && !n[n.length - 1]) {
40111 --n.length;
40112 }
40113 this._d = n;
40114 this._s = n.length ? (s || 1) : 0;
40115 }
40116
40117 BigInteger._construct = function(n, s) {
40118 return new BigInteger(n, s, CONSTRUCT);
40119 };
40120
40121 // Base-10 speedup hacks in parse, toString, exp10 and log functions
40122 // require base to be a power of 10. 10^7 is the largest such power
40123 // that won't cause a precision loss when digits are multiplied.
40124 var BigInteger_base = 10000000;
40125 var BigInteger_base_log10 = 7;
40126
40127 BigInteger.base = BigInteger_base;
40128 BigInteger.base_log10 = BigInteger_base_log10;
40129
40130 var ZERO = new BigInteger([], 0, CONSTRUCT);
40131 // Constant: ZERO
40132 // <BigInteger> 0.
40133 BigInteger.ZERO = ZERO;
40134
40135 var ONE = new BigInteger([1], 1, CONSTRUCT);
40136 // Constant: ONE
40137 // <BigInteger> 1.
40138 BigInteger.ONE = ONE;
40139
40140 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
40141 // Constant: M_ONE
40142 // <BigInteger> -1.
40143 BigInteger.M_ONE = M_ONE;
40144
40145 // Constant: _0
40146 // Shortcut for <ZERO>.
40147 BigInteger._0 = ZERO;
40148
40149 // Constant: _1
40150 // Shortcut for <ONE>.
40151 BigInteger._1 = ONE;
40152
40153 /*
40154 Constant: small
40155 Array of <BigIntegers> from 0 to 36.
40156
40157 These are used internally for parsing, but useful when you need a "small"
40158 <BigInteger>.
40159
40160 See Also:
40161
40162 <ZERO>, <ONE>, <_0>, <_1>
40163 */
40164 BigInteger.small = [
40165 ZERO,
40166 ONE,
40167 /* Assuming BigInteger_base > 36 */
40168 new BigInteger( [2], 1, CONSTRUCT),
40169 new BigInteger( [3], 1, CONSTRUCT),
40170 new BigInteger( [4], 1, CONSTRUCT),
40171 new BigInteger( [5], 1, CONSTRUCT),
40172 new BigInteger( [6], 1, CONSTRUCT),
40173 new BigInteger( [7], 1, CONSTRUCT),
40174 new BigInteger( [8], 1, CONSTRUCT),
40175 new BigInteger( [9], 1, CONSTRUCT),
40176 new BigInteger([10], 1, CONSTRUCT),
40177 new BigInteger([11], 1, CONSTRUCT),
40178 new BigInteger([12], 1, CONSTRUCT),
40179 new BigInteger([13], 1, CONSTRUCT),
40180 new BigInteger([14], 1, CONSTRUCT),
40181 new BigInteger([15], 1, CONSTRUCT),
40182 new BigInteger([16], 1, CONSTRUCT),
40183 new BigInteger([17], 1, CONSTRUCT),
40184 new BigInteger([18], 1, CONSTRUCT),
40185 new BigInteger([19], 1, CONSTRUCT),
40186 new BigInteger([20], 1, CONSTRUCT),
40187 new BigInteger([21], 1, CONSTRUCT),
40188 new BigInteger([22], 1, CONSTRUCT),
40189 new BigInteger([23], 1, CONSTRUCT),
40190 new BigInteger([24], 1, CONSTRUCT),
40191 new BigInteger([25], 1, CONSTRUCT),
40192 new BigInteger([26], 1, CONSTRUCT),
40193 new BigInteger([27], 1, CONSTRUCT),
40194 new BigInteger([28], 1, CONSTRUCT),
40195 new BigInteger([29], 1, CONSTRUCT),
40196 new BigInteger([30], 1, CONSTRUCT),
40197 new BigInteger([31], 1, CONSTRUCT),
40198 new BigInteger([32], 1, CONSTRUCT),
40199 new BigInteger([33], 1, CONSTRUCT),
40200 new BigInteger([34], 1, CONSTRUCT),
40201 new BigInteger([35], 1, CONSTRUCT),
40202 new BigInteger([36], 1, CONSTRUCT)
40203 ];
40204
40205 // Used for parsing/radix conversion
40206 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
40207
40208 /*
40209 Method: toString
40210 Convert a <BigInteger> to a string.
40211
40212 When *base* is greater than 10, letters are upper case.
40213
40214 Parameters:
40215
40216 base - Optional base to represent the number in (default is base 10).
40217 Must be between 2 and 36 inclusive, or an Error will be thrown.
40218
40219 Returns:
40220
40221 The string representation of the <BigInteger>.
40222 */
40223 BigInteger.prototype.toString = function(base) {
40224 base = +base || 10;
40225 if (base < 2 || base > 36) {
40226 throw new Error("illegal radix " + base + ".");
40227 }
40228 if (this._s === 0) {
40229 return "0";
40230 }
40231 if (base === 10) {
40232 var str = this._s < 0 ? "-" : "";
40233 str += this._d[this._d.length - 1].toString();
40234 for (var i = this._d.length - 2; i >= 0; i--) {
40235 var group = this._d[i].toString();
40236 while (group.length < BigInteger_base_log10) group = '0' + group;
40237 str += group;
40238 }
40239 return str;
40240 }
40241 else {
40242 var numerals = BigInteger.digits;
40243 base = BigInteger.small[base];
40244 var sign = this._s;
40245
40246 var n = this.abs();
40247 var digits = [];
40248 var digit;
40249
40250 while (n._s !== 0) {
40251 var divmod = n.divRem(base);
40252 n = divmod[0];
40253 digit = divmod[1];
40254 // TODO: This could be changed to unshift instead of reversing at the end.
40255 // Benchmark both to compare speeds.
40256 digits.push(numerals[digit.valueOf()]);
40257 }
40258 return (sign < 0 ? "-" : "") + digits.reverse().join("");
40259 }
40260 };
40261
40262 // Verify strings for parsing
40263 BigInteger.radixRegex = [
40264 /^$/,
40265 /^$/,
40266 /^[01]*$/,
40267 /^[012]*$/,
40268 /^[0-3]*$/,
40269 /^[0-4]*$/,
40270 /^[0-5]*$/,
40271 /^[0-6]*$/,
40272 /^[0-7]*$/,
40273 /^[0-8]*$/,
40274 /^[0-9]*$/,
40275 /^[0-9aA]*$/,
40276 /^[0-9abAB]*$/,
40277 /^[0-9abcABC]*$/,
40278 /^[0-9a-dA-D]*$/,
40279 /^[0-9a-eA-E]*$/,
40280 /^[0-9a-fA-F]*$/,
40281 /^[0-9a-gA-G]*$/,
40282 /^[0-9a-hA-H]*$/,
40283 /^[0-9a-iA-I]*$/,
40284 /^[0-9a-jA-J]*$/,
40285 /^[0-9a-kA-K]*$/,
40286 /^[0-9a-lA-L]*$/,
40287 /^[0-9a-mA-M]*$/,
40288 /^[0-9a-nA-N]*$/,
40289 /^[0-9a-oA-O]*$/,
40290 /^[0-9a-pA-P]*$/,
40291 /^[0-9a-qA-Q]*$/,
40292 /^[0-9a-rA-R]*$/,
40293 /^[0-9a-sA-S]*$/,
40294 /^[0-9a-tA-T]*$/,
40295 /^[0-9a-uA-U]*$/,
40296 /^[0-9a-vA-V]*$/,
40297 /^[0-9a-wA-W]*$/,
40298 /^[0-9a-xA-X]*$/,
40299 /^[0-9a-yA-Y]*$/,
40300 /^[0-9a-zA-Z]*$/
40301 ];
40302
40303 /*
40304 Function: parse
40305 Parse a string into a <BigInteger>.
40306
40307 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
40308 *base* is not provided, it will be guessed based on the leading characters
40309 of *s* as follows:
40310
40311 - "0x" or "0X": *base* = 16
40312 - "0c" or "0C": *base* = 8
40313 - "0b" or "0B": *base* = 2
40314 - else: *base* = 10
40315
40316 If no base is provided, or *base* is 10, the number can be in exponential
40317 form. For example, these are all valid:
40318
40319 > BigInteger.parse("1e9"); // Same as "1000000000"
40320 > BigInteger.parse("1.234*10^3"); // Same as 1234
40321 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
40322
40323 If any characters fall outside the range defined by the radix, an exception
40324 will be thrown.
40325
40326 Parameters:
40327
40328 s - The string to parse.
40329 base - Optional radix (default is to guess based on *s*).
40330
40331 Returns:
40332
40333 a <BigInteger> instance.
40334 */
40335 BigInteger.parse = function(s, base) {
40336 // Expands a number in exponential form to decimal form.
40337 // expandExponential("-13.441*10^5") === "1344100";
40338 // expandExponential("1.12300e-1") === "0.112300";
40339 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
40340 function expandExponential(str) {
40341 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
40342
40343 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
40344 c = +c;
40345 var l = c < 0;
40346 var i = n.length + c;
40347 x = (l ? n : f).length;
40348 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
40349 var z = (new Array(c + 1)).join("0");
40350 var r = n + f;
40351 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
40352 });
40353 }
40354
40355 s = s.toString();
40356 if (typeof base === "undefined" || +base === 10) {
40357 s = expandExponential(s);
40358 }
40359
40360 var prefixRE;
40361 if (typeof base === "undefined") {
40362 prefixRE = '0[xcb]';
40363 }
40364 else if (base == 16) {
40365 prefixRE = '0x';
40366 }
40367 else if (base == 8) {
40368 prefixRE = '0c';
40369 }
40370 else if (base == 2) {
40371 prefixRE = '0b';
40372 }
40373 else {
40374 prefixRE = '';
40375 }
40376 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
40377 if (parts) {
40378 var sign = parts[1] || "+";
40379 var baseSection = parts[2] || "";
40380 var digits = parts[3] || "";
40381
40382 if (typeof base === "undefined") {
40383 // Guess base
40384 if (baseSection === "0x" || baseSection === "0X") { // Hex
40385 base = 16;
40386 }
40387 else if (baseSection === "0c" || baseSection === "0C") { // Octal
40388 base = 8;
40389 }
40390 else if (baseSection === "0b" || baseSection === "0B") { // Binary
40391 base = 2;
40392 }
40393 else {
40394 base = 10;
40395 }
40396 }
40397 else if (base < 2 || base > 36) {
40398 throw new Error("Illegal radix " + base + ".");
40399 }
40400
40401 base = +base;
40402
40403 // Check for digits outside the range
40404 if (!(BigInteger.radixRegex[base].test(digits))) {
40405 throw new Error("Bad digit for radix " + base);
40406 }
40407
40408 // Strip leading zeros, and convert to array
40409 digits = digits.replace(/^0+/, "").split("");
40410 if (digits.length === 0) {
40411 return ZERO;
40412 }
40413
40414 // Get the sign (we know it's not zero)
40415 sign = (sign === "-") ? -1 : 1;
40416
40417 // Optimize 10
40418 if (base == 10) {
40419 var d = [];
40420 while (digits.length >= BigInteger_base_log10) {
40421 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
40422 }
40423 d.push(parseInt(digits.join(''), 10));
40424 return new BigInteger(d, sign, CONSTRUCT);
40425 }
40426
40427 // Do the conversion
40428 var d = ZERO;
40429 base = BigInteger.small[base];
40430 var small = BigInteger.small;
40431 for (var i = 0; i < digits.length; i++) {
40432 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
40433 }
40434 return new BigInteger(d._d, sign, CONSTRUCT);
40435 }
40436 else {
40437 throw new Error("Invalid BigInteger format: " + s);
40438 }
40439 };
40440
40441 /*
40442 Function: add
40443 Add two <BigIntegers>.
40444
40445 Parameters:
40446
40447 n - The number to add to *this*. Will be converted to a <BigInteger>.
40448
40449 Returns:
40450
40451 The numbers added together.
40452
40453 See Also:
40454
40455 <subtract>, <multiply>, <quotient>, <next>
40456 */
40457 BigInteger.prototype.add = function(n) {
40458 if (this._s === 0) {
40459 return BigInteger(n);
40460 }
40461
40462 n = BigInteger(n);
40463 if (n._s === 0) {
40464 return this;
40465 }
40466 if (this._s !== n._s) {
40467 n = n.negate();
40468 return this.subtract(n);
40469 }
40470
40471 var a = this._d;
40472 var b = n._d;
40473 var al = a.length;
40474 var bl = b.length;
40475 var sum = new Array(Math.max(al, bl) + 1);
40476 var size = Math.min(al, bl);
40477 var carry = 0;
40478 var digit;
40479
40480 for (var i = 0; i < size; i++) {
40481 digit = a[i] + b[i] + carry;
40482 sum[i] = digit % BigInteger_base;
40483 carry = (digit / BigInteger_base) | 0;
40484 }
40485 if (bl > al) {
40486 a = b;
40487 al = bl;
40488 }
40489 for (i = size; carry && i < al; i++) {
40490 digit = a[i] + carry;
40491 sum[i] = digit % BigInteger_base;
40492 carry = (digit / BigInteger_base) | 0;
40493 }
40494 if (carry) {
40495 sum[i] = carry;
40496 }
40497
40498 for ( ; i < al; i++) {
40499 sum[i] = a[i];
40500 }
40501
40502 return new BigInteger(sum, this._s, CONSTRUCT);
40503 };
40504
40505 /*
40506 Function: negate
40507 Get the additive inverse of a <BigInteger>.
40508
40509 Returns:
40510
40511 A <BigInteger> with the same magnatude, but with the opposite sign.
40512
40513 See Also:
40514
40515 <abs>
40516 */
40517 BigInteger.prototype.negate = function() {
40518 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
40519 };
40520
40521 /*
40522 Function: abs
40523 Get the absolute value of a <BigInteger>.
40524
40525 Returns:
40526
40527 A <BigInteger> with the same magnatude, but always positive (or zero).
40528
40529 See Also:
40530
40531 <negate>
40532 */
40533 BigInteger.prototype.abs = function() {
40534 return (this._s < 0) ? this.negate() : this;
40535 };
40536
40537 /*
40538 Function: subtract
40539 Subtract two <BigIntegers>.
40540
40541 Parameters:
40542
40543 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
40544
40545 Returns:
40546
40547 The *n* subtracted from *this*.
40548
40549 See Also:
40550
40551 <add>, <multiply>, <quotient>, <prev>
40552 */
40553 BigInteger.prototype.subtract = function(n) {
40554 if (this._s === 0) {
40555 return BigInteger(n).negate();
40556 }
40557
40558 n = BigInteger(n);
40559 if (n._s === 0) {
40560 return this;
40561 }
40562 if (this._s !== n._s) {
40563 n = n.negate();
40564 return this.add(n);
40565 }
40566
40567 var m = this;
40568 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
40569 if (this._s < 0) {
40570 m = new BigInteger(n._d, 1, CONSTRUCT);
40571 n = new BigInteger(this._d, 1, CONSTRUCT);
40572 }
40573
40574 // Both are positive => a - b
40575 var sign = m.compareAbs(n);
40576 if (sign === 0) {
40577 return ZERO;
40578 }
40579 else if (sign < 0) {
40580 // swap m and n
40581 var t = n;
40582 n = m;
40583 m = t;
40584 }
40585
40586 // a > b
40587 var a = m._d;
40588 var b = n._d;
40589 var al = a.length;
40590 var bl = b.length;
40591 var diff = new Array(al); // al >= bl since a > b
40592 var borrow = 0;
40593 var i;
40594 var digit;
40595
40596 for (i = 0; i < bl; i++) {
40597 digit = a[i] - borrow - b[i];
40598 if (digit < 0) {
40599 digit += BigInteger_base;
40600 borrow = 1;
40601 }
40602 else {
40603 borrow = 0;
40604 }
40605 diff[i] = digit;
40606 }
40607 for (i = bl; i < al; i++) {
40608 digit = a[i] - borrow;
40609 if (digit < 0) {
40610 digit += BigInteger_base;
40611 }
40612 else {
40613 diff[i++] = digit;
40614 break;
40615 }
40616 diff[i] = digit;
40617 }
40618 for ( ; i < al; i++) {
40619 diff[i] = a[i];
40620 }
40621
40622 return new BigInteger(diff, sign, CONSTRUCT);
40623 };
40624
40625 (function() {
40626 function addOne(n, sign) {
40627 var a = n._d;
40628 var sum = a.slice();
40629 var carry = true;
40630 var i = 0;
40631
40632 while (true) {
40633 var digit = (a[i] || 0) + 1;
40634 sum[i] = digit % BigInteger_base;
40635 if (digit <= BigInteger_base - 1) {
40636 break;
40637 }
40638 ++i;
40639 }
40640
40641 return new BigInteger(sum, sign, CONSTRUCT);
40642 }
40643
40644 function subtractOne(n, sign) {
40645 var a = n._d;
40646 var sum = a.slice();
40647 var borrow = true;
40648 var i = 0;
40649
40650 while (true) {
40651 var digit = (a[i] || 0) - 1;
40652 if (digit < 0) {
40653 sum[i] = digit + BigInteger_base;
40654 }
40655 else {
40656 sum[i] = digit;
40657 break;
40658 }
40659 ++i;
40660 }
40661
40662 return new BigInteger(sum, sign, CONSTRUCT);
40663 }
40664
40665 /*
40666 Function: next
40667 Get the next <BigInteger> (add one).
40668
40669 Returns:
40670
40671 *this* + 1.
40672
40673 See Also:
40674
40675 <add>, <prev>
40676 */
40677 BigInteger.prototype.next = function() {
40678 switch (this._s) {
40679 case 0:
40680 return ONE;
40681 case -1:
40682 return subtractOne(this, -1);
40683 // case 1:
40684 default:
40685 return addOne(this, 1);
40686 }
40687 };
40688
40689 /*
40690 Function: prev
40691 Get the previous <BigInteger> (subtract one).
40692
40693 Returns:
40694
40695 *this* - 1.
40696
40697 See Also:
40698
40699 <next>, <subtract>
40700 */
40701 BigInteger.prototype.prev = function() {
40702 switch (this._s) {
40703 case 0:
40704 return M_ONE;
40705 case -1:
40706 return addOne(this, -1);
40707 // case 1:
40708 default:
40709 return subtractOne(this, 1);
40710 }
40711 };
40712 })();
40713
40714 /*
40715 Function: compareAbs
40716 Compare the absolute value of two <BigIntegers>.
40717
40718 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
40719
40720 Parameters:
40721
40722 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40723
40724 Returns:
40725
40726 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
40727
40728 See Also:
40729
40730 <compare>, <abs>
40731 */
40732 BigInteger.prototype.compareAbs = function(n) {
40733 if (this === n) {
40734 return 0;
40735 }
40736
40737 if (!(n instanceof BigInteger)) {
40738 if (!isFinite(n)) {
40739 return(isNaN(n) ? n : -1);
40740 }
40741 n = BigInteger(n);
40742 }
40743
40744 if (this._s === 0) {
40745 return (n._s !== 0) ? -1 : 0;
40746 }
40747 if (n._s === 0) {
40748 return 1;
40749 }
40750
40751 var l = this._d.length;
40752 var nl = n._d.length;
40753 if (l < nl) {
40754 return -1;
40755 }
40756 else if (l > nl) {
40757 return 1;
40758 }
40759
40760 var a = this._d;
40761 var b = n._d;
40762 for (var i = l-1; i >= 0; i--) {
40763 if (a[i] !== b[i]) {
40764 return a[i] < b[i] ? -1 : 1;
40765 }
40766 }
40767
40768 return 0;
40769 };
40770
40771 /*
40772 Function: compare
40773 Compare two <BigIntegers>.
40774
40775 Parameters:
40776
40777 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40778
40779 Returns:
40780
40781 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
40782
40783 See Also:
40784
40785 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
40786 */
40787 BigInteger.prototype.compare = function(n) {
40788 if (this === n) {
40789 return 0;
40790 }
40791
40792 n = BigInteger(n);
40793
40794 if (this._s === 0) {
40795 return -n._s;
40796 }
40797
40798 if (this._s === n._s) { // both positive or both negative
40799 var cmp = this.compareAbs(n);
40800 return cmp * this._s;
40801 }
40802 else {
40803 return this._s;
40804 }
40805 };
40806
40807 /*
40808 Function: isUnit
40809 Return true iff *this* is either 1 or -1.
40810
40811 Returns:
40812
40813 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
40814
40815 See Also:
40816
40817 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
40818 <BigInteger.ONE>, <BigInteger.M_ONE>
40819 */
40820 BigInteger.prototype.isUnit = function() {
40821 return this === ONE ||
40822 this === M_ONE ||
40823 (this._d.length === 1 && this._d[0] === 1);
40824 };
40825
40826 /*
40827 Function: multiply
40828 Multiply two <BigIntegers>.
40829
40830 Parameters:
40831
40832 n - The number to multiply *this* by. Will be converted to a
40833 <BigInteger>.
40834
40835 Returns:
40836
40837 The numbers multiplied together.
40838
40839 See Also:
40840
40841 <add>, <subtract>, <quotient>, <square>
40842 */
40843 BigInteger.prototype.multiply = function(n) {
40844 // TODO: Consider adding Karatsuba multiplication for large numbers
40845 if (this._s === 0) {
40846 return ZERO;
40847 }
40848
40849 n = BigInteger(n);
40850 if (n._s === 0) {
40851 return ZERO;
40852 }
40853 if (this.isUnit()) {
40854 if (this._s < 0) {
40855 return n.negate();
40856 }
40857 return n;
40858 }
40859 if (n.isUnit()) {
40860 if (n._s < 0) {
40861 return this.negate();
40862 }
40863 return this;
40864 }
40865 if (this === n) {
40866 return this.square();
40867 }
40868
40869 var r = (this._d.length >= n._d.length);
40870 var a = (r ? this : n)._d; // a will be longer than b
40871 var b = (r ? n : this)._d;
40872 var al = a.length;
40873 var bl = b.length;
40874
40875 var pl = al + bl;
40876 var partial = new Array(pl);
40877 var i;
40878 for (i = 0; i < pl; i++) {
40879 partial[i] = 0;
40880 }
40881
40882 for (i = 0; i < bl; i++) {
40883 var carry = 0;
40884 var bi = b[i];
40885 var jlimit = al + i;
40886 var digit;
40887 for (var j = i; j < jlimit; j++) {
40888 digit = partial[j] + bi * a[j - i] + carry;
40889 carry = (digit / BigInteger_base) | 0;
40890 partial[j] = (digit % BigInteger_base) | 0;
40891 }
40892 if (carry) {
40893 digit = partial[j] + carry;
40894 carry = (digit / BigInteger_base) | 0;
40895 partial[j] = digit % BigInteger_base;
40896 }
40897 }
40898 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
40899 };
40900
40901 // Multiply a BigInteger by a single-digit native number
40902 // Assumes that this and n are >= 0
40903 // This is not really intended to be used outside the library itself
40904 BigInteger.prototype.multiplySingleDigit = function(n) {
40905 if (n === 0 || this._s === 0) {
40906 return ZERO;
40907 }
40908 if (n === 1) {
40909 return this;
40910 }
40911
40912 var digit;
40913 if (this._d.length === 1) {
40914 digit = this._d[0] * n;
40915 if (digit >= BigInteger_base) {
40916 return new BigInteger([(digit % BigInteger_base)|0,
40917 (digit / BigInteger_base)|0], 1, CONSTRUCT);
40918 }
40919 return new BigInteger([digit], 1, CONSTRUCT);
40920 }
40921
40922 if (n === 2) {
40923 return this.add(this);
40924 }
40925 if (this.isUnit()) {
40926 return new BigInteger([n], 1, CONSTRUCT);
40927 }
40928
40929 var a = this._d;
40930 var al = a.length;
40931
40932 var pl = al + 1;
40933 var partial = new Array(pl);
40934 for (var i = 0; i < pl; i++) {
40935 partial[i] = 0;
40936 }
40937
40938 var carry = 0;
40939 for (var j = 0; j < al; j++) {
40940 digit = n * a[j] + carry;
40941 carry = (digit / BigInteger_base) | 0;
40942 partial[j] = (digit % BigInteger_base) | 0;
40943 }
40944 if (carry) {
40945 partial[j] = carry;
40946 }
40947
40948 return new BigInteger(partial, 1, CONSTRUCT);
40949 };
40950
40951 /*
40952 Function: square
40953 Multiply a <BigInteger> by itself.
40954
40955 This is slightly faster than regular multiplication, since it removes the
40956 duplicated multiplcations.
40957
40958 Returns:
40959
40960 > this.multiply(this)
40961
40962 See Also:
40963 <multiply>
40964 */
40965 BigInteger.prototype.square = function() {
40966 // Normally, squaring a 10-digit number would take 100 multiplications.
40967 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
40968 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
40969 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
40970
40971 if (this._s === 0) {
40972 return ZERO;
40973 }
40974 if (this.isUnit()) {
40975 return ONE;
40976 }
40977
40978 var digits = this._d;
40979 var length = digits.length;
40980 var imult1 = new Array(length + length + 1);
40981 var product, carry, k;
40982 var i;
40983
40984 // Calculate diagonal
40985 for (i = 0; i < length; i++) {
40986 k = i * 2;
40987 product = digits[i] * digits[i];
40988 carry = (product / BigInteger_base) | 0;
40989 imult1[k] = product % BigInteger_base;
40990 imult1[k + 1] = carry;
40991 }
40992
40993 // Calculate repeating part
40994 for (i = 0; i < length; i++) {
40995 carry = 0;
40996 k = i * 2 + 1;
40997 for (var j = i + 1; j < length; j++, k++) {
40998 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
40999 carry = (product / BigInteger_base) | 0;
41000 imult1[k] = product % BigInteger_base;
41001 }
41002 k = length + i;
41003 var digit = carry + imult1[k];
41004 carry = (digit / BigInteger_base) | 0;
41005 imult1[k] = digit % BigInteger_base;
41006 imult1[k + 1] += carry;
41007 }
41008
41009 return new BigInteger(imult1, 1, CONSTRUCT);
41010 };
41011
41012 /*
41013 Function: quotient
41014 Divide two <BigIntegers> and truncate towards zero.
41015
41016 <quotient> throws an exception if *n* is zero.
41017
41018 Parameters:
41019
41020 n - The number to divide *this* by. Will be converted to a <BigInteger>.
41021
41022 Returns:
41023
41024 The *this* / *n*, truncated to an integer.
41025
41026 See Also:
41027
41028 <add>, <subtract>, <multiply>, <divRem>, <remainder>
41029 */
41030 BigInteger.prototype.quotient = function(n) {
41031 return this.divRem(n)[0];
41032 };
41033
41034 /*
41035 Function: divide
41036 Deprecated synonym for <quotient>.
41037 */
41038 BigInteger.prototype.divide = BigInteger.prototype.quotient;
41039
41040 /*
41041 Function: remainder
41042 Calculate the remainder of two <BigIntegers>.
41043
41044 <remainder> throws an exception if *n* is zero.
41045
41046 Parameters:
41047
41048 n - The remainder after *this* is divided *this* by *n*. Will be
41049 converted to a <BigInteger>.
41050
41051 Returns:
41052
41053 *this* % *n*.
41054
41055 See Also:
41056
41057 <divRem>, <quotient>
41058 */
41059 BigInteger.prototype.remainder = function(n) {
41060 return this.divRem(n)[1];
41061 };
41062
41063 /*
41064 Function: divRem
41065 Calculate the integer quotient and remainder of two <BigIntegers>.
41066
41067 <divRem> throws an exception if *n* is zero.
41068
41069 Parameters:
41070
41071 n - The number to divide *this* by. Will be converted to a <BigInteger>.
41072
41073 Returns:
41074
41075 A two-element array containing the quotient and the remainder.
41076
41077 > a.divRem(b)
41078
41079 is exactly equivalent to
41080
41081 > [a.quotient(b), a.remainder(b)]
41082
41083 except it is faster, because they are calculated at the same time.
41084
41085 See Also:
41086
41087 <quotient>, <remainder>
41088 */
41089 BigInteger.prototype.divRem = function(n) {
41090 n = BigInteger(n);
41091 if (n._s === 0) {
41092 throw new Error("Divide by zero");
41093 }
41094 if (this._s === 0) {
41095 return [ZERO, ZERO];
41096 }
41097 if (n._d.length === 1) {
41098 return this.divRemSmall(n._s * n._d[0]);
41099 }
41100
41101 // Test for easy cases -- |n1| <= |n2|
41102 switch (this.compareAbs(n)) {
41103 case 0: // n1 == n2
41104 return [this._s === n._s ? ONE : M_ONE, ZERO];
41105 case -1: // |n1| < |n2|
41106 return [ZERO, this];
41107 }
41108
41109 var sign = this._s * n._s;
41110 var a = n.abs();
41111 var b_digits = this._d;
41112 var b_index = b_digits.length;
41113 var digits = n._d.length;
41114 var quot = [];
41115 var guess;
41116
41117 var part = new BigInteger([], 0, CONSTRUCT);
41118
41119 while (b_index) {
41120 part._d.unshift(b_digits[--b_index]);
41121 part = new BigInteger(part._d, 1, CONSTRUCT);
41122
41123 if (part.compareAbs(n) < 0) {
41124 quot.push(0);
41125 continue;
41126 }
41127 if (part._s === 0) {
41128 guess = 0;
41129 }
41130 else {
41131 var xlen = part._d.length, ylen = a._d.length;
41132 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
41133 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
41134 if (part._d.length > a._d.length) {
41135 // The length of part._d can either match a._d length,
41136 // or exceed it by one.
41137 highx = (highx+1)*BigInteger_base;
41138 }
41139 guess = Math.ceil(highx/highy);
41140 }
41141 do {
41142 var check = a.multiplySingleDigit(guess);
41143 if (check.compareAbs(part) <= 0) {
41144 break;
41145 }
41146 guess--;
41147 } while (guess);
41148
41149 quot.push(guess);
41150 if (!guess) {
41151 continue;
41152 }
41153 var diff = part.subtract(check);
41154 part._d = diff._d.slice();
41155 }
41156
41157 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
41158 new BigInteger(part._d, this._s, CONSTRUCT)];
41159 };
41160
41161 // Throws an exception if n is outside of (-BigInteger.base, -1] or
41162 // [1, BigInteger.base). It's not necessary to call this, since the
41163 // other division functions will call it if they are able to.
41164 BigInteger.prototype.divRemSmall = function(n) {
41165 var r;
41166 n = +n;
41167 if (n === 0) {
41168 throw new Error("Divide by zero");
41169 }
41170
41171 var n_s = n < 0 ? -1 : 1;
41172 var sign = this._s * n_s;
41173 n = Math.abs(n);
41174
41175 if (n < 1 || n >= BigInteger_base) {
41176 throw new Error("Argument out of range");
41177 }
41178
41179 if (this._s === 0) {
41180 return [ZERO, ZERO];
41181 }
41182
41183 if (n === 1 || n === -1) {
41184 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
41185 }
41186
41187 // 2 <= n < BigInteger_base
41188
41189 // divide a single digit by a single digit
41190 if (this._d.length === 1) {
41191 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
41192 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
41193 if (sign < 0) {
41194 q = q.negate();
41195 }
41196 if (this._s < 0) {
41197 r = r.negate();
41198 }
41199 return [q, r];
41200 }
41201
41202 var digits = this._d.slice();
41203 var quot = new Array(digits.length);
41204 var part = 0;
41205 var diff = 0;
41206 var i = 0;
41207 var guess;
41208
41209 while (digits.length) {
41210 part = part * BigInteger_base + digits[digits.length - 1];
41211 if (part < n) {
41212 quot[i++] = 0;
41213 digits.pop();
41214 diff = BigInteger_base * diff + part;
41215 continue;
41216 }
41217 if (part === 0) {
41218 guess = 0;
41219 }
41220 else {
41221 guess = (part / n) | 0;
41222 }
41223
41224 var check = n * guess;
41225 diff = part - check;
41226 quot[i++] = guess;
41227 if (!guess) {
41228 digits.pop();
41229 continue;
41230 }
41231
41232 digits.pop();
41233 part = diff;
41234 }
41235
41236 r = new BigInteger([diff], 1, CONSTRUCT);
41237 if (this._s < 0) {
41238 r = r.negate();
41239 }
41240 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
41241 };
41242
41243 /*
41244 Function: isEven
41245 Return true iff *this* is divisible by two.
41246
41247 Note that <BigInteger.ZERO> is even.
41248
41249 Returns:
41250
41251 true if *this* is even, false otherwise.
41252
41253 See Also:
41254
41255 <isOdd>
41256 */
41257 BigInteger.prototype.isEven = function() {
41258 var digits = this._d;
41259 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
41260 };
41261
41262 /*
41263 Function: isOdd
41264 Return true iff *this* is not divisible by two.
41265
41266 Returns:
41267
41268 true if *this* is odd, false otherwise.
41269
41270 See Also:
41271
41272 <isEven>
41273 */
41274 BigInteger.prototype.isOdd = function() {
41275 return !this.isEven();
41276 };
41277
41278 /*
41279 Function: sign
41280 Get the sign of a <BigInteger>.
41281
41282 Returns:
41283
41284 * -1 if *this* < 0
41285 * 0 if *this* == 0
41286 * +1 if *this* > 0
41287
41288 See Also:
41289
41290 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
41291 */
41292 BigInteger.prototype.sign = function() {
41293 return this._s;
41294 };
41295
41296 /*
41297 Function: isPositive
41298 Return true iff *this* > 0.
41299
41300 Returns:
41301
41302 true if *this*.compare(<BigInteger.ZERO>) == 1.
41303
41304 See Also:
41305
41306 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
41307 */
41308 BigInteger.prototype.isPositive = function() {
41309 return this._s > 0;
41310 };
41311
41312 /*
41313 Function: isNegative
41314 Return true iff *this* < 0.
41315
41316 Returns:
41317
41318 true if *this*.compare(<BigInteger.ZERO>) == -1.
41319
41320 See Also:
41321
41322 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
41323 */
41324 BigInteger.prototype.isNegative = function() {
41325 return this._s < 0;
41326 };
41327
41328 /*
41329 Function: isZero
41330 Return true iff *this* == 0.
41331
41332 Returns:
41333
41334 true if *this*.compare(<BigInteger.ZERO>) == 0.
41335
41336 See Also:
41337
41338 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
41339 */
41340 BigInteger.prototype.isZero = function() {
41341 return this._s === 0;
41342 };
41343
41344 /*
41345 Function: exp10
41346 Multiply a <BigInteger> by a power of 10.
41347
41348 This is equivalent to, but faster than
41349
41350 > if (n >= 0) {
41351 > return this.multiply(BigInteger("1e" + n));
41352 > }
41353 > else { // n <= 0
41354 > return this.quotient(BigInteger("1e" + -n));
41355 > }
41356
41357 Parameters:
41358
41359 n - The power of 10 to multiply *this* by. *n* is converted to a
41360 javascipt number and must be no greater than <BigInteger.MAX_EXP>
41361 (0x7FFFFFFF), or an exception will be thrown.
41362
41363 Returns:
41364
41365 *this* * (10 ** *n*), truncated to an integer if necessary.
41366
41367 See Also:
41368
41369 <pow>, <multiply>
41370 */
41371 BigInteger.prototype.exp10 = function(n) {
41372 n = +n;
41373 if (n === 0) {
41374 return this;
41375 }
41376 if (Math.abs(n) > Number(MAX_EXP)) {
41377 throw new Error("exponent too large in BigInteger.exp10");
41378 }
41379 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
41380 if (this._s === 0) {
41381 return ZERO;
41382 }
41383 if (n > 0) {
41384 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41385
41386 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41387 k._d.unshift(0);
41388 }
41389 if (n == 0)
41390 return k;
41391 k._s = 1;
41392 k = k.multiplySingleDigit(Math.pow(10, n));
41393 return (this._s < 0 ? k.negate() : k);
41394 } else if (-n >= this._d.length*BigInteger_base_log10) {
41395 return ZERO;
41396 } else {
41397 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41398
41399 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41400 k._d.shift();
41401 }
41402 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
41403 }
41404 };
41405
41406 /*
41407 Function: pow
41408 Raise a <BigInteger> to a power.
41409
41410 In this implementation, 0**0 is 1.
41411
41412 Parameters:
41413
41414 n - The exponent to raise *this* by. *n* must be no greater than
41415 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
41416
41417 Returns:
41418
41419 *this* raised to the *nth* power.
41420
41421 See Also:
41422
41423 <modPow>
41424 */
41425 BigInteger.prototype.pow = function(n) {
41426 if (this.isUnit()) {
41427 if (this._s > 0) {
41428 return this;
41429 }
41430 else {
41431 return BigInteger(n).isOdd() ? this : this.negate();
41432 }
41433 }
41434
41435 n = BigInteger(n);
41436 if (n._s === 0) {
41437 return ONE;
41438 }
41439 else if (n._s < 0) {
41440 if (this._s === 0) {
41441 throw new Error("Divide by zero");
41442 }
41443 else {
41444 return ZERO;
41445 }
41446 }
41447 if (this._s === 0) {
41448 return ZERO;
41449 }
41450 if (n.isUnit()) {
41451 return this;
41452 }
41453
41454 if (n.compareAbs(MAX_EXP) > 0) {
41455 throw new Error("exponent too large in BigInteger.pow");
41456 }
41457 var x = this;
41458 var aux = ONE;
41459 var two = BigInteger.small[2];
41460
41461 while (n.isPositive()) {
41462 if (n.isOdd()) {
41463 aux = aux.multiply(x);
41464 if (n.isUnit()) {
41465 return aux;
41466 }
41467 }
41468 x = x.square();
41469 n = n.quotient(two);
41470 }
41471
41472 return aux;
41473 };
41474
41475 /*
41476 Function: modPow
41477 Raise a <BigInteger> to a power (mod m).
41478
41479 Because it is reduced by a modulus, <modPow> is not limited by
41480 <BigInteger.MAX_EXP> like <pow>.
41481
41482 Parameters:
41483
41484 exponent - The exponent to raise *this* by. Must be positive.
41485 modulus - The modulus.
41486
41487 Returns:
41488
41489 *this* ^ *exponent* (mod *modulus*).
41490
41491 See Also:
41492
41493 <pow>, <mod>
41494 */
41495 BigInteger.prototype.modPow = function(exponent, modulus) {
41496 var result = ONE;
41497 var base = this;
41498
41499 while (exponent.isPositive()) {
41500 if (exponent.isOdd()) {
41501 result = result.multiply(base).remainder(modulus);
41502 }
41503
41504 exponent = exponent.quotient(BigInteger.small[2]);
41505 if (exponent.isPositive()) {
41506 base = base.square().remainder(modulus);
41507 }
41508 }
41509
41510 return result;
41511 };
41512
41513 /*
41514 Function: log
41515 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
41516
41517 This is equivalent to
41518
41519 > Math.log(this.toJSValue())
41520
41521 but handles values outside of the native number range.
41522
41523 Returns:
41524
41525 log( *this* )
41526
41527 See Also:
41528
41529 <toJSValue>
41530 */
41531 BigInteger.prototype.log = function() {
41532 switch (this._s) {
41533 case 0: return -Infinity;
41534 case -1: return NaN;
41535 default: // Fall through.
41536 }
41537
41538 var l = this._d.length;
41539
41540 if (l*BigInteger_base_log10 < 30) {
41541 return Math.log(this.valueOf());
41542 }
41543
41544 var N = Math.ceil(30/BigInteger_base_log10);
41545 var firstNdigits = this._d.slice(l - N);
41546 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
41547 };
41548
41549 /*
41550 Function: valueOf
41551 Convert a <BigInteger> to a native JavaScript integer.
41552
41553 This is called automatically by JavaScipt to convert a <BigInteger> to a
41554 native value.
41555
41556 Returns:
41557
41558 > parseInt(this.toString(), 10)
41559
41560 See Also:
41561
41562 <toString>, <toJSValue>
41563 */
41564 BigInteger.prototype.valueOf = function() {
41565 return parseInt(this.toString(), 10);
41566 };
41567
41568 /*
41569 Function: toJSValue
41570 Convert a <BigInteger> to a native JavaScript integer.
41571
41572 This is the same as valueOf, but more explicitly named.
41573
41574 Returns:
41575
41576 > parseInt(this.toString(), 10)
41577
41578 See Also:
41579
41580 <toString>, <valueOf>
41581 */
41582 BigInteger.prototype.toJSValue = function() {
41583 return parseInt(this.toString(), 10);
41584 };
41585
41586 var MAX_EXP = BigInteger(0x7FFFFFFF);
41587 // Constant: MAX_EXP
41588 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
41589 BigInteger.MAX_EXP = MAX_EXP;
41590
41591 (function() {
41592 function makeUnary(fn) {
41593 return function(a) {
41594 return fn.call(BigInteger(a));
41595 };
41596 }
41597
41598 function makeBinary(fn) {
41599 return function(a, b) {
41600 return fn.call(BigInteger(a), BigInteger(b));
41601 };
41602 }
41603
41604 function makeTrinary(fn) {
41605 return function(a, b, c) {
41606 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
41607 };
41608 }
41609
41610 (function() {
41611 var i, fn;
41612 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
41613 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
41614 var trinary = ["modPow"];
41615
41616 for (i = 0; i < unary.length; i++) {
41617 fn = unary[i];
41618 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
41619 }
41620
41621 for (i = 0; i < binary.length; i++) {
41622 fn = binary[i];
41623 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
41624 }
41625
41626 for (i = 0; i < trinary.length; i++) {
41627 fn = trinary[i];
41628 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
41629 }
41630
41631 BigInteger.exp10 = function(x, n) {
41632 return BigInteger(x).exp10(n);
41633 };
41634 })();
41635 })();
41636
41637 exports.BigInteger = BigInteger;
41638 })(typeof exports !== 'undefined' ? exports : this);
41639 </script>
41640 <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){
41641 var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
41642
41643 },{}],2:[function(require,module,exports){
41644 var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
41645
41646 },{"./scoring":6}],3:[function(require,module,exports){
41647 var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
41648 english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
41649 female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
41650 us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
41651 male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
41652
41653 },{}],4:[function(require,module,exports){
41654 var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
41655
41656 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
41657 var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
41658
41659 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
41660 var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
41661
41662 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
41663 var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
41664
41665 },{}]},{},[4])(4)
41666 });
41667 //# sourceMappingURL=zxcvbn.js.map
41668 </script>
41669 <script>/*
41670 * Detects entropy from a string.
41671 *
41672 * Formats include:
41673 * binary [0-1]
41674 * base 6 [0-5]
41675 * dice 6 [1-6]
41676 * decimal [0-9]
41677 * hexadecimal [0-9A-F]
41678 * card [A2-9TJQK][CDHS]
41679 *
41680 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
41681 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
41682 * entropy.
41683 */
41684
41685 window.Entropy = new (function() {
41686
41687 var TWO = new BigInteger(2);
41688
41689 // matchers returns an array of the matched events for each type of entropy.
41690 // eg
41691 // matchers.binary("010") returns ["0", "1", "0"]
41692 // matchers.binary("a10") returns ["1", "0"]
41693 // matchers.hex("a10") returns ["a", "1", "0"]
41694 var matchers = {
41695 binary: function(str) {
41696 return str.match(/[0-1]/gi) || [];
41697 },
41698 base6: function(str) {
41699 return str.match(/[0-5]/gi) || [];
41700 },
41701 dice: function(str) {
41702 return str.match(/[1-6]/gi) || []; // ie dice numbers
41703 },
41704 base10: function(str) {
41705 return str.match(/[0-9]/gi) || [];
41706 },
41707 hex: function(str) {
41708 return str.match(/[0-9A-F]/gi) || [];
41709 },
41710 card: function(str) {
41711 // Format is NumberSuit, eg
41712 // AH ace of hearts
41713 // 8C eight of clubs
41714 // TD ten of diamonds
41715 // JS jack of spades
41716 // QH queen of hearts
41717 // KC king of clubs
41718 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
41719 }
41720 }
41721
41722 // Convert array of cards from ["ac", "4d", "ks"]
41723 // to numbers between 0 and 51 [0, 16, 51]
41724 function convertCardsToInts(cards) {
41725 var ints = [];
41726 var values = "a23456789tjqk";
41727 var suits = "cdhs";
41728 for (var i=0; i<cards.length; i++) {
41729 var card = cards[i].toLowerCase();
41730 var value = card[0];
41731 var suit = card[1];
41732 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
41733 ints.push(asInt);
41734 }
41735 return ints;
41736 }
41737
41738 this.fromString = function(rawEntropyStr) {
41739 // Find type of entropy being used (binary, hex, dice etc)
41740 var base = getBase(rawEntropyStr);
41741 // Convert dice to base6 entropy (ie 1-6 to 0-5)
41742 // This is done by changing all 6s to 0s
41743 if (base.str == "dice") {
41744 var newParts = [];
41745 var newInts = [];
41746 for (var i=0; i<base.parts.length; i++) {
41747 var c = base.parts[i];
41748 if ("12345".indexOf(c) > -1) {
41749 newParts[i] = base.parts[i];
41750 newInts[i] = base.ints[i];
41751 }
41752 else {
41753 newParts[i] = "0";
41754 newInts[i] = 0;
41755 }
41756 }
41757 base.str = "base 6 (dice)";
41758 base.ints = newInts;
41759 base.parts = newParts;
41760 base.matcher = matchers.base6;
41761 }
41762 // Detect empty entropy
41763 if (base.parts.length == 0) {
41764 return {
41765 binaryStr: "",
41766 cleanStr: "",
41767 cleanHtml: "",
41768 base: base,
41769 };
41770 }
41771 // Convert base.ints to BigInteger.
41772 // Due to using unusual bases, eg cards of base52, this is not as simple as
41773 // using BigInteger.parse()
41774 var entropyInt = BigInteger.ZERO;
41775 for (var i=base.ints.length-1; i>=0; i--) {
41776 var thisInt = BigInteger.parse(base.ints[i]);
41777 var power = (base.ints.length - 1) - i;
41778 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
41779 entropyInt = entropyInt.add(additionalEntropy);
41780 }
41781 // Convert entropy to binary
41782 var entropyBin = entropyInt.toString(2);
41783 // If the first integer is small, it must be padded with zeros.
41784 // Otherwise the chance of the first bit being 1 is 100%, which is
41785 // obviously incorrect.
41786 // This is not perfect for non-2^n bases.
41787 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
41788 while (entropyBin.length < expectedBits) {
41789 entropyBin = "0" + entropyBin;
41790 }
41791 // Calculate the number of bits per event
41792 var bitsPerEvent = Math.log2(base.asInt);
41793 // Cards binary must be handled differently, since they're not replaced
41794 if (base.asInt == 52) {
41795 var cardEntropy = processCardEntropy(base.parts);
41796 entropyBin = cardEntropy.binaryStr;
41797 bitsPerEvent = cardEntropy.bitsPerEvent;
41798 }
41799 // Supply a 'filtered' entropy string for display purposes
41800 var entropyClean = base.parts.join("");
41801 var entropyHtml = base.parts.join("");
41802 if (base.asInt == 52) {
41803 entropyClean = base.parts.join(" ").toUpperCase();
41804 entropyClean = entropyClean.replace(/C/g, "\u2663");
41805 entropyClean = entropyClean.replace(/D/g, "\u2666");
41806 entropyClean = entropyClean.replace(/H/g, "\u2665");
41807 entropyClean = entropyClean.replace(/S/g, "\u2660");
41808 entropyHtml = base.parts.join(" ").toUpperCase();
41809 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
41810 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
41811 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
41812 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
41813 }
41814 // Return the result
41815 var e = {
41816 binaryStr: entropyBin,
41817 cleanStr: entropyClean,
41818 cleanHtml: entropyHtml,
41819 bitsPerEvent: bitsPerEvent,
41820 base: base,
41821 }
41822 return e;
41823 }
41824
41825 function getSortedDeck() {
41826 var s = [];
41827 var suits = "CDHS";
41828 var values = "A23456789TJQK";
41829 for (var i=0; i<suits.length; i++) {
41830 for (var j=0; j<values.length; j++) {
41831 s.push(values[j]+suits[i]);
41832 }
41833 }
41834 return s;
41835 }
41836
41837 function getBase(str) {
41838 // Need to get the lowest base for the supplied entropy.
41839 // This prevents interpreting, say, dice rolls as hexadecimal.
41840 var binaryMatches = matchers.binary(str);
41841 var hexMatches = matchers.hex(str);
41842 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
41843 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
41844 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
41845 return {
41846 ints: ints,
41847 parts: binaryMatches,
41848 matcher: matchers.binary,
41849 asInt: 2,
41850 str: "binary",
41851 }
41852 }
41853 var cardMatches = matchers.card(str);
41854 if (cardMatches.length >= hexMatches.length / 2) {
41855 var ints = convertCardsToInts(cardMatches);
41856 return {
41857 ints: ints,
41858 parts: cardMatches,
41859 matcher: matchers.card,
41860 asInt: 52,
41861 str: "card",
41862 }
41863 }
41864 var diceMatches = matchers.dice(str);
41865 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
41866 var ints = diceMatches.map(function(i) { return parseInt(i) });
41867 return {
41868 ints: ints,
41869 parts: diceMatches,
41870 matcher: matchers.dice,
41871 asInt: 6,
41872 str: "dice",
41873 }
41874 }
41875 var base6Matches = matchers.base6(str);
41876 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
41877 var ints = base6Matches.map(function(i) { return parseInt(i) });
41878 return {
41879 ints: ints,
41880 parts: base6Matches,
41881 matcher: matchers.base6,
41882 asInt: 6,
41883 str: "base 6",
41884 }
41885 }
41886 var base10Matches = matchers.base10(str);
41887 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
41888 var ints = base10Matches.map(function(i) { return parseInt(i) });
41889 return {
41890 ints: ints,
41891 parts: base10Matches,
41892 matcher: matchers.base10,
41893 asInt: 10,
41894 str: "base 10",
41895 }
41896 }
41897 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
41898 return {
41899 ints: ints,
41900 parts: hexMatches,
41901 matcher: matchers.hex,
41902 asInt: 16,
41903 str: "hexadecimal",
41904 }
41905 }
41906
41907 // Assume cards are NOT replaced.
41908 // Additional entropy decreases as more cards are used. This means
41909 // total possible entropy is measured using n!, not base^n.
41910 // eg the second last card can be only one of two, not one of fifty two
41911 // so the added entropy for that card is only one bit at most
41912 function processCardEntropy(cards) {
41913 // Track how many instances of each card have been used, and thus
41914 // how many decks are in use.
41915 var cardCounts = {};
41916 var numberOfDecks = 0;
41917 // Work out number of decks by max(duplicates)
41918 for (var i=0; i<cards.length; i++) {
41919 // Get the card that was drawn
41920 var cardLower = cards[i];
41921 var card = cardLower.toUpperCase();
41922 // Initialize the count for this card if needed
41923 if (!(card in cardCounts)) {
41924 cardCounts[card] = 0;
41925 }
41926 cardCounts[card] += 1;
41927 // See if this is max(duplicates)
41928 if (cardCounts[card] > numberOfDecks) {
41929 numberOfDecks = cardCounts[card];
41930 }
41931 }
41932 // Work out the total number of bits for this many decks
41933 // See http://crypto.stackexchange.com/q/41886
41934 var gainedBits = 0;
41935 // Equivalent of Math.log2(factorial(52*numberOfDecks))
41936 // which becomes infinity for numberOfDecks > 4
41937 for (var i=1; i<=52*numberOfDecks; i++) {
41938 gainedBits = gainedBits + Math.log2(i);
41939 }
41940 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
41941 var maxBits = gainedBits - lostBits;
41942 // Convert the drawn cards to a binary representation.
41943 // The exact technique for doing this is unclear.
41944 // See
41945 // http://crypto.stackexchange.com/a/41896
41946 // "I even doubt that this is well defined (only the average entropy
41947 // is, I believe)."
41948 // See
41949 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
41950 // "The binary representation can be the first log(permutations,2) bits
41951 // of the sha-2 hash of the normalized deck string."
41952 //
41953 // In this specific implementation, the first N bits of the hash of the
41954 // normalized cards string is being used. Uppercase, no spaces; eg
41955 // sha256("AH8DQSTC2H")
41956 var totalCards = numberOfDecks * 52;
41957 var percentUsed = cards.length / totalCards;
41958 // Calculate the average number of bits of entropy for the number of
41959 // cards drawn.
41960 var numberOfBits = Math.floor(maxBits * percentUsed);
41961 // Create a normalized string of the selected cards
41962 var normalizedCards = cards.join("").toUpperCase();
41963 // Convert to binary using the SHA256 hash of the normalized cards.
41964 // If the number of bits is more than 256, multiple hashes
41965 // are used until the required number of bits is reached.
41966 var entropyBin = "";
41967 var iterations = 0;
41968 while (entropyBin.length < numberOfBits) {
41969 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
41970 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
41971 for (var i=0; i<hashHex.length; i++) {
41972 var decimal = parseInt(hashHex[i], 16);
41973 var binary = decimal.toString(2);
41974 while (binary.length < 4) {
41975 binary = "0" + binary;
41976 }
41977 entropyBin = entropyBin + binary;
41978 }
41979 iterations = iterations + 1;
41980 }
41981 // Truncate to the appropriate number of bits.
41982 entropyBin = entropyBin.substring(0, numberOfBits);
41983 // Get the number of bits per event
41984 bitsPerEvent = maxBits / totalCards;
41985 return {
41986 binaryStr: entropyBin,
41987 bitsPerEvent: bitsPerEvent,
41988 }
41989 }
41990
41991 // Polyfill for Math.log2
41992 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
41993 Math.log2 = Math.log2 || function(x) {
41994 // The polyfill isn't good enough because of the poor accuracy of
41995 // Math.LOG2E
41996 // log2(8) gave 2.9999999999999996 which when floored causes issues.
41997 // So instead use the BigInteger library to get it right.
41998 return BigInteger.log(x) / BigInteger.log(2);
41999 };
42000
42001 // Depends on BigInteger
42002 function factorial(n) {
42003 if (n == 0) {
42004 return 1;
42005 }
42006 f = BigInteger.ONE;
42007 for (var i=1; i<=n; i++) {
42008 f = f.multiply(new BigInteger(i));
42009 }
42010 return f;
42011 }
42012
42013 })();
42014 </script>
42015 <script>/*! jQuery UI - v1.12.1 - 2016-09-14
42016 * http://jqueryui.com
42017 * Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
42018 * Copyright jQuery Foundation and other contributors; Licensed MIT */
42019
42020 (function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)
42021 }}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;
42022 this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var m;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
42023 }},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}
42024 },_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog
42025 },disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1
42026 },_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;
42027 this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});</script>
42028 <script>/*! jQuery UI Virtual Keyboard v1.26.22 *//*
42029 Author: Jeremy Satterfield
42030 Maintained: Rob Garrison (Mottie on github)
42031 Licensed under the MIT License
42032
42033 An on-screen virtual keyboard embedded within the browser window which
42034 will popup when a specified entry field is focused. The user can then
42035 type and preview their input before Accepting or Canceling.
42036
42037 This plugin adds default class names to match jQuery UI theme styling.
42038 Bootstrap & custom themes may also be applied - See
42039 https://github.com/Mottie/Keyboard#themes
42040
42041 Requires:
42042 jQuery v1.4.3+
42043 Caret plugin (included)
42044 Optional:
42045 jQuery UI (position utility only) & CSS theme
42046 jQuery mousewheel
42047
42048 Setup/Usage:
42049 Please refer to https://github.com/Mottie/Keyboard/wiki
42050
42051 -----------------------------------------
42052 Caret code modified from jquery.caret.1.02.js
42053 Licensed under the MIT License:
42054 http://www.opensource.org/licenses/mit-license.php
42055 -----------------------------------------
42056 */
42057 /*jshint browser:true, jquery:true, unused:false */
42058 /*global require:false, define:false, module:false */
42059 ;(function (factory) {
42060 if (typeof define === 'function' && define.amd) {
42061 define(['jquery'], factory);
42062 } else if (typeof module === 'object' && typeof module.exports === 'object') {
42063 module.exports = factory(require('jquery'));
42064 } else {
42065 factory(jQuery);
42066 }
42067 }(function ($) {
42068 'use strict';
42069 var $keyboard = $.keyboard = function (el, options) {
42070 var o, base = this;
42071
42072 base.version = '1.26.22';
42073
42074 // Access to jQuery and DOM versions of element
42075 base.$el = $(el);
42076 base.el = el;
42077
42078 // Add a reverse reference to the DOM object
42079 base.$el.data('keyboard', base);
42080
42081 base.init = function () {
42082 base.initialized = false;
42083 var k, position, tmp,
42084 kbcss = $keyboard.css,
42085 kbevents = $keyboard.events;
42086 base.settings = options || {};
42087 // shallow copy position to prevent performance issues; see #357
42088 if (options && options.position) {
42089 position = $.extend({}, options.position);
42090 options.position = null;
42091 }
42092 base.options = o = $.extend(true, {}, $keyboard.defaultOptions, options);
42093 if (position) {
42094 o.position = position;
42095 options.position = position;
42096 }
42097
42098 // keyboard is active (not destroyed);
42099 base.el.active = true;
42100 // unique keyboard namespace
42101 base.namespace = '.keyboard' + Math.random().toString(16).slice(2);
42102 // extension namespaces added here (to unbind listeners on base.$el upon destroy)
42103 base.extensionNamespace = [];
42104 // Shift and Alt key toggles, sets is true if a layout has more than one keyset
42105 // used for mousewheel message
42106 base.shiftActive = base.altActive = base.metaActive = base.sets = base.capsLock = false;
42107 // Class names of the basic key set - meta keysets are handled by the keyname
42108 base.rows = ['', '-shift', '-alt', '-alt-shift'];
42109
42110 base.inPlaceholder = base.$el.attr('placeholder') || '';
42111 // html 5 placeholder/watermark
42112 base.watermark = $keyboard.watermark && base.inPlaceholder !== '';
42113 // convert mouse repeater rate (characters per second) into a time in milliseconds.
42114 base.repeatTime = 1000 / (o.repeatRate || 20);
42115 // delay in ms to prevent mousedown & touchstart from both firing events at the same time
42116 o.preventDoubleEventTime = o.preventDoubleEventTime || 100;
42117 // flag indication that a keyboard is open
42118 base.isOpen = false;
42119 // is mousewheel plugin loaded?
42120 base.wheel = $.isFunction($.fn.mousewheel);
42121 // special character in regex that need to be escaped
42122 base.escapeRegex = /[-\/\\^$*+?.()|[\]{}]/g;
42123
42124 // keyCode of keys always allowed to be typed
42125 k = $keyboard.keyCodes;
42126 // base.alwaysAllowed = [20,33,34,35,36,37,38,39,40,45,46];
42127 base.alwaysAllowed = [
42128 k.capsLock,
42129 k.pageUp,
42130 k.pageDown,
42131 k.end,
42132 k.home,
42133 k.left,
42134 k.up,
42135 k.right,
42136 k.down,
42137 k.insert,
42138 k.delete
42139 ];
42140 base.$keyboard = [];
42141 // keyboard enabled; set to false on destroy
42142 base.enabled = true;
42143
42144 base.checkCaret = (o.lockInput || $keyboard.checkCaretSupport());
42145
42146 base.last = {
42147 start: 0,
42148 end: 0,
42149 key: '',
42150 val: '',
42151 preVal: '',
42152 layout: '',
42153 virtual: true,
42154 keyset: [false, false, false], // [shift, alt, meta]
42155 wheel_$Keys: null,
42156 wheelIndex: 0,
42157 wheelLayers: []
42158 };
42159 // used when building the keyboard - [keyset element, row, index]
42160 base.temp = ['', 0, 0];
42161
42162 // Callbacks
42163 $.each([
42164 kbevents.kbInit,
42165 kbevents.kbBeforeVisible,
42166 kbevents.kbVisible,
42167 kbevents.kbHidden,
42168 kbevents.inputCanceled,
42169 kbevents.inputAccepted,
42170 kbevents.kbBeforeClose,
42171 kbevents.inputRestricted
42172 ], function (i, callback) {
42173 if ($.isFunction(o[callback])) {
42174 // bind callback functions within options to triggered events
42175 base.$el.bind(callback + base.namespace + 'callbacks', o[callback]);
42176 }
42177 });
42178
42179 // Close with esc key & clicking outside
42180 if (o.alwaysOpen) {
42181 o.stayOpen = true;
42182 }
42183
42184 tmp = $(document);
42185 if (base.el.ownerDocument !== document) {
42186 tmp = tmp.add(base.el.ownerDocument);
42187 }
42188
42189 var bindings = 'keyup checkkeyboard mousedown touchstart ';
42190 if (o.closeByClickEvent) {
42191 bindings += 'click ';
42192 }
42193 // debounce bindings... see #542
42194 tmp.bind(bindings.split(' ').join(base.namespace + ' '), function(e) {
42195 clearTimeout(base.timer3);
42196 base.timer3 = setTimeout(function() {
42197 base.checkClose(e);
42198 }, 1);
42199 });
42200
42201 // Display keyboard on focus
42202 base.$el
42203 .addClass(kbcss.input + ' ' + o.css.input)
42204 .attr({
42205 'aria-haspopup': 'true',
42206 'role': 'textbox'
42207 });
42208
42209 // set lockInput if the element is readonly; or make the element readonly if lockInput is set
42210 if (o.lockInput || base.el.readOnly) {
42211 o.lockInput = true;
42212 base.$el
42213 .addClass(kbcss.locked)
42214 .attr({
42215 'readonly': 'readonly'
42216 });
42217 }
42218 // add disabled/readonly class - dynamically updated on reveal
42219 if (base.$el.is(':disabled') || (base.$el.attr('readonly') &&
42220 !base.$el.hasClass(kbcss.locked))) {
42221 base.$el.addClass(kbcss.noKeyboard);
42222 }
42223 if (o.openOn) {
42224 base.bindFocus();
42225 }
42226
42227 // Add placeholder if not supported by the browser
42228 if (!base.watermark && base.$el.val() === '' && base.inPlaceholder !== '' &&
42229 base.$el.attr('placeholder') !== '') {
42230 base.$el
42231 .addClass(kbcss.placeholder) // css watermark style (darker text)
42232 .val(base.inPlaceholder);
42233 }
42234
42235 base.$el.trigger(kbevents.kbInit, [base, base.el]);
42236
42237 // initialized with keyboard open
42238 if (o.alwaysOpen) {
42239 base.reveal();
42240 }
42241 base.initialized = true;
42242 };
42243
42244 base.toggle = function () {
42245 if (!base.hasKeyboard()) { return; }
42246 var $toggle = base.$keyboard.find('.' + $keyboard.css.keyToggle),
42247 locked = !base.enabled;
42248 // prevent physical keyboard from working
42249 base.$preview.prop('readonly', locked || base.options.lockInput);
42250 // disable all buttons
42251 base.$keyboard
42252 .toggleClass($keyboard.css.keyDisabled, locked)
42253 .find('.' + $keyboard.css.keyButton)
42254 .not($toggle)
42255 .prop('disabled', locked)
42256 .attr('aria-disabled', locked);
42257 $toggle.toggleClass($keyboard.css.keyDisabled, locked);
42258 // stop auto typing
42259 if (locked && base.typing_options) {
42260 base.typing_options.text = '';
42261 }
42262 // allow chaining
42263 return base;
42264 };
42265
42266 base.setCurrent = function () {
42267 var kbcss = $keyboard.css,
42268 // close any "isCurrent" keyboard (just in case they are always open)
42269 $current = $('.' + kbcss.isCurrent),
42270 kb = $current.data('keyboard');
42271 // close keyboard, if not self
42272 if (!$.isEmptyObject(kb) && kb.el !== base.el) {
42273 kb.close(kb.options.autoAccept ? 'true' : false);
42274 }
42275 $current.removeClass(kbcss.isCurrent);
42276 // ui-keyboard-has-focus is applied in case multiple keyboards have
42277 // alwaysOpen = true and are stacked
42278 $('.' + kbcss.hasFocus).removeClass(kbcss.hasFocus);
42279
42280 base.$el.addClass(kbcss.isCurrent);
42281 base.$keyboard.addClass(kbcss.hasFocus);
42282 base.isCurrent(true);
42283 base.isOpen = true;
42284 };
42285
42286 base.isCurrent = function (set) {
42287 var cur = $keyboard.currentKeyboard || false;
42288 if (set) {
42289 cur = $keyboard.currentKeyboard = base.el;
42290 } else if (set === false && cur === base.el) {
42291 cur = $keyboard.currentKeyboard = '';
42292 }
42293 return cur === base.el;
42294 };
42295
42296 base.hasKeyboard = function () {
42297 return base.$keyboard && base.$keyboard.length > 0;
42298 };
42299
42300 base.isVisible = function () {
42301 return base.hasKeyboard() ? base.$keyboard.is(':visible') : false;
42302 };
42303
42304 base.focusOn = function () {
42305 if (!base && base.el.active) {
42306 // keyboard was destroyed
42307 return;
42308 }
42309 if (!base.isVisible()) {
42310 clearTimeout(base.timer);
42311 base.reveal();
42312 } else {
42313 // keyboard already open, make it the current keyboard
42314 base.setCurrent();
42315 }
42316 };
42317
42318 // add redraw method to make API more clear
42319 base.redraw = function (layout) {
42320 if (layout) {
42321 // allow updating the layout by calling redraw
42322 base.options.layout = layout;
42323 }
42324 // update keyboard after a layout change
42325 if (base.$keyboard.length) {
42326
42327 base.last.preVal = '' + base.last.val;
42328 base.last.val = base.$preview && base.$preview.val() || base.$el.val();
42329 base.$el.val( base.last.val );
42330
42331 base.removeKeyboard();
42332 base.shiftActive = base.altActive = base.metaActive = false;
42333 }
42334 base.isOpen = o.alwaysOpen;
42335 base.reveal(true);
42336 return base;
42337 };
42338
42339 base.reveal = function (redraw) {
42340 var alreadyOpen = base.isOpen,
42341 kbcss = $keyboard.css;
42342 base.opening = !alreadyOpen;
42343 // remove all 'extra' keyboards by calling close function
42344 $('.' + kbcss.keyboard).not('.' + kbcss.alwaysOpen).each(function(){
42345 var kb = $(this).data('keyboard');
42346 if (!$.isEmptyObject(kb)) {
42347 // this closes previous keyboard when clicking another input - see #515
42348 kb.close(kb.options.autoAccept ? 'true' : false);
42349 }
42350 });
42351
42352 // Don't open if disabled
42353 if (base.$el.is(':disabled') || (base.$el.attr('readonly') && !base.$el.hasClass(kbcss.locked))) {
42354 base.$el.addClass(kbcss.noKeyboard);
42355 return;
42356 } else {
42357 base.$el.removeClass(kbcss.noKeyboard);
42358 }
42359
42360 // Unbind focus to prevent recursion - openOn may be empty if keyboard is opened externally
42361 if (o.openOn) {
42362 base.$el.unbind($.trim((o.openOn + ' ').split(/\s+/).join(base.namespace + ' ')));
42363 }
42364
42365 // build keyboard if it doesn't exist; or attach keyboard if it was removed, but not cleared
42366 if (!base.$keyboard || base.$keyboard &&
42367 (!base.$keyboard.length || $.contains(document.body, base.$keyboard[0]))) {
42368 base.startup();
42369 }
42370
42371 // clear watermark
42372 if (!base.watermark && base.el.value === base.inPlaceholder) {
42373 base.$el
42374 .removeClass(kbcss.placeholder)
42375 .val('');
42376 }
42377 // save starting content, in case we cancel
42378 base.originalContent = base.$el.val();
42379 base.$preview.val(base.originalContent);
42380
42381 // disable/enable accept button
42382 if (o.acceptValid) {
42383 base.checkValid();
42384 }
42385
42386 if (o.resetDefault) {
42387 base.shiftActive = base.altActive = base.metaActive = false;
42388 }
42389 base.showSet();
42390
42391 // beforeVisible event
42392 if (!base.isVisible()) {
42393 base.$el.trigger($keyboard.events.kbBeforeVisible, [base, base.el]);
42394 }
42395 if (
42396 base.initialized ||
42397 o.initialFocus ||
42398 ( !o.initialFocus && base.$el.hasClass($keyboard.css.initialFocus) )
42399 ) {
42400 base.setCurrent();
42401 }
42402 // update keyboard - enabled or disabled?
42403 base.toggle();
42404
42405 // show keyboard
42406 base.$keyboard.show();
42407
42408 // adjust keyboard preview window width - save width so IE won't keep expanding (fix issue #6)
42409 if (o.usePreview && $keyboard.msie) {
42410 if (typeof base.width === 'undefined') {
42411 base.$preview.hide(); // preview is 100% browser width in IE7, so hide the damn thing
42412 base.width = Math.ceil(base.$keyboard.width()); // set input width to match the widest keyboard row
42413 base.$preview.show();
42414 }
42415 base.$preview.width(base.width);
42416 }
42417
42418 base.reposition();
42419
42420 base.checkDecimal();
42421
42422 // get preview area line height
42423 // add roughly 4px to get line height from font height, works well for font-sizes from 14-36px
42424 // needed for textareas
42425 base.lineHeight = parseInt(base.$preview.css('lineHeight'), 10) ||
42426 parseInt(base.$preview.css('font-size'), 10) + 4;
42427
42428 if (o.caretToEnd) {
42429 base.saveCaret(base.originalContent.length, base.originalContent.length);
42430 }
42431
42432 // IE caret haxx0rs
42433 if ($keyboard.allie) {
42434 // sometimes end = 0 while start is > 0
42435 if (base.last.end === 0 && base.last.start > 0) {
42436 base.last.end = base.last.start;
42437 }
42438 // IE will have start -1, end of 0 when not focused (see demo: https://jsfiddle.net/Mottie/fgryQ/3/)
42439 if (base.last.start < 0) {
42440 // ensure caret is at the end of the text (needed for IE)
42441 base.last.start = base.last.end = base.originalContent.length;
42442 }
42443 }
42444
42445 if (alreadyOpen || redraw) {
42446 // restore caret position (userClosed)
42447 $keyboard.caret(base.$preview, base.last);
42448 return base;
42449 }
42450
42451 // opening keyboard flag; delay allows switching between keyboards without immediately closing
42452 // the keyboard
42453 base.timer2 = setTimeout(function () {
42454 var undef;
42455 base.opening = false;
42456 // Number inputs don't support selectionStart and selectionEnd
42457 // Number/email inputs don't support selectionStart and selectionEnd
42458 if (!/(number|email)/i.test(base.el.type) && !o.caretToEnd) {
42459 // caret position is always 0,0 in webkit; and nothing is focused at this point... odd
42460 // save caret position in the input to transfer it to the preview
42461 // inside delay to get correct caret position
42462 base.saveCaret(undef, undef, base.$el);
42463 }
42464 if (o.initialFocus || base.$el.hasClass($keyboard.css.initialFocus)) {
42465 $keyboard.caret(base.$preview, base.last);
42466 }
42467 // save event time for keyboards with stayOpen: true
42468 base.last.eventTime = new Date().getTime();
42469 base.$el.trigger($keyboard.events.kbVisible, [base, base.el]);
42470 base.timer = setTimeout(function () {
42471 // get updated caret information after visible event - fixes #331
42472 if (base) { // Check if base exists, this is a case when destroy is called, before timers fire
42473 base.saveCaret();
42474 }
42475 }, 200);
42476 }, 10);
42477 // return base to allow chaining in typing extension
42478 return base;
42479 };
42480
42481 base.updateLanguage = function () {
42482 // change language if layout is named something like 'french-azerty-1'
42483 var layouts = $keyboard.layouts,
42484 lang = o.language || layouts[o.layout] && layouts[o.layout].lang &&
42485 layouts[o.layout].lang || [o.language || 'en'],
42486 kblang = $keyboard.language;
42487
42488 // some languages include a dash, e.g. 'en-gb' or 'fr-ca'
42489 // allow o.language to be a string or array...
42490 // array is for future expansion where a layout can be set for multiple languages
42491 lang = ($.isArray(lang) ? lang[0] : lang).split('-')[0];
42492
42493 // set keyboard language
42494 o.display = $.extend(true, {},
42495 kblang.en.display,
42496 kblang[lang] && kblang[lang].display || {},
42497 base.settings.display
42498 );
42499 o.combos = $.extend(true, {},
42500 kblang.en.combos,
42501 kblang[lang] && kblang[lang].combos || {},
42502 base.settings.combos
42503 );
42504 o.wheelMessage = kblang[lang] && kblang[lang].wheelMessage || kblang.en.wheelMessage;
42505 // rtl can be in the layout or in the language definition; defaults to false
42506 o.rtl = layouts[o.layout] && layouts[o.layout].rtl || kblang[lang] && kblang[lang].rtl || false;
42507
42508 // save default regex (in case loading another layout changes it)
42509 base.regex = kblang[lang] && kblang[lang].comboRegex || $keyboard.comboRegex;
42510 // determine if US '.' or European ',' system being used
42511 base.decimal = /^\./.test(o.display.dec);
42512 base.$el
42513 .toggleClass('rtl', o.rtl)
42514 .css('direction', o.rtl ? 'rtl' : '');
42515 };
42516
42517 base.startup = function () {
42518 var kbcss = $keyboard.css;
42519 // ensure base.$preview is defined; but don't overwrite it if keyboard is always visible
42520 if (!((o.alwaysOpen || o.userClosed) && base.$preview)) {
42521 base.makePreview();
42522 }
42523 if (!base.hasKeyboard()) {
42524 // custom layout - create a unique layout name based on the hash
42525 if (o.layout === 'custom') {
42526 o.layoutHash = 'custom' + base.customHash();
42527 }
42528 base.layout = o.layout === 'custom' ? o.layoutHash : o.layout;
42529 base.last.layout = base.layout;
42530
42531 base.updateLanguage();
42532 if (typeof $keyboard.builtLayouts[base.layout] === 'undefined') {
42533 if ($.isFunction(o.create)) {
42534 // create must call buildKeyboard() function; or create it's own keyboard
42535 base.$keyboard = o.create(base);
42536 } else if (!base.$keyboard.length) {
42537 base.buildKeyboard(base.layout, true);
42538 }
42539 }
42540 base.$keyboard = $keyboard.builtLayouts[base.layout].$keyboard.clone();
42541 base.$keyboard.data('keyboard', base);
42542 if ((base.el.id || '') !== '') {
42543 // add ID to keyboard for styling purposes
42544 base.$keyboard.attr('id', base.el.id + $keyboard.css.idSuffix);
42545 }
42546
42547 base.makePreview();
42548 }
42549
42550 base.$decBtn = base.$keyboard.find('.' + kbcss.keyPrefix + 'dec');
42551 // add enter to allowed keys; fixes #190
42552 if (o.enterNavigation || base.el.nodeName === 'TEXTAREA') {
42553 base.alwaysAllowed.push(13);
42554 }
42555
42556 base.bindKeyboard();
42557
42558 base.$keyboard.appendTo(o.appendLocally ? base.$el.parent() : o.appendTo || 'body');
42559
42560 base.bindKeys();
42561
42562 // reposition keyboard on window resize
42563 if (o.reposition && $.ui && $.ui.position && o.appendTo == 'body') {
42564 $(window).bind('resize' + base.namespace, function () {
42565 base.reposition();
42566 });
42567 }
42568
42569 };
42570
42571 base.reposition = function () {
42572 base.position = $.isEmptyObject(o.position) ? false : o.position;
42573 // position after keyboard is visible (required for UI position utility)
42574 // and appropriately sized
42575 if ($.ui && $.ui.position && base.position) {
42576 base.position.of =
42577 // get single target position
42578 base.position.of ||
42579 // OR target stored in element data (multiple targets)
42580 base.$el.data('keyboardPosition') ||
42581 // OR default @ element
42582 base.$el;
42583 base.position.collision = base.position.collision || 'flipfit flipfit';
42584 base.position.at = o.usePreview ? o.position.at : o.position.at2;
42585 if (base.isVisible()) {
42586 base.$keyboard.position(base.position);
42587 }
42588 }
42589 // make chainable
42590 return base;
42591 };
42592
42593 base.makePreview = function () {
42594 if (o.usePreview) {
42595 var indx, attrs, attr, removedAttr,
42596 kbcss = $keyboard.css;
42597 base.$preview = base.$el.clone(false)
42598 .data('keyboard', base)
42599 .removeClass(kbcss.placeholder + ' ' + kbcss.input)
42600 .addClass(kbcss.preview + ' ' + o.css.input)
42601 .attr('tabindex', '-1')
42602 .show(); // for hidden inputs
42603 base.preview = base.$preview[0];
42604
42605 // Switch the number input field to text so the caret positioning will work again
42606 if (base.preview.type === 'number') {
42607 base.preview.type = 'text';
42608 }
42609
42610 // remove extraneous attributes.
42611 removedAttr = /^(data-|id|aria-haspopup)/i;
42612 attrs = base.$preview.get(0).attributes;
42613 for (indx = attrs.length - 1; indx >= 0; indx--) {
42614 attr = attrs[indx] && attrs[indx].name;
42615 if (removedAttr.test(attr)) {
42616 // remove data-attributes - see #351
42617 base.preview.removeAttribute(attr);
42618 }
42619 }
42620 // build preview container and append preview display
42621 $('<div />')
42622 .addClass(kbcss.wrapper)
42623 .append(base.$preview)
42624 .prependTo(base.$keyboard);
42625 } else {
42626 base.$preview = base.$el;
42627 base.preview = base.el;
42628 }
42629 };
42630
42631 // Added in v1.26.8 to allow chaining of the caret function, e.g.
42632 // keyboard.reveal().caret(4,5).insertText('test').caret('end');
42633 base.caret = function(param1, param2) {
42634 $keyboard.caret(base.$preview, param1, param2);
42635 return base;
42636 };
42637
42638 base.saveCaret = function (start, end, $el) {
42639 if (base.isCurrent()) {
42640 var p = $keyboard.caret($el || base.$preview, start, end);
42641 base.last.start = typeof start === 'undefined' ? p.start : start;
42642 base.last.end = typeof end === 'undefined' ? p.end : end;
42643 }
42644 };
42645
42646 base.setScroll = function () {
42647 // Set scroll so caret & current text is in view
42648 // needed for virtual keyboard typing, NOT manual typing - fixes #23
42649 if (base.last.virtual) {
42650
42651 var scrollWidth, clientWidth, adjustment, direction,
42652 isTextarea = base.preview.nodeName === 'TEXTAREA',
42653 value = base.last.val.substring(0, Math.max(base.last.start, base.last.end));
42654
42655 if (!base.$previewCopy) {
42656 // clone preview
42657 base.$previewCopy = base.$preview.clone()
42658 .removeAttr('id') // fixes #334
42659 .css({
42660 position: 'absolute',
42661 left: 0,
42662 zIndex: -10,
42663 visibility: 'hidden'
42664 })
42665 .addClass($keyboard.css.inputClone);
42666 // prevent submitting content on form submission
42667 base.$previewCopy[0].disabled = true;
42668 if (!isTextarea) {
42669 // make input zero-width because we need an accurate scrollWidth
42670 base.$previewCopy.css({
42671 'white-space': 'pre',
42672 'width': 0
42673 });
42674 }
42675 if (o.usePreview) {
42676 // add clone inside of preview wrapper
42677 base.$preview.after(base.$previewCopy);
42678 } else {
42679 // just slap that thing in there somewhere
42680 base.$keyboard.prepend(base.$previewCopy);
42681 }
42682 }
42683
42684 if (isTextarea) {
42685 // need the textarea scrollHeight, so set the clone textarea height to be the line height
42686 base.$previewCopy
42687 .height(base.lineHeight)
42688 .val(value);
42689 // set scrollTop for Textarea
42690 base.preview.scrollTop = base.lineHeight *
42691 (Math.floor(base.$previewCopy[0].scrollHeight / base.lineHeight) - 1);
42692 } else {
42693 // add non-breaking spaces
42694 base.$previewCopy.val(value.replace(/\s/g, '\xa0'));
42695
42696 // if scrollAdjustment option is set to "c" or "center" then center the caret
42697 adjustment = /c/i.test(o.scrollAdjustment) ? base.preview.clientWidth / 2 : o.scrollAdjustment;
42698 scrollWidth = base.$previewCopy[0].scrollWidth - 1;
42699
42700 // set initial state as moving right
42701 if (typeof base.last.scrollWidth === 'undefined') {
42702 base.last.scrollWidth = scrollWidth;
42703 base.last.direction = true;
42704 }
42705 // if direction = true; we're scrolling to the right
42706 direction = base.last.scrollWidth === scrollWidth ?
42707 base.last.direction :
42708 base.last.scrollWidth < scrollWidth;
42709 clientWidth = base.preview.clientWidth - adjustment;
42710
42711 // set scrollLeft for inputs; try to mimic the inherit caret positioning + scrolling:
42712 // hug right while scrolling right...
42713 if (direction) {
42714 if (scrollWidth < clientWidth) {
42715 base.preview.scrollLeft = 0;
42716 } else {
42717 base.preview.scrollLeft = scrollWidth - clientWidth;
42718 }
42719 } else {
42720 // hug left while scrolling left...
42721 if (scrollWidth >= base.preview.scrollWidth - clientWidth) {
42722 base.preview.scrollLeft = base.preview.scrollWidth - adjustment;
42723 } else if (scrollWidth - adjustment > 0) {
42724 base.preview.scrollLeft = scrollWidth - adjustment;
42725 } else {
42726 base.preview.scrollLeft = 0;
42727 }
42728 }
42729
42730 base.last.scrollWidth = scrollWidth;
42731 base.last.direction = direction;
42732 }
42733 }
42734 };
42735
42736 base.bindFocus = function () {
42737 if (o.openOn) {
42738 // make sure keyboard isn't destroyed
42739 // Check if base exists, this is a case when destroy is called, before timers have fired
42740 if (base && base.el.active) {
42741 base.$el.bind(o.openOn + base.namespace, function () {
42742 base.focusOn();
42743 });
42744 // remove focus from element (needed for IE since blur doesn't seem to work)
42745 if ($(':focus')[0] === base.el) {
42746 base.$el.blur();
42747 }
42748 }
42749 }
42750 };
42751
42752 base.bindKeyboard = function () {
42753 var evt,
42754 keyCodes = $keyboard.keyCodes,
42755 layout = $keyboard.builtLayouts[base.layout];
42756 base.$preview
42757 .unbind(base.namespace)
42758 .bind('click' + base.namespace + ' touchstart' + base.namespace, function () {
42759 if (o.alwaysOpen && !base.isCurrent()) {
42760 base.reveal();
42761 }
42762 // update last caret position after user click, use at least 150ms or it doesn't work in IE
42763 base.timer2 = setTimeout(function () {
42764 if (base){
42765 base.saveCaret();
42766 }
42767 }, 150);
42768
42769 })
42770 .bind('keypress' + base.namespace, function (e) {
42771 if (o.lockInput) {
42772 return false;
42773 }
42774 if (!base.isCurrent()) {
42775 return;
42776 }
42777
42778 var k = e.charCode || e.which,
42779 // capsLock can only be checked while typing a-z
42780 k1 = k >= keyCodes.A && k <= keyCodes.Z,
42781 k2 = k >= keyCodes.a && k <= keyCodes.z,
42782 str = base.last.key = String.fromCharCode(k);
42783 base.last.virtual = false;
42784 base.last.event = e;
42785 base.last.$key = []; // not a virtual keyboard key
42786 if (base.checkCaret) {
42787 base.saveCaret();
42788 }
42789
42790 // update capsLock
42791 if (k !== keyCodes.capsLock && (k1 || k2)) {
42792 base.capsLock = (k1 && !e.shiftKey) || (k2 && e.shiftKey);
42793 // if shifted keyset not visible, then show it
42794 if (base.capsLock && !base.shiftActive) {
42795 base.shiftActive = true;
42796 base.showSet();
42797 }
42798 }
42799
42800 // restrict input - keyCode in keypress special keys:
42801 // see http://www.asquare.net/javascript/tests/KeyCode.html
42802 if (o.restrictInput) {
42803 // allow navigation keys to work - Chrome doesn't fire a keypress event (8 = bksp)
42804 if ((e.which === keyCodes.backSpace || e.which === 0) &&
42805 $.inArray(e.keyCode, base.alwaysAllowed)) {
42806 return;
42807 }
42808 // quick key check
42809 if ($.inArray(str, layout.acceptedKeys) === -1) {
42810 e.preventDefault();
42811 // copy event object in case e.preventDefault() breaks when changing the type
42812 evt = $.extend({}, e);
42813 evt.type = $keyboard.events.inputRestricted;
42814 base.$el.trigger(evt, [base, base.el]);
42815 }
42816 } else if ((e.ctrlKey || e.metaKey) &&
42817 (e.which === keyCodes.A || e.which === keyCodes.C || e.which === keyCodes.V ||
42818 (e.which >= keyCodes.X && e.which <= keyCodes.Z))) {
42819 // Allow select all (ctrl-a), copy (ctrl-c), paste (ctrl-v) & cut (ctrl-x) &
42820 // redo (ctrl-y)& undo (ctrl-z); meta key for mac
42821 return;
42822 }
42823 // Mapped Keys - allows typing on a regular keyboard and the mapped key is entered
42824 // Set up a key in the layout as follows: 'm(a):label'; m = key to map, (a) = actual keyboard key
42825 // to map to (optional), ':label' = title/tooltip (optional)
42826 // example: \u0391 or \u0391(A) or \u0391:alpha or \u0391(A):alpha
42827 if (layout.hasMappedKeys && layout.mappedKeys.hasOwnProperty(str)) {
42828 base.last.key = layout.mappedKeys[str];
42829 base.insertText(base.last.key);
42830 e.preventDefault();
42831 }
42832 if (typeof o.beforeInsert === 'function') {
42833 base.insertText(base.last.key);
42834 e.preventDefault();
42835 }
42836 base.checkMaxLength();
42837
42838 })
42839 .bind('keyup' + base.namespace, function (e) {
42840 if (!base.isCurrent()) { return; }
42841 base.last.virtual = false;
42842 switch (e.which) {
42843 // Insert tab key
42844 case keyCodes.tab:
42845 // Added a flag to prevent from tabbing into an input, keyboard opening, then adding the tab
42846 // to the keyboard preview area on keyup. Sadly it still happens if you don't release the tab
42847 // key immediately because keydown event auto-repeats
42848 if (base.tab && o.tabNavigation && !o.lockInput) {
42849 base.shiftActive = e.shiftKey;
42850 // when switching inputs, the tab keyaction returns false
42851 var notSwitching = $keyboard.keyaction.tab(base);
42852 base.tab = false;
42853 if (!notSwitching) {
42854 return false;
42855 }
42856 } else {
42857 e.preventDefault();
42858 }
42859 break;
42860
42861 // Escape will hide the keyboard
42862 case keyCodes.escape:
42863 if (!o.ignoreEsc) {
42864 base.close(o.autoAccept && o.autoAcceptOnEsc ? 'true' : false);
42865 }
42866 return false;
42867 }
42868
42869 // throttle the check combo function because fast typers will have an incorrectly positioned caret
42870 clearTimeout(base.throttled);
42871 base.throttled = setTimeout(function () {
42872 // fix error in OSX? see issue #102
42873 if (base && base.isVisible()) {
42874 base.checkCombos();
42875 }
42876 }, 100);
42877
42878 base.checkMaxLength();
42879
42880 base.last.preVal = '' + base.last.val;
42881 base.last.val = base.$preview.val();
42882
42883 // don't alter "e" or the "keyup" event never finishes processing; fixes #552
42884 var event = jQuery.Event( $keyboard.events.kbChange );
42885 // base.last.key may be empty string (shift, enter, tab, etc) when keyboard is first visible
42886 // use e.key instead, if browser supports it
42887 event.action = base.last.key;
42888 base.$el.trigger(event, [base, base.el]);
42889
42890 // change callback is no longer bound to the input element as the callback could be
42891 // called during an external change event with all the necessary parameters (issue #157)
42892 if ($.isFunction(o.change)) {
42893 event.type = $keyboard.events.inputChange;
42894 o.change(event, base, base.el);
42895 return false;
42896 }
42897 if (o.acceptValid && o.autoAcceptOnValid) {
42898 if ($.isFunction(o.validate) && o.validate(base, base.$preview.val())) {
42899 base.$preview.blur();
42900 base.accept();
42901 }
42902 }
42903 })
42904 .bind('keydown' + base.namespace, function (e) {
42905 base.last.keyPress = e.which;
42906 // ensure alwaysOpen keyboards are made active
42907 if (o.alwaysOpen && !base.isCurrent()) {
42908 base.reveal();
42909 }
42910 // prevent tab key from leaving the preview window
42911 if (e.which === keyCodes.tab) {
42912 // allow tab to pass through - tab to next input/shift-tab for prev
42913 base.tab = true;
42914 return false;
42915 }
42916
42917 if (o.lockInput) {
42918 return false;
42919 }
42920
42921 base.last.virtual = false;
42922 switch (e.which) {
42923
42924 case keyCodes.backSpace:
42925 $keyboard.keyaction.bksp(base, null, e);
42926 e.preventDefault();
42927 break;
42928
42929 case keyCodes.enter:
42930 $keyboard.keyaction.enter(base, null, e);
42931 break;
42932
42933 // Show capsLock
42934 case keyCodes.capsLock:
42935 base.shiftActive = base.capsLock = !base.capsLock;
42936 base.showSet();
42937 break;
42938
42939 case keyCodes.V:
42940 // prevent ctrl-v/cmd-v
42941 if (e.ctrlKey || e.metaKey) {
42942 if (o.preventPaste) {
42943 e.preventDefault();
42944 return;
42945 }
42946 base.checkCombos(); // check pasted content
42947 }
42948 break;
42949 }
42950 })
42951 .bind('mouseup touchend '.split(' ').join(base.namespace + ' '), function () {
42952 base.last.virtual = true;
42953 base.saveCaret();
42954 });
42955
42956 // prevent keyboard event bubbling
42957 base.$keyboard.bind('mousedown click touchstart '.split(' ').join(base.namespace + ' '), function (e) {
42958 e.stopPropagation();
42959 if (!base.isCurrent()) {
42960 base.reveal();
42961 $(document).trigger('checkkeyboard' + base.namespace);
42962 }
42963 if (!o.noFocus && base.$preview) {
42964 base.$preview.focus();
42965 }
42966 });
42967
42968 // If preventing paste, block context menu (right click)
42969 if (o.preventPaste) {
42970 base.$preview.bind('contextmenu' + base.namespace, function (e) {
42971 e.preventDefault();
42972 });
42973 base.$el.bind('contextmenu' + base.namespace, function (e) {
42974 e.preventDefault();
42975 });
42976 }
42977
42978 };
42979
42980 base.bindKeys = function () {
42981 var kbcss = $keyboard.css;
42982 base.$allKeys = base.$keyboard.find('button.' + kbcss.keyButton)
42983 .unbind(base.namespace + ' ' + base.namespace + 'kb')
42984 // Change hover class and tooltip - moved this touchstart before option.keyBinding touchstart
42985 // to prevent mousewheel lag/duplication - Fixes #379 & #411
42986 .bind('mouseenter mouseleave touchstart '.split(' ').join(base.namespace + ' '), function (e) {
42987 if ((o.alwaysOpen || o.userClosed) && e.type !== 'mouseleave' && !base.isCurrent()) {
42988 base.reveal();
42989 if (!o.noFocus) {
42990 base.$preview.focus();
42991 }
42992 $keyboard.caret(base.$preview, base.last);
42993 }
42994 if (!base.isCurrent()) {
42995 return;
42996 }
42997 var $keys, txt,
42998 last = base.last,
42999 $this = $(this),
43000 type = e.type;
43001
43002 if (o.useWheel && base.wheel) {
43003 $keys = base.getLayers($this);
43004 txt = ($keys.length ? $keys.map(function () {
43005 return $(this).attr('data-value') || '';
43006 })
43007 .get() : '') || [$this.text()];
43008 last.wheel_$Keys = $keys;
43009 last.wheelLayers = txt;
43010 last.wheelIndex = $.inArray($this.attr('data-value'), txt);
43011 }
43012
43013 if ((type === 'mouseenter' || type === 'touchstart') && base.el.type !== 'password' &&
43014 !$this.hasClass(o.css.buttonDisabled)) {
43015 $this.addClass(o.css.buttonHover);
43016 if (o.useWheel && base.wheel) {
43017 $this.attr('title', function (i, t) {
43018 // show mouse wheel message
43019 return (base.wheel && t === '' && base.sets && txt.length > 1 && type !== 'touchstart') ?
43020 o.wheelMessage : t;
43021 });
43022 }
43023 }
43024 if (type === 'mouseleave') {
43025 // needed or IE flickers really bad
43026 $this.removeClass((base.el.type === 'password') ? '' : o.css.buttonHover);
43027 if (o.useWheel && base.wheel) {
43028 last.wheelIndex = 0;
43029 last.wheelLayers = [];
43030 last.wheel_$Keys = null;
43031 $this
43032 .attr('title', function (i, t) {
43033 return (t === o.wheelMessage) ? '' : t;
43034 })
43035 .html($this.attr('data-html')); // restore original button text
43036 }
43037 }
43038 })
43039 // keyBinding = 'mousedown touchstart' by default
43040 .bind(o.keyBinding.split(' ').join(base.namespace + ' ') + base.namespace + ' ' +
43041 $keyboard.events.kbRepeater, function (e) {
43042 e.preventDefault();
43043 // prevent errors when external triggers attempt to 'type' - see issue #158
43044 if (!base.$keyboard.is(':visible')) {
43045 return false;
43046 }
43047 var action, $keys,
43048 last = base.last,
43049 key = this,
43050 $key = $(key),
43051 // prevent mousedown & touchstart from both firing events at the same time - see #184
43052 timer = new Date().getTime();
43053
43054 if (o.useWheel && base.wheel) {
43055 // get keys from other layers/keysets (shift, alt, meta, etc) that line up by data-position
43056 $keys = last.wheel_$Keys;
43057 // target mousewheel selected key
43058 $key = $keys && last.wheelIndex > -1 ? $keys.eq(last.wheelIndex) : $key;
43059 }
43060 action = $key.attr('data-action');
43061 if (timer - (last.eventTime || 0) < o.preventDoubleEventTime) {
43062 return;
43063 }
43064 last.eventTime = timer;
43065 last.event = e;
43066 last.virtual = true;
43067 if (!o.noFocus) {
43068 base.$preview.focus();
43069 }
43070 last.$key = $key;
43071 last.key = $key.attr('data-value');
43072 last.keyPress = "";
43073 // Start caret in IE when not focused (happens with each virtual keyboard button click
43074 if (base.checkCaret) {
43075 $keyboard.caret(base.$preview, last);
43076 }
43077 if (/^meta/.test(action)) {
43078 action = 'meta';
43079 }
43080 // keyaction is added as a string, override original action & text
43081 if (action === last.key && typeof $keyboard.keyaction[action] === 'string') {
43082 last.key = action = $keyboard.keyaction[action];
43083 } else if (action in $keyboard.keyaction && $.isFunction($keyboard.keyaction[action])) {
43084 // stop processing if action returns false (close & cancel)
43085 if ($keyboard.keyaction[action](base, this, e) === false) {
43086 return false;
43087 }
43088 action = null; // prevent inserting action name
43089 }
43090 // stop processing if keyboard closed and keyaction did not return false - see #536
43091 if (!base.hasKeyboard()) {
43092 return false;
43093 }
43094 if (typeof action !== 'undefined' && action !== null) {
43095 last.key = $(this).hasClass(kbcss.keyAction) ? action : last.key;
43096 base.insertText(last.key);
43097 if (!base.capsLock && !o.stickyShift && !e.shiftKey) {
43098 base.shiftActive = false;
43099 base.showSet($key.attr('data-name'));
43100 }
43101 }
43102 // set caret if caret moved by action function; also, attempt to fix issue #131
43103 $keyboard.caret(base.$preview, last);
43104 base.checkCombos();
43105 e.type = $keyboard.events.kbChange;
43106 e.action = last.key;
43107 base.$el.trigger(e, [base, base.el]);
43108 last.preVal = '' + last.val;
43109 last.val = base.$preview.val();
43110
43111 if ($.isFunction(o.change)) {
43112 e.type = $keyboard.events.inputChange;
43113 o.change(e, base, base.el);
43114 // return false to prevent reopening keyboard if base.accept() was called
43115 return false;
43116 }
43117
43118 })
43119 // using 'kb' namespace for mouse repeat functionality to keep it separate
43120 // I need to trigger a 'repeater.keyboard' to make it work
43121 .bind('mouseup' + base.namespace + ' ' + 'mouseleave touchend touchmove touchcancel '.split(' ')
43122 .join(base.namespace + 'kb '), function (e) {
43123 base.last.virtual = true;
43124 var offset,
43125 $this = $(this);
43126 if (e.type === 'touchmove') {
43127 // if moving within the same key, don't stop repeating
43128 offset = $this.offset();
43129 offset.right = offset.left + $this.outerWidth();
43130 offset.bottom = offset.top + $this.outerHeight();
43131 if (e.originalEvent.touches[0].pageX >= offset.left &&
43132 e.originalEvent.touches[0].pageX < offset.right &&
43133 e.originalEvent.touches[0].pageY >= offset.top &&
43134 e.originalEvent.touches[0].pageY < offset.bottom) {
43135 return true;
43136 }
43137 } else if (/(mouseleave|touchend|touchcancel)/i.test(e.type)) {
43138 $this.removeClass(o.css.buttonHover); // needed for touch devices
43139 } else {
43140 if (!o.noFocus && base.isCurrent() && base.isVisible()) {
43141 base.$preview.focus();
43142 }
43143 if (base.checkCaret) {
43144 $keyboard.caret(base.$preview, base.last);
43145 }
43146 }
43147 base.mouseRepeat = [false, ''];
43148 clearTimeout(base.repeater); // make sure key repeat stops!
43149 if (o.acceptValid && o.autoAcceptOnValid) {
43150 if ($.isFunction(o.validate) && o.validate(base, base.$preview.val())) {
43151 base.$preview.blur();
43152 base.accept();
43153 }
43154 }
43155 return false;
43156 })
43157 // prevent form submits when keyboard is bound locally - issue #64
43158 .bind('click' + base.namespace, function () {
43159 return false;
43160 })
43161 // no mouse repeat for action keys (shift, ctrl, alt, meta, etc)
43162 .not('.' + kbcss.keyAction)
43163 // Allow mousewheel to scroll through other keysets of the same (non-action) key
43164 .bind('mousewheel' + base.namespace, function (e, delta) {
43165 if (o.useWheel && base.wheel) {
43166 // deltaY used by newer versions of mousewheel plugin
43167 delta = delta || e.deltaY;
43168 var n,
43169 txt = base.last.wheelLayers || [];
43170 if (txt.length > 1) {
43171 n = base.last.wheelIndex + (delta > 0 ? -1 : 1);
43172 if (n > txt.length - 1) {
43173 n = 0;
43174 }
43175 if (n < 0) {
43176 n = txt.length - 1;
43177 }
43178 } else {
43179 n = 0;
43180 }
43181 base.last.wheelIndex = n;
43182 $(this).html(txt[n]);
43183 return false;
43184 }
43185 })
43186 // mouse repeated action key exceptions
43187 .add('.' + kbcss.keyPrefix + ('tab bksp space enter'.split(' ')
43188 .join(',.' + kbcss.keyPrefix)), base.$keyboard)
43189 .bind('mousedown touchstart '.split(' ').join(base.namespace + 'kb '), function () {
43190 if (o.repeatRate !== 0) {
43191 var key = $(this);
43192 // save the key, make sure we are repeating the right one (fast typers)
43193 base.mouseRepeat = [true, key];
43194 setTimeout(function () {
43195 // don't repeat keys if it is disabled - see #431
43196 if (base && base.mouseRepeat[0] && base.mouseRepeat[1] === key && !key[0].disabled) {
43197 base.repeatKey(key);
43198 }
43199 }, o.repeatDelay);
43200 }
43201 return false;
43202 });
43203 };
43204
43205 // Insert text at caret/selection - thanks to Derek Wickwire for fixing this up!
43206 base.insertText = function (txt) {
43207 if (!base.$preview) { return; }
43208 if (typeof o.beforeInsert === 'function') {
43209 txt = o.beforeInsert(base.last.event, base, base.el, txt);
43210 }
43211 if (typeof txt === 'undefined' || txt === false) {
43212 base.last.key = '';
43213 return;
43214 }
43215 var bksp, t,
43216 isBksp = txt === '\b',
43217 // use base.$preview.val() instead of base.preview.value (val.length includes carriage returns in IE).
43218 val = base.$preview.val(),
43219 pos = $keyboard.caret(base.$preview),
43220 len = val.length; // save original content length
43221
43222 // silly IE caret hacks... it should work correctly, but navigating using arrow keys in a textarea
43223 // is still difficult
43224 // in IE, pos.end can be zero after input loses focus
43225 if (pos.end < pos.start) {
43226 pos.end = pos.start;
43227 }
43228 if (pos.start > len) {
43229 pos.end = pos.start = len;
43230 }
43231
43232 if (base.preview.nodeName === 'TEXTAREA') {
43233 // This makes sure the caret moves to the next line after clicking on enter (manual typing works fine)
43234 if ($keyboard.msie && val.substr(pos.start, 1) === '\n') {
43235 pos.start += 1;
43236 pos.end += 1;
43237 }
43238 }
43239
43240 if (txt === '{d}') {
43241 txt = '';
43242 t = pos.start;
43243 pos.end += 1;
43244 }
43245
43246 bksp = isBksp && pos.start === pos.end;
43247 txt = isBksp ? '' : txt;
43248 val = val.substr(0, pos.start - (bksp ? 1 : 0)) + txt + val.substr(pos.end);
43249 t = pos.start + (bksp ? -1 : txt.length);
43250
43251 base.$preview.val(val);
43252 base.saveCaret(t, t); // save caret in case of bksp
43253 base.setScroll();
43254 // see #506.. allow chaining of insertText
43255 return base;
43256 };
43257
43258 // check max length
43259 base.checkMaxLength = function () {
43260 if (!base.$preview) { return; }
43261 var start, caret,
43262 val = base.$preview.val();
43263 if (o.maxLength !== false && val.length > o.maxLength) {
43264 start = $keyboard.caret(base.$preview).start;
43265 caret = Math.min(start, o.maxLength);
43266
43267 // prevent inserting new characters when maxed #289
43268 if (!o.maxInsert) {
43269 val = base.last.val;
43270 caret = start - 1; // move caret back one
43271 }
43272
43273 base.$preview.val(val.substring(0, o.maxLength));
43274 // restore caret on change, otherwise it ends up at the end.
43275 base.saveCaret(caret, caret);
43276 }
43277 if (base.$decBtn.length) {
43278 base.checkDecimal();
43279 }
43280 // allow chaining
43281 return base;
43282 };
43283
43284 // mousedown repeater
43285 base.repeatKey = function (key) {
43286 key.trigger($keyboard.events.kbRepeater);
43287 if (base.mouseRepeat[0]) {
43288 base.repeater = setTimeout(function () {
43289 if (base){
43290 base.repeatKey(key);
43291 }
43292 }, base.repeatTime);
43293 }
43294 };
43295
43296 base.getKeySet = function () {
43297 var sets = [];
43298 if (base.altActive) {
43299 sets.push('alt');
43300 }
43301 if (base.shiftActive) {
43302 sets.push('shift');
43303 }
43304 if (base.metaActive) {
43305 // base.metaActive contains the string name of the
43306 // current meta keyset
43307 sets.push(base.metaActive);
43308 }
43309 return sets.length ? sets.join('+') : 'normal';
43310 };
43311
43312 // make it easier to switch keysets via API
43313 // showKeySet('shift+alt+meta1')
43314 base.showKeySet = function (str) {
43315 if (typeof str === 'string') {
43316 base.last.keyset = [base.shiftActive, base.altActive, base.metaActive];
43317 base.shiftActive = /shift/i.test(str);
43318 base.altActive = /alt/i.test(str);
43319 if (/\bmeta/.test(str)) {
43320 base.metaActive = true;
43321 base.showSet(str.match(/\bmeta[\w-]+/i)[0]);
43322 } else {
43323 base.metaActive = false;
43324 base.showSet();
43325 }
43326 } else {
43327 base.showSet(str);
43328 }
43329 // allow chaining
43330 return base;
43331 };
43332
43333 base.showSet = function (name) {
43334 if (!base.hasKeyboard()) { return; }
43335 o = base.options; // refresh options
43336 var kbcss = $keyboard.css,
43337 prefix = '.' + kbcss.keyPrefix,
43338 active = o.css.buttonActive,
43339 key = '',
43340 toShow = (base.shiftActive ? 1 : 0) + (base.altActive ? 2 : 0);
43341 if (!base.shiftActive) {
43342 base.capsLock = false;
43343 }
43344 // check meta key set
43345 if (base.metaActive) {
43346 // remove "-shift" and "-alt" from meta name if it exists
43347 if (base.shiftActive) {
43348 name = (name || "").replace("-shift", "");
43349 }
43350 if (base.altActive) {
43351 name = (name || "").replace("-alt", "");
43352 }
43353 // the name attribute contains the meta set name 'meta99'
43354 key = (/^meta/i.test(name)) ? name : '';
43355 // save active meta keyset name
43356 if (key === '') {
43357 key = (base.metaActive === true) ? '' : base.metaActive;
43358 } else {
43359 base.metaActive = key;
43360 }
43361 // if meta keyset doesn't have a shift or alt keyset, then show just the meta key set
43362 if ((!o.stickyShift && base.last.keyset[2] !== base.metaActive) ||
43363 ((base.shiftActive || base.altActive) &&
43364 !base.$keyboard.find('.' + kbcss.keySet + '-' + key + base.rows[toShow]).length)) {
43365 base.shiftActive = base.altActive = false;
43366 }
43367 } else if (!o.stickyShift && base.last.keyset[2] !== base.metaActive && base.shiftActive) {
43368 // switching from meta key set back to default, reset shift & alt if using stickyShift
43369 base.shiftActive = base.altActive = false;
43370 }
43371 toShow = (base.shiftActive ? 1 : 0) + (base.altActive ? 2 : 0);
43372 key = (toShow === 0 && !base.metaActive) ? '-normal' : (key === '') ? '' : '-' + key;
43373 if (!base.$keyboard.find('.' + kbcss.keySet + key + base.rows[toShow]).length) {
43374 // keyset doesn't exist, so restore last keyset settings
43375 base.shiftActive = base.last.keyset[0];
43376 base.altActive = base.last.keyset[1];
43377 base.metaActive = base.last.keyset[2];
43378 return;
43379 }
43380 base.$keyboard
43381 .find(prefix + 'alt,' + prefix + 'shift,.' + kbcss.keyAction + '[class*=meta]')
43382 .removeClass(active)
43383 .end()
43384 .find(prefix + 'alt')
43385 .toggleClass(active, base.altActive)
43386 .end()
43387 .find(prefix + 'shift')
43388 .toggleClass(active, base.shiftActive)
43389 .end()
43390 .find(prefix + 'lock')
43391 .toggleClass(active, base.capsLock)
43392 .end()
43393 .find('.' + kbcss.keySet)
43394 .hide()
43395 .end()
43396 .find('.' + (kbcss.keyAction + prefix + key).replace("--", "-"))
43397 .addClass(active);
43398
43399 // show keyset using inline-block ( extender layout will then line up )
43400 base.$keyboard.find('.' + kbcss.keySet + key + base.rows[toShow])[0].style.display = 'inline-block';
43401 if (base.metaActive) {
43402 base.$keyboard.find(prefix + base.metaActive)
43403 // base.metaActive contains the string "meta#" or false
43404 // without the !== false, jQuery UI tries to transition the classes
43405 .toggleClass(active, base.metaActive !== false);
43406 }
43407 base.last.keyset = [base.shiftActive, base.altActive, base.metaActive];
43408 base.$el.trigger($keyboard.events.kbKeysetChange, [base, base.el]);
43409 if (o.reposition) {
43410 base.reposition();
43411 }
43412 };
43413
43414 // check for key combos (dead keys)
43415 base.checkCombos = function () {
43416 // return val for close function
43417 if ( !(
43418 base.isVisible() || (
43419 base.hasKeyboard() &&
43420 base.$keyboard.hasClass( $keyboard.css.hasFocus )
43421 )
43422 ) ) {
43423 return ( base.$preview || base.$el ).val();
43424 }
43425 var r, t, t2,
43426 // use base.$preview.val() instead of base.preview.value (val.length includes carriage returns in IE).
43427 val = base.$preview.val(),
43428 pos = $keyboard.caret(base.$preview),
43429 layout = $keyboard.builtLayouts[base.layout],
43430 len = val.length; // save original content length
43431 // return if val is empty; fixes #352
43432 if (val === '') {
43433 // check valid on empty string - see #429
43434 if (o.acceptValid) {
43435 base.checkValid();
43436 }
43437 return val;
43438 }
43439
43440 // silly IE caret hacks... it should work correctly, but navigating using arrow keys in a textarea
43441 // is still difficult
43442 // in IE, pos.end can be zero after input loses focus
43443 if (pos.end < pos.start) {
43444 pos.end = pos.start;
43445 }
43446 if (pos.start > len) {
43447 pos.end = pos.start = len;
43448 }
43449 // This makes sure the caret moves to the next line after clicking on enter (manual typing works fine)
43450 if ($keyboard.msie && val.substr(pos.start, 1) === '\n') {
43451 pos.start += 1;
43452 pos.end += 1;
43453 }
43454
43455 if (o.useCombos) {
43456 // keep 'a' and 'o' in the regex for ae and oe ligature (æ,œ)
43457 // thanks to KennyTM: http://stackoverflow.com/q/4275077
43458 // original regex /([`\'~\^\"ao])([a-z])/mig moved to $.keyboard.comboRegex
43459 if ($keyboard.msie) {
43460 // old IE may not have the caret positioned correctly, so just check the whole thing
43461 val = val.replace(base.regex, function (s, accent, letter) {
43462 return (o.combos.hasOwnProperty(accent)) ? o.combos[accent][letter] || s : s;
43463 });
43464 // prevent combo replace error, in case the keyboard closes - see issue #116
43465 } else if (base.$preview.length) {
43466 // Modern browsers - check for combos from last two characters left of the caret
43467 t = pos.start - (pos.start - 2 >= 0 ? 2 : 0);
43468 // target last two characters
43469 $keyboard.caret(base.$preview, t, pos.end);
43470 // do combo replace
43471 t2 = ($keyboard.caret(base.$preview).text || '').replace(base.regex, function (s, accent, letter) {
43472 return (o.combos.hasOwnProperty(accent)) ? o.combos[accent][letter] || s : s;
43473 });
43474 // add combo back
43475 t = $keyboard.caret(base.$preview);
43476 // prevent error if caret doesn't return a function
43477 if (t && t.replaceStr) {
43478 base.$preview.val(t.replaceStr(t2));
43479 }
43480 val = base.$preview.val();
43481 }
43482 }
43483
43484 // check input restrictions - in case content was pasted
43485 if (o.restrictInput && val !== '') {
43486 t = layout.acceptedKeys.length;
43487
43488 r = layout.acceptedKeysRegex;
43489 if (!r) {
43490 t2 = $.map(layout.acceptedKeys, function (v) {
43491 // escape any special characters
43492 return v.replace(base.escapeRegex, '\\$&');
43493 });
43494 r = layout.acceptedKeysRegex = new RegExp('(' + t2.join('|') + ')', 'g');
43495 }
43496
43497 // only save matching keys
43498 t2 = val.match(r);
43499 if (t2) {
43500 val = t2.join('');
43501 } else {
43502 // no valid characters
43503 val = '';
43504 len = 0;
43505 }
43506 }
43507
43508 // save changes, then reposition caret
43509 pos.start += val.length - len;
43510 pos.end += val.length - len;
43511 base.$preview.val(val);
43512 base.saveCaret(pos.start, pos.end);
43513 // set scroll to keep caret in view
43514 base.setScroll();
43515
43516 base.checkMaxLength();
43517
43518 if (o.acceptValid) {
43519 base.checkValid();
43520 }
43521
43522 return val; // return text, used for keyboard closing section
43523 };
43524
43525 // Toggle accept button classes, if validating
43526 base.checkValid = function () {
43527 var kbcss = $keyboard.css,
43528 $accept = base.$keyboard.find('.' + kbcss.keyPrefix + 'accept'),
43529 valid = true;
43530 if ($.isFunction(o.validate)) {
43531 valid = o.validate(base, base.$preview.val(), false);
43532 }
43533 // toggle accept button classes; defined in the css
43534 $accept
43535 .toggleClass(kbcss.inputInvalid, !valid)
43536 .toggleClass(kbcss.inputValid, valid)
43537 // update title to indicate that the entry is valid or invalid
43538 .attr('title', $accept.attr('data-title') + ' (' + o.display[valid ? 'valid' : 'invalid'] + ')');
43539 };
43540
43541 // Decimal button for num pad - only allow one (not used by default)
43542 base.checkDecimal = function () {
43543 // Check US '.' or European ',' format
43544 if ((base.decimal && /\./g.test(base.preview.value)) ||
43545 (!base.decimal && /\,/g.test(base.preview.value))) {
43546 base.$decBtn
43547 .attr({
43548 'disabled': 'disabled',
43549 'aria-disabled': 'true'
43550 })
43551 .removeClass(o.css.buttonHover)
43552 .addClass(o.css.buttonDisabled);
43553 } else {
43554 base.$decBtn
43555 .removeAttr('disabled')
43556 .attr({
43557 'aria-disabled': 'false'
43558 })
43559 .addClass(o.css.buttonDefault)
43560 .removeClass(o.css.buttonDisabled);
43561 }
43562 };
43563
43564 // get other layer values for a specific key
43565 base.getLayers = function ($el) {
43566 var kbcss = $keyboard.css,
43567 key = $el.attr('data-pos'),
43568 $keys = $el.closest('.' + kbcss.keyboard)
43569 .find('button[data-pos="' + key + '"]');
43570 return $keys.filter(function () {
43571 return $(this)
43572 .find('.' + kbcss.keyText)
43573 .text() !== '';
43574 })
43575 .add($el);
43576 };
43577
43578 // Go to next or prev inputs
43579 // goToNext = true, then go to next input; if false go to prev
43580 // isAccepted is from autoAccept option or true if user presses shift+enter
43581 base.switchInput = function (goToNext, isAccepted) {
43582 if ($.isFunction(o.switchInput)) {
43583 o.switchInput(base, goToNext, isAccepted);
43584 } else {
43585 // base.$keyboard may be an empty array - see #275 (apod42)
43586 if (base.$keyboard.length) {
43587 base.$keyboard.hide();
43588 }
43589 var kb,
43590 stopped = false,
43591 all = $('button, input, select, textarea, a')
43592 .filter(':visible')
43593 .not(':disabled'),
43594 indx = all.index(base.$el) + (goToNext ? 1 : -1);
43595 if (base.$keyboard.length) {
43596 base.$keyboard.show();
43597 }
43598 if (indx > all.length - 1) {
43599 stopped = o.stopAtEnd;
43600 indx = 0; // go to first input
43601 }
43602 if (indx < 0) {
43603 stopped = o.stopAtEnd;
43604 indx = all.length - 1; // stop or go to last
43605 }
43606 if (!stopped) {
43607 isAccepted = base.close(isAccepted);
43608 if (!isAccepted) {
43609 return;
43610 }
43611 kb = all.eq(indx).data('keyboard');
43612 if (kb && kb.options.openOn.length) {
43613 kb.focusOn();
43614 } else {
43615 all.eq(indx).focus();
43616 }
43617 }
43618 }
43619 return false;
43620 };
43621
43622 // Close the keyboard, if visible. Pass a status of true, if the content was accepted
43623 // (for the event trigger).
43624 base.close = function (accepted) {
43625 if (base.isOpen && base.$keyboard.length) {
43626 clearTimeout(base.throttled);
43627 var kbcss = $keyboard.css,
43628 kbevents = $keyboard.events,
43629 val = (accepted) ? base.checkCombos() : base.originalContent;
43630 // validate input if accepted
43631 if (accepted && $.isFunction(o.validate) && !o.validate(base, val, true)) {
43632 val = base.originalContent;
43633 accepted = false;
43634 if (o.cancelClose) {
43635 return;
43636 }
43637 }
43638 base.isCurrent(false);
43639 base.isOpen = o.alwaysOpen || o.userClosed;
43640 // update value for always open keyboards
43641 base.$preview.val(val);
43642 base.$el
43643 .removeClass(kbcss.isCurrent + ' ' + kbcss.inputAutoAccepted)
43644 // add 'ui-keyboard-autoaccepted' to inputs - see issue #66
43645 .addClass((accepted || false) ? accepted === true ? '' : kbcss.inputAutoAccepted : '')
43646 .val(val)
43647 // trigger default change event - see issue #146
43648 .trigger(kbevents.inputChange);
43649 // don't trigger an empty event - see issue #463
43650 if (!o.alwaysOpen) {
43651 // don't trigger beforeClose if keyboard is always open
43652 base.$el.trigger(kbevents.kbBeforeClose, [base, base.el, (accepted || false)]);
43653 }
43654 // save caret after updating value (fixes userClosed issue with changing focus)
43655 $keyboard.caret(base.$preview, base.last);
43656
43657 base.$el
43658 .trigger(((accepted || false) ? kbevents.inputAccepted : kbevents.inputCanceled), [base, base.el])
43659 .trigger((o.alwaysOpen) ? kbevents.kbInactive : kbevents.kbHidden, [base, base.el])
43660 .blur();
43661
43662 // base is undefined if keyboard was destroyed - fixes #358
43663 if (base) {
43664 // add close event time
43665 base.last.eventTime = new Date().getTime();
43666 if (!(o.alwaysOpen || o.userClosed && accepted === 'true') && base.$keyboard.length) {
43667 // free up memory
43668 base.removeKeyboard();
43669 // rebind input focus - delayed to fix IE issue #72
43670 base.timer = setTimeout(function () {
43671 if (base) {
43672 base.bindFocus();
43673 }
43674 }, 500);
43675 }
43676 if (!base.watermark && base.el.value === '' && base.inPlaceholder !== '') {
43677 base.$el
43678 .addClass(kbcss.placeholder)
43679 .val(base.inPlaceholder);
43680 }
43681 }
43682 }
43683 return !!accepted;
43684 };
43685
43686 base.accept = function () {
43687 return base.close(true);
43688 };
43689
43690 base.checkClose = function (e) {
43691 if (base.opening) {
43692 return;
43693 }
43694 base.escClose(e);
43695 var kbcss = $.keyboard.css,
43696 $target = $(e.target);
43697 // needed for IE to allow switching between keyboards smoothly
43698 if ($target.hasClass(kbcss.input)) {
43699 var kb = $target.data('keyboard');
43700 // only trigger on self
43701 if (
43702 kb !== base &&
43703 !kb.$el.hasClass(kbcss.isCurrent) &&
43704 kb.options.openOn &&
43705 e.type === o.openOn
43706 ) {
43707 kb.focusOn();
43708 }
43709 }
43710 };
43711
43712 base.escClose = function (e) {
43713 if (e && e.type === 'keyup') {
43714 return (e.which === $keyboard.keyCodes.escape && !o.ignoreEsc) ?
43715 base.close(o.autoAccept && o.autoAcceptOnEsc ? 'true' : false) :
43716 '';
43717 }
43718 // keep keyboard open if alwaysOpen or stayOpen is true - fixes mutliple always open keyboards or
43719 // single stay open keyboard
43720 if (!base.isOpen) {
43721 return;
43722 }
43723 // ignore autoaccept if using escape - good idea?
43724 if (!base.isCurrent() && base.isOpen || base.isOpen && e.target !== base.el) {
43725 // don't close if stayOpen is set; but close if a different keyboard is being opened
43726 if ((o.stayOpen || o.userClosed) && !$(e.target).hasClass($keyboard.css.input)) {
43727 return;
43728 }
43729 // stop propogation in IE - an input getting focus doesn't open a keyboard if one is already open
43730 if ($keyboard.allie) {
43731 e.preventDefault();
43732 }
43733 if (o.closeByClickEvent) {
43734 // only close the keyboard if the user is clicking on an input or if he causes a click
43735 // event (touchstart/mousedown will not force the close with this setting)
43736 var name = e.target.nodeName.toLowerCase();
43737 if (name === 'input' || name === 'textarea' || e.type === 'click') {
43738 base.close(o.autoAccept ? 'true' : false);
43739 }
43740 } else {
43741 // send 'true' instead of a true (boolean), the input won't get a 'ui-keyboard-autoaccepted'
43742 // class name - see issue #66
43743 base.close(o.autoAccept ? 'true' : false);
43744 }
43745 }
43746 };
43747
43748 // Build default button
43749 base.keyBtn = $('<button />')
43750 .attr({
43751 'role': 'button',
43752 'type': 'button',
43753 'aria-disabled': 'false',
43754 'tabindex': '-1'
43755 })
43756 .addClass($keyboard.css.keyButton);
43757
43758 // convert key names into a class name
43759 base.processName = function (name) {
43760 var index, n,
43761 process = (name || '').replace(/[^a-z0-9-_]/gi, ''),
43762 len = process.length,
43763 newName = [];
43764 if (len > 1 && name === process) {
43765 // return name if basic text
43766 return name;
43767 }
43768 // return character code sequence
43769 len = name.length;
43770 if (len) {
43771 for (index = 0; index < len; index++) {
43772 n = name[index];
43773 // keep '-' and '_'... so for dash, we get two dashes in a row
43774 newName.push(/[a-z0-9-_]/i.test(n) ?
43775 (/[-_]/.test(n) && index !== 0 ? '' : n) :
43776 (index === 0 ? '' : '-') + n.charCodeAt(0)
43777 );
43778 }
43779 return newName.join('');
43780 } else {
43781 return name;
43782 }
43783 };
43784
43785 base.processKeys = function (name) {
43786 var tmp,
43787 parts = name.split(':'),
43788 data = {
43789 name: null,
43790 map: '',
43791 title: ''
43792 };
43793 /* map defined keys
43794 format 'key(A):Label_for_key_(ignore_parentheses_here)'
43795 'key' = key that is seen (can any character(s); but it might need to be escaped using '\'
43796 or entered as unicode '\u####'
43797 '(A)' = the actual key on the real keyboard to remap
43798 ':Label_for_key' ends up in the title/tooltip
43799 Examples:
43800 '\u0391(A):alpha', 'x(y):this_(might)_cause_problems
43801 or edge cases of ':(x)', 'x(:)', 'x(()' or 'x())'
43802 Enhancement (if I can get alt keys to work):
43803 A mapped key will include the mod key, e.g. 'x(alt-x)' or 'x(alt-shift-x)'
43804 */
43805 if (/\(.+\)/.test(parts[0]) || /^:\(.+\)/.test(name) || /\([(:)]\)/.test(name)) {
43806 // edge cases 'x(:)', 'x(()' or 'x())'
43807 if (/\([(:)]\)/.test(name)) {
43808 tmp = parts[0].match(/([^(]+)\((.+)\)/);
43809 if (tmp && tmp.length) {
43810 data.name = tmp[1];
43811 data.map = tmp[2];
43812 data.title = parts.length > 1 ? parts.slice(1).join(':') : '';
43813 } else {
43814 // edge cases 'x(:)', ':(x)' or ':(:)'
43815 data.name = name.match(/([^(]+)/)[0];
43816 if (data.name === ':') {
43817 // ':(:):test' => parts = [ '', '(', ')', 'title' ] need to slice 1
43818 parts = parts.slice(1);
43819 }
43820 if (tmp === null) {
43821 // 'x(:):test' => parts = [ 'x(', ')', 'title' ] need to slice 2
43822 data.map = ':';
43823 parts = parts.slice(2);
43824 }
43825 data.title = parts.length ? parts.join(':') : '';
43826 }
43827 } else {
43828 // example: \u0391(A):alpha; extract 'A' from '(A)'
43829 data.map = name.match(/\(([^()]+?)\)/)[1];
43830 // remove '(A)', left with '\u0391:alpha'
43831 name = name.replace(/\(([^()]+)\)/, '');
43832 tmp = name.split(':');
43833 // get '\u0391' from '\u0391:alpha'
43834 if (tmp[0] === '') {
43835 data.name = ':';
43836 parts = parts.slice(1);
43837 } else {
43838 data.name = tmp[0];
43839 }
43840 data.title = parts.length > 1 ? parts.slice(1).join(':') : '';
43841 }
43842 } else {
43843 // find key label
43844 // corner case of '::;' reduced to ':;', split as ['', ';']
43845 if (name !== '' && parts[0] === '') {
43846 data.name = ':';
43847 parts = parts.slice(1);
43848 } else {
43849 data.name = parts[0];
43850 }
43851 data.title = parts.length > 1 ? parts.slice(1).join(':') : '';
43852 }
43853 data.title = $.trim(data.title).replace(/_/g, ' ');
43854 return data;
43855 };
43856
43857 // Add key function
43858 // keyName = the name of the function called in $.keyboard.keyaction when the button is clicked
43859 // name = name added to key, or cross-referenced in the display options
43860 // base.temp[0] = keyset to attach the new button
43861 // regKey = true when it is not an action key
43862 base.addKey = function (keyName, action, regKey) {
43863 var keyClass, tmp, keys,
43864 data = {},
43865 txt = base.processKeys(regKey ? keyName : action),
43866 kbcss = $keyboard.css;
43867
43868 if (!regKey && o.display[txt.name]) {
43869 keys = base.processKeys(o.display[txt.name]);
43870 // action contained in "keyName" (e.g. keyName = "accept",
43871 // action = "a" (use checkmark instead of text))
43872 keys.action = base.processKeys(keyName).name;
43873 } else {
43874 // when regKey is true, keyName is the same as action
43875 keys = txt;
43876 keys.action = txt.name;
43877 }
43878
43879 data.name = base.processName(txt.name);
43880
43881 if (keys.map !== '') {
43882 $keyboard.builtLayouts[base.layout].mappedKeys[keys.map] = keys.name;
43883 $keyboard.builtLayouts[base.layout].acceptedKeys.push(keys.name);
43884 } else if (regKey) {
43885 $keyboard.builtLayouts[base.layout].acceptedKeys.push(keys.name);
43886 }
43887
43888 if (regKey) {
43889 keyClass = data.name === '' ? '' : kbcss.keyPrefix + data.name;
43890 } else {
43891 // Action keys will have the 'ui-keyboard-actionkey' class
43892 keyClass = kbcss.keyAction + ' ' + kbcss.keyPrefix + keys.action;
43893 }
43894 // '\u2190'.length = 1 because the unicode is converted, so if more than one character,
43895 // add the wide class
43896 keyClass += (keys.name.length > 2 ? ' ' + kbcss.keyWide : '') + ' ' + o.css.buttonDefault;
43897
43898 data.html = '<span class="' + kbcss.keyText + '">' +
43899 // this prevents HTML from being added to the key
43900 keys.name.replace(/[\u00A0-\u9999]/gim, function (i) {
43901 return '&#' + i.charCodeAt(0) + ';';
43902 }) +
43903 '</span>';
43904
43905 data.$key = base.keyBtn
43906 .clone()
43907 .attr({
43908 'data-value': regKey ? keys.name : keys.action, // value
43909 'data-name': keys.action,
43910 'data-pos': base.temp[1] + ',' + base.temp[2],
43911 'data-action': keys.action,
43912 'data-html': data.html
43913 })
43914 // add 'ui-keyboard-' + data.name for all keys
43915 // (e.g. 'Bksp' will have 'ui-keyboard-bskp' class)
43916 // any non-alphanumeric characters will be replaced with
43917 // their decimal unicode value
43918 // (e.g. '~' is a regular key, class = 'ui-keyboard-126'
43919 // (126 is the unicode decimal value - same as &#126;)
43920 // See https://en.wikipedia.org/wiki/List_of_Unicode_characters#Control_codes
43921 .addClass(keyClass)
43922 .html(data.html)
43923 .appendTo(base.temp[0]);
43924
43925 if (keys.map) {
43926 data.$key.attr('data-mapped', keys.map);
43927 }
43928 if (keys.title || txt.title) {
43929 data.$key.attr({
43930 'data-title': txt.title || keys.title, // used to allow adding content to title
43931 'title': txt.title || keys.title
43932 });
43933 }
43934
43935 if (typeof o.buildKey === 'function') {
43936 data = o.buildKey(base, data);
43937 // copy html back to attributes
43938 tmp = data.$key.html();
43939 data.$key.attr('data-html', tmp);
43940 }
43941 return data.$key;
43942 };
43943
43944 base.customHash = function (layout) {
43945 /*jshint bitwise:false */
43946 var i, array, hash, character, len,
43947 arrays = [],
43948 merged = [];
43949 // pass layout to allow for testing
43950 layout = typeof layout === 'undefined' ? o.customLayout : layout;
43951 // get all layout arrays
43952 for (array in layout) {
43953 if (layout.hasOwnProperty(array)) {
43954 arrays.push(layout[array]);
43955 }
43956 }
43957 // flatten array
43958 merged = merged.concat.apply(merged, arrays).join(' ');
43959 // produce hash name - http://stackoverflow.com/a/7616484/145346
43960 hash = 0;
43961 len = merged.length;
43962 if (len === 0) {
43963 return hash;
43964 }
43965 for (i = 0; i < len; i++) {
43966 character = merged.charCodeAt(i);
43967 hash = ((hash << 5) - hash) + character;
43968 hash = hash & hash; // Convert to 32bit integer
43969 }
43970 return hash;
43971 };
43972
43973 base.buildKeyboard = function (name, internal) {
43974 // o.display is empty when this is called from the scramble extension (when alwaysOpen:true)
43975 if ($.isEmptyObject(o.display)) {
43976 // set keyboard language
43977 base.updateLanguage();
43978 }
43979 var row, $row, currentSet,
43980 kbcss = $keyboard.css,
43981 sets = 0,
43982 layout = $keyboard.builtLayouts[name || base.layout || o.layout] = {
43983 mappedKeys: {},
43984 acceptedKeys: []
43985 },
43986 acceptedKeys = layout.acceptedKeys = o.restrictInclude ?
43987 ('' + o.restrictInclude).split(/\s+/) || [] :
43988 [],
43989 // using $layout temporarily to hold keyboard popup classnames
43990 $layout = kbcss.keyboard + ' ' + o.css.popup + ' ' + o.css.container +
43991 (o.alwaysOpen || o.userClosed ? ' ' + kbcss.alwaysOpen : ''),
43992
43993 container = $('<div />')
43994 .addClass($layout)
43995 .attr({
43996 'role': 'textbox'
43997 })
43998 .hide();
43999 // verify layout or setup custom keyboard
44000 if ((internal && o.layout === 'custom') || !$keyboard.layouts.hasOwnProperty(o.layout)) {
44001 o.layout = 'custom';
44002 $layout = $keyboard.layouts.custom = o.customLayout || {
44003 'normal': ['{cancel}']
44004 };
44005 } else {
44006 $layout = $keyboard.layouts[internal ? o.layout : name || base.layout || o.layout];
44007 }
44008
44009 // Main keyboard building loop
44010 $.each($layout, function (set, keySet) {
44011 // skip layout name & lang settings
44012 if (set !== '' && !/^(name|lang|rtl)$/i.test(set)) {
44013 // keep backwards compatibility for change from default to normal naming
44014 if (set === 'default') {
44015 set = 'normal';
44016 }
44017 sets++;
44018 $row = $('<div />')
44019 .attr('name', set) // added for typing extension
44020 .addClass(kbcss.keySet + ' ' + kbcss.keySet + '-' + set)
44021 .appendTo(container)
44022 .toggle(set === 'normal');
44023
44024 for (row = 0; row < keySet.length; row++) {
44025 // remove extra spaces before spliting (regex probably could be improved)
44026 currentSet = $.trim(keySet[row]).replace(/\{(\.?)[\s+]?:[\s+]?(\.?)\}/g, '{$1:$2}');
44027 base.buildRow($row, row, currentSet.split(/\s+/), acceptedKeys);
44028 $row.find('.' + kbcss.keyButton + ',.' + kbcss.keySpacer)
44029 .filter(':last')
44030 .after('<br class="' + kbcss.endRow + '"/>');
44031 }
44032 }
44033 });
44034
44035 if (sets > 1) {
44036 base.sets = true;
44037 }
44038 layout.hasMappedKeys = !($.isEmptyObject(layout.mappedKeys));
44039 layout.$keyboard = container;
44040 return container;
44041 };
44042
44043 base.buildRow = function ($row, row, keys, acceptedKeys) {
44044 var t, txt, key, isAction, action, margin,
44045 kbcss = $keyboard.css;
44046 for (key = 0; key < keys.length; key++) {
44047 // used by addKey function
44048 base.temp = [$row, row, key];
44049 isAction = false;
44050
44051 // ignore empty keys
44052 if (keys[key].length === 0) {
44053 continue;
44054 }
44055
44056 // process here if it's an action key
44057 if (/^\{\S+\}$/.test(keys[key])) {
44058 action = keys[key].match(/^\{(\S+)\}$/)[1];
44059 // add active class if there are double exclamation points in the name
44060 if (/\!\!/.test(action)) {
44061 action = action.replace('!!', '');
44062 isAction = true;
44063 }
44064
44065 // add empty space
44066 if (/^sp:((\d+)?([\.|,]\d+)?)(em|px)?$/i.test(action)) {
44067 // not perfect globalization, but allows you to use {sp:1,1em}, {sp:1.2em} or {sp:15px}
44068 margin = parseFloat(action
44069 .replace(/,/, '.')
44070 .match(/^sp:((\d+)?([\.|,]\d+)?)(em|px)?$/i)[1] || 0
44071 );
44072 $('<span class="' + kbcss.keyText + '"></span>')
44073 // previously {sp:1} would add 1em margin to each side of a 0 width span
44074 // now Firefox doesn't seem to render 0px dimensions, so now we set the
44075 // 1em margin x 2 for the width
44076 .width((action.match(/px/i) ? margin + 'px' : (margin * 2) + 'em'))
44077 .addClass(kbcss.keySpacer)
44078 .appendTo($row);
44079 }
44080
44081 // add empty button
44082 if (/^empty(:((\d+)?([\.|,]\d+)?)(em|px)?)?$/i.test(action)) {
44083 margin = (/:/.test(action)) ? parseFloat(action
44084 .replace(/,/, '.')
44085 .match(/^empty:((\d+)?([\.|,]\d+)?)(em|px)?$/i)[1] || 0
44086 ) : '';
44087 base
44088 .addKey('', ' ', true)
44089 .addClass(o.css.buttonDisabled + ' ' + o.css.buttonEmpty)
44090 .attr('aria-disabled', true)
44091 .width(margin ? (action.match('px') ? margin + 'px' : (margin * 2) + 'em') : '');
44092 continue;
44093 }
44094
44095 // meta keys
44096 if (/^meta[\w-]+\:?(\w+)?/i.test(action)) {
44097 base
44098 .addKey(action.split(':')[0], action)
44099 .addClass(kbcss.keyHasActive);
44100 continue;
44101 }
44102
44103 // switch needed for action keys with multiple names/shortcuts or
44104 // default will catch all others
44105 txt = action.split(':');
44106 switch (txt[0].toLowerCase()) {
44107
44108 case 'a':
44109 case 'accept':
44110 base
44111 .addKey('accept', action)
44112 .addClass(o.css.buttonAction + ' ' + kbcss.keyAction);
44113 break;
44114
44115 case 'alt':
44116 case 'altgr':
44117 base
44118 .addKey('alt', action)
44119 .addClass(kbcss.keyHasActive);
44120 break;
44121
44122 case 'b':
44123 case 'bksp':
44124 base.addKey('bksp', action);
44125 break;
44126
44127 case 'c':
44128 case 'cancel':
44129 base
44130 .addKey('cancel', action)
44131 .addClass(o.css.buttonAction + ' ' + kbcss.keyAction);
44132 break;
44133
44134 // toggle combo/diacritic key
44135 /*jshint -W083 */
44136 case 'combo':
44137 base
44138 .addKey('combo', action)
44139 .addClass(kbcss.keyHasActive)
44140 .attr('title', function (indx, title) {
44141 // add combo key state to title
44142 return title + ' ' + o.display[o.useCombos ? 'active' : 'disabled'];
44143 })
44144 .toggleClass(o.css.buttonActive, o.useCombos);
44145 break;
44146
44147 // Decimal - unique decimal point (num pad layout)
44148 case 'dec':
44149 acceptedKeys.push((base.decimal) ? '.' : ',');
44150 base.addKey('dec', action);
44151 break;
44152
44153 case 'e':
44154 case 'enter':
44155 base
44156 .addKey('enter', action)
44157 .addClass(o.css.buttonAction + ' ' + kbcss.keyAction);
44158 break;
44159
44160 case 'lock':
44161 base
44162 .addKey('lock', action)
44163 .addClass(kbcss.keyHasActive);
44164 break;
44165
44166 case 's':
44167 case 'shift':
44168 base
44169 .addKey('shift', action)
44170 .addClass(kbcss.keyHasActive);
44171 break;
44172
44173 // Change sign (for num pad layout)
44174 case 'sign':
44175 acceptedKeys.push('-');
44176 base.addKey('sign', action);
44177 break;
44178
44179 case 'space':
44180 acceptedKeys.push(' ');
44181 base.addKey('space', action);
44182 break;
44183
44184 case 't':
44185 case 'tab':
44186 base.addKey('tab', action);
44187 break;
44188
44189 default:
44190 if ($keyboard.keyaction.hasOwnProperty(txt[0])) {
44191 base
44192 .addKey(txt[0], action)
44193 .toggleClass(o.css.buttonAction + ' ' + kbcss.keyAction, isAction);
44194 }
44195
44196 }
44197
44198 } else {
44199
44200 // regular button (not an action key)
44201 t = keys[key];
44202 base.addKey(t, t, true);
44203 }
44204 }
44205 };
44206
44207 base.removeBindings = function (namespace) {
44208 $(document).unbind(namespace);
44209 if (base.el.ownerDocument !== document) {
44210 $(base.el.ownerDocument).unbind(namespace);
44211 }
44212 $(window).unbind(namespace);
44213 base.$el.unbind(namespace);
44214 };
44215
44216 base.removeKeyboard = function () {
44217 base.$allKeys = [];
44218 base.$decBtn = [];
44219 // base.$preview === base.$el when o.usePreview is false - fixes #442
44220 if (o.usePreview) {
44221 base.$preview.removeData('keyboard');
44222 }
44223 base.preview = null;
44224 base.$preview = null;
44225 base.$previewCopy = null;
44226 base.$keyboard.removeData('keyboard');
44227 base.$keyboard.remove();
44228 base.$keyboard = [];
44229 base.isOpen = false;
44230 base.isCurrent(false);
44231 };
44232
44233 base.destroy = function (callback) {
44234 var index,
44235 kbcss = $keyboard.css,
44236 len = base.extensionNamespace.length,
44237 tmp = [
44238 kbcss.input,
44239 kbcss.locked,
44240 kbcss.placeholder,
44241 kbcss.noKeyboard,
44242 kbcss.alwaysOpen,
44243 o.css.input,
44244 kbcss.isCurrent
44245 ].join(' ');
44246 clearTimeout(base.timer);
44247 clearTimeout(base.timer2);
44248 if (base.$keyboard.length) {
44249 base.removeKeyboard();
44250 }
44251 base.removeBindings(base.namespace);
44252 base.removeBindings(base.namespace + 'callbacks');
44253 for (index = 0; index < len; index++) {
44254 base.removeBindings(base.extensionNamespace[index]);
44255 }
44256 base.el.active = false;
44257
44258 base.$el
44259 .removeClass(tmp)
44260 .removeAttr('aria-haspopup')
44261 .removeAttr('role')
44262 .removeData('keyboard');
44263 base = null;
44264
44265 if (typeof callback === 'function') {
44266 callback();
44267 }
44268 };
44269
44270 // Run initializer
44271 base.init();
44272
44273 }; // end $.keyboard definition
44274
44275 // event.which & ASCII values
44276 $keyboard.keyCodes = {
44277 backSpace: 8,
44278 tab: 9,
44279 enter: 13,
44280 capsLock: 20,
44281 escape: 27,
44282 space: 32,
44283 pageUp: 33,
44284 pageDown: 34,
44285 end: 35,
44286 home: 36,
44287 left: 37,
44288 up: 38,
44289 right: 39,
44290 down: 40,
44291 insert: 45,
44292 delete: 46,
44293 // event.which keyCodes (uppercase letters)
44294 A: 65,
44295 Z: 90,
44296 V: 86,
44297 C: 67,
44298 X: 88,
44299
44300 // ASCII lowercase a & z
44301 a: 97,
44302 z: 122
44303 };
44304
44305 $keyboard.css = {
44306 // keyboard id suffix
44307 idSuffix: '_keyboard',
44308 // class name to set initial focus
44309 initialFocus: 'keyboard-init-focus',
44310 // element class names
44311 input: 'ui-keyboard-input',
44312 inputClone: 'ui-keyboard-preview-clone',
44313 wrapper: 'ui-keyboard-preview-wrapper',
44314 preview: 'ui-keyboard-preview',
44315 keyboard: 'ui-keyboard',
44316 keySet: 'ui-keyboard-keyset',
44317 keyButton: 'ui-keyboard-button',
44318 keyWide: 'ui-keyboard-widekey',
44319 keyPrefix: 'ui-keyboard-',
44320 keyText: 'ui-keyboard-text', // span with button text
44321 keyHasActive: 'ui-keyboard-hasactivestate',
44322 keyAction: 'ui-keyboard-actionkey',
44323 keySpacer: 'ui-keyboard-spacer', // empty keys
44324 keyToggle: 'ui-keyboard-toggle',
44325 keyDisabled: 'ui-keyboard-disabled',
44326 // states
44327 locked: 'ui-keyboard-lockedinput',
44328 alwaysOpen: 'ui-keyboard-always-open',
44329 noKeyboard: 'ui-keyboard-nokeyboard',
44330 placeholder: 'ui-keyboard-placeholder',
44331 hasFocus: 'ui-keyboard-has-focus',
44332 isCurrent: 'ui-keyboard-input-current',
44333 // validation & autoaccept
44334 inputValid: 'ui-keyboard-valid-input',
44335 inputInvalid: 'ui-keyboard-invalid-input',
44336 inputAutoAccepted: 'ui-keyboard-autoaccepted',
44337 endRow: 'ui-keyboard-button-endrow' // class added to <br>
44338 };
44339
44340 $keyboard.events = {
44341 // keyboard events
44342 kbChange: 'keyboardChange',
44343 kbBeforeClose: 'beforeClose',
44344 kbBeforeVisible: 'beforeVisible',
44345 kbVisible: 'visible',
44346 kbInit: 'initialized',
44347 kbInactive: 'inactive',
44348 kbHidden: 'hidden',
44349 kbRepeater: 'repeater',
44350 kbKeysetChange: 'keysetChange',
44351 // input events
44352 inputAccepted: 'accepted',
44353 inputCanceled: 'canceled',
44354 inputChange: 'change',
44355 inputRestricted: 'restricted'
44356 };
44357
44358 // Action key function list
44359 $keyboard.keyaction = {
44360 accept: function (base) {
44361 base.close(true); // same as base.accept();
44362 return false; // return false prevents further processing
44363 },
44364 alt: function (base) {
44365 base.altActive = !base.altActive;
44366 base.showSet();
44367 },
44368 bksp: function (base) {
44369 // the script looks for the '\b' string and initiates a backspace
44370 base.insertText('\b');
44371 },
44372 cancel: function (base) {
44373 base.close();
44374 return false; // return false prevents further processing
44375 },
44376 clear: function (base) {
44377 base.$preview.val('');
44378 if (base.$decBtn.length) {
44379 base.checkDecimal();
44380 }
44381 },
44382 combo: function (base) {
44383 var o = base.options,
44384 c = !o.useCombos,
44385 $combo = base.$keyboard.find('.' + $keyboard.css.keyPrefix + 'combo');
44386 o.useCombos = c;
44387 $combo
44388 .toggleClass(o.css.buttonActive, c)
44389 // update combo key state
44390 .attr('title', $combo.attr('data-title') + ' (' + o.display[c ? 'active' : 'disabled'] + ')');
44391 if (c) {
44392 base.checkCombos();
44393 }
44394 return false;
44395 },
44396 dec: function (base) {
44397 base.insertText((base.decimal) ? '.' : ',');
44398 },
44399 del: function (base) {
44400 // the script looks for the '{d}' string and initiates a delete
44401 base.insertText('{d}');
44402 },
44403 // resets to base keyset (deprecated because "default" is a reserved word)
44404 'default': function (base) {
44405 base.shiftActive = base.altActive = base.metaActive = false;
44406 base.showSet();
44407 },
44408 // el is the pressed key (button) object; it is null when the real keyboard enter is pressed
44409 enter: function (base, el, e) {
44410 var tag = base.el.nodeName,
44411 o = base.options;
44412 // shift+enter in textareas
44413 if (e.shiftKey || base.shiftActive) {
44414 // textarea & input - enterMod + shift + enter = accept, then go to prev;
44415 // base.switchInput(goToNext, autoAccept)
44416 // textarea & input - shift + enter = accept (no navigation)
44417 return (o.enterNavigation) ? base.switchInput(!e[o.enterMod], true) : base.close(true);
44418 }
44419 // input only - enterMod + enter to navigate
44420 if (o.enterNavigation && (tag !== 'TEXTAREA' || e[o.enterMod])) {
44421 return base.switchInput(!e[o.enterMod], o.autoAccept ? 'true' : false);
44422 }
44423 // pressing virtual enter button inside of a textarea - add a carriage return
44424 // e.target is span when clicking on text and button at other times
44425 if (tag === 'TEXTAREA' && $(e.target).closest('button').length) {
44426 // IE8 fix (space + \n) - fixes #71 thanks Blookie!
44427 base.insertText(($keyboard.msie ? ' ' : '') + '\n');
44428 }
44429 },
44430 // caps lock key
44431 lock: function (base) {
44432 base.last.keyset[0] = base.shiftActive = base.capsLock = !base.capsLock;
44433 base.showSet();
44434 },
44435 left: function (base) {
44436 var p = $keyboard.caret(base.$preview);
44437 if (p.start - 1 >= 0) {
44438 // move both start and end of caret (prevents text selection) & save caret position
44439 base.last.start = base.last.end = p.start - 1;
44440 $keyboard.caret(base.$preview, base.last);
44441 base.setScroll();
44442 }
44443 },
44444 meta: function (base, el) {
44445 var $el = $(el);
44446 base.metaActive = !$el.hasClass(base.options.css.buttonActive);
44447 base.showSet($el.attr('data-name'));
44448 },
44449 next: function (base) {
44450 base.switchInput(true, base.options.autoAccept);
44451 return false;
44452 },
44453 // same as 'default' - resets to base keyset
44454 normal: function (base) {
44455 base.shiftActive = base.altActive = base.metaActive = false;
44456 base.showSet();
44457 },
44458 prev: function (base) {
44459 base.switchInput(false, base.options.autoAccept);
44460 return false;
44461 },
44462 right: function (base) {
44463 var p = $keyboard.caret(base.$preview);
44464 if (p.start + 1 <= base.$preview.val().length) {
44465 // move both start and end of caret (prevents text selection) && save caret position
44466 base.last.start = base.last.end = p.start + 1;
44467 $keyboard.caret(base.$preview, base.last);
44468 base.setScroll();
44469 }
44470 },
44471 shift: function (base) {
44472 base.last.keyset[0] = base.shiftActive = !base.shiftActive;
44473 base.showSet();
44474 },
44475 sign: function (base) {
44476 if (/^\-?\d*\.?\d*$/.test(base.$preview.val())) {
44477 base.$preview.val((base.$preview.val() * -1));
44478 }
44479 },
44480 space: function (base) {
44481 base.insertText(' ');
44482 },
44483 tab: function (base) {
44484 var tag = base.el.nodeName,
44485 o = base.options;
44486 if (tag === 'INPUT') {
44487 if (o.tabNavigation) {
44488 return base.switchInput(!base.shiftActive, true);
44489 } else {
44490 // ignore tab key in input
44491 return false;
44492 }
44493 }
44494 base.insertText('\t');
44495 },
44496 toggle: function (base) {
44497 base.enabled = !base.enabled;
44498 base.toggle();
44499 },
44500 // *** Special action keys: NBSP & zero-width characters ***
44501 // Non-breaking space
44502 NBSP: '\u00a0',
44503 // zero width space
44504 ZWSP: '\u200b',
44505 // Zero width non-joiner
44506 ZWNJ: '\u200c',
44507 // Zero width joiner
44508 ZWJ: '\u200d',
44509 // Left-to-right Mark
44510 LRM: '\u200e',
44511 // Right-to-left Mark
44512 RLM: '\u200f'
44513 };
44514
44515 // Default keyboard layouts
44516 $keyboard.builtLayouts = {};
44517 $keyboard.layouts = {
44518 'alpha': {
44519 'normal': [
44520 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44521 '{tab} a b c d e f g h i j [ ] \\',
44522 'k l m n o p q r s ; \' {enter}',
44523 '{shift} t u v w x y z , . / {shift}',
44524 '{accept} {space} {cancel}'
44525 ],
44526 'shift': [
44527 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44528 '{tab} A B C D E F G H I J { } |',
44529 'K L M N O P Q R S : " {enter}',
44530 '{shift} T U V W X Y Z < > ? {shift}',
44531 '{accept} {space} {cancel}'
44532 ]
44533 },
44534 'qwerty': {
44535 'normal': [
44536 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44537 '{tab} q w e r t y u i o p [ ] \\',
44538 'a s d f g h j k l ; \' {enter}',
44539 '{shift} z x c v b n m , . / {shift}',
44540 '{accept} {space} {cancel}'
44541 ],
44542 'shift': [
44543 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44544 '{tab} Q W E R T Y U I O P { } |',
44545 'A S D F G H J K L : " {enter}',
44546 '{shift} Z X C V B N M < > ? {shift}',
44547 '{accept} {space} {cancel}'
44548 ]
44549 },
44550 'international': {
44551 'normal': [
44552 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44553 '{tab} q w e r t y u i o p [ ] \\',
44554 'a s d f g h j k l ; \' {enter}',
44555 '{shift} z x c v b n m , . / {shift}',
44556 '{accept} {alt} {space} {alt} {cancel}'
44557 ],
44558 'shift': [
44559 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44560 '{tab} Q W E R T Y U I O P { } |',
44561 'A S D F G H J K L : " {enter}',
44562 '{shift} Z X C V B N M < > ? {shift}',
44563 '{accept} {alt} {space} {alt} {cancel}'
44564 ],
44565 'alt': [
44566 '~ \u00a1 \u00b2 \u00b3 \u00a4 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00d7 {bksp}',
44567 '{tab} \u00e4 \u00e5 \u00e9 \u00ae \u00fe \u00fc \u00fa \u00ed \u00f3 \u00f6 \u00ab \u00bb \u00ac',
44568 '\u00e1 \u00df \u00f0 f g h j k \u00f8 \u00b6 \u00b4 {enter}',
44569 '{shift} \u00e6 x \u00a9 v b \u00f1 \u00b5 \u00e7 > \u00bf {shift}',
44570 '{accept} {alt} {space} {alt} {cancel}'
44571 ],
44572 'alt-shift': [
44573 '~ \u00b9 \u00b2 \u00b3 \u00a3 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00f7 {bksp}',
44574 '{tab} \u00c4 \u00c5 \u00c9 \u00ae \u00de \u00dc \u00da \u00cd \u00d3 \u00d6 \u00ab \u00bb \u00a6',
44575 '\u00c4 \u00a7 \u00d0 F G H J K \u00d8 \u00b0 \u00a8 {enter}',
44576 '{shift} \u00c6 X \u00a2 V B \u00d1 \u00b5 \u00c7 . \u00bf {shift}',
44577 '{accept} {alt} {space} {alt} {cancel}'
44578 ]
44579 },
44580 'colemak': {
44581 'normal': [
44582 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44583 '{tab} q w f p g j l u y ; [ ] \\',
44584 '{bksp} a r s t d h n e i o \' {enter}',
44585 '{shift} z x c v b k m , . / {shift}',
44586 '{accept} {space} {cancel}'
44587 ],
44588 'shift': [
44589 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44590 '{tab} Q W F P G J L U Y : { } |',
44591 '{bksp} A R S T D H N E I O " {enter}',
44592 '{shift} Z X C V B K M < > ? {shift}',
44593 '{accept} {space} {cancel}'
44594 ]
44595 },
44596 'dvorak': {
44597 'normal': [
44598 '` 1 2 3 4 5 6 7 8 9 0 [ ] {bksp}',
44599 '{tab} \' , . p y f g c r l / = \\',
44600 'a o e u i d h t n s - {enter}',
44601 '{shift} ; q j k x b m w v z {shift}',
44602 '{accept} {space} {cancel}'
44603 ],
44604 'shift': [
44605 '~ ! @ # $ % ^ & * ( ) { } {bksp}',
44606 '{tab} " < > P Y F G C R L ? + |',
44607 'A O E U I D H T N S _ {enter}',
44608 '{shift} : Q J K X B M W V Z {shift}',
44609 '{accept} {space} {cancel}'
44610 ]
44611 },
44612 'num': {
44613 'normal': [
44614 '= ( ) {b}',
44615 '{clear} / * -',
44616 '7 8 9 +',
44617 '4 5 6 {sign}',
44618 '1 2 3 %',
44619 '0 {dec} {a} {c}'
44620 ]
44621 }
44622 };
44623
44624 $keyboard.language = {
44625 en: {
44626 display: {
44627 // check mark - same action as accept
44628 'a': '\u2714:Accept (Shift+Enter)',
44629 'accept': 'Accept:Accept (Shift+Enter)',
44630 // other alternatives \u2311
44631 'alt': 'Alt:\u2325 AltGr',
44632 // Left arrow (same as &larr;)
44633 'b': '\u232b:Backspace',
44634 'bksp': 'Bksp:Backspace',
44635 // big X, close - same action as cancel
44636 'c': '\u2716:Cancel (Esc)',
44637 'cancel': 'Cancel:Cancel (Esc)',
44638 // clear num pad
44639 'clear': 'C:Clear',
44640 'combo': '\u00f6:Toggle Combo Keys',
44641 // decimal point for num pad (optional), change '.' to ',' for European format
44642 'dec': '.:Decimal',
44643 // down, then left arrow - enter symbol
44644 'e': '\u23ce:Enter',
44645 'empty': '\u00a0',
44646 'enter': 'Enter:Enter \u23ce',
44647 // left arrow (move caret)
44648 'left': '\u2190',
44649 // caps lock
44650 'lock': 'Lock:\u21ea Caps Lock',
44651 'next': 'Next \u21e8',
44652 'prev': '\u21e6 Prev',
44653 // right arrow (move caret)
44654 'right': '\u2192',
44655 // thick hollow up arrow
44656 's': '\u21e7:Shift',
44657 'shift': 'Shift:Shift',
44658 // +/- sign for num pad
44659 'sign': '\u00b1:Change Sign',
44660 'space': '\u00a0:Space',
44661 // right arrow to bar (used since this virtual keyboard works with one directional tabs)
44662 't': '\u21e5:Tab',
44663 // \u21b9 is the true tab symbol (left & right arrows)
44664 'tab': '\u21e5 Tab:Tab',
44665 // replaced by an image
44666 'toggle': ' ',
44667
44668 // added to titles of keys
44669 // accept key status when acceptValid:true
44670 'valid': 'valid',
44671 'invalid': 'invalid',
44672 // combo key states
44673 'active': 'active',
44674 'disabled': 'disabled'
44675 },
44676
44677 // Message added to the key title while hovering, if the mousewheel plugin exists
44678 wheelMessage: 'Use mousewheel to see other keys',
44679
44680 comboRegex: /([`\'~\^\"ao])([a-z])/mig,
44681 combos: {
44682 // grave
44683 '`': { a: '\u00e0', A: '\u00c0', e: '\u00e8', E: '\u00c8', i: '\u00ec', I: '\u00cc', o: '\u00f2',
44684 O: '\u00d2', u: '\u00f9', U: '\u00d9', y: '\u1ef3', Y: '\u1ef2' },
44685 // acute & cedilla
44686 "'": { a: '\u00e1', A: '\u00c1', e: '\u00e9', E: '\u00c9', i: '\u00ed', I: '\u00cd', o: '\u00f3',
44687 O: '\u00d3', u: '\u00fa', U: '\u00da', y: '\u00fd', Y: '\u00dd' },
44688 // umlaut/trema
44689 '"': { a: '\u00e4', A: '\u00c4', e: '\u00eb', E: '\u00cb', i: '\u00ef', I: '\u00cf', o: '\u00f6',
44690 O: '\u00d6', u: '\u00fc', U: '\u00dc', y: '\u00ff', Y: '\u0178' },
44691 // circumflex
44692 '^': { a: '\u00e2', A: '\u00c2', e: '\u00ea', E: '\u00ca', i: '\u00ee', I: '\u00ce', o: '\u00f4',
44693 O: '\u00d4', u: '\u00fb', U: '\u00db', y: '\u0177', Y: '\u0176' },
44694 // tilde
44695 '~': { a: '\u00e3', A: '\u00c3', e: '\u1ebd', E: '\u1ebc', i: '\u0129', I: '\u0128', o: '\u00f5',
44696 O: '\u00d5', u: '\u0169', U: '\u0168', y: '\u1ef9', Y: '\u1ef8', n: '\u00f1', N: '\u00d1' }
44697 }
44698 }
44699 };
44700
44701 $keyboard.defaultOptions = {
44702 // set this to ISO 639-1 language code to override language set by the layout
44703 // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
44704 // language defaults to 'en' if not found
44705 language: null,
44706 rtl: false,
44707
44708 // *** choose layout & positioning ***
44709 layout: 'qwerty',
44710 customLayout: null,
44711
44712 position: {
44713 // optional - null (attach to input/textarea) or a jQuery object (attach elsewhere)
44714 of: null,
44715 my: 'center top',
44716 at: 'center top',
44717 // used when 'usePreview' is false (centers the keyboard at the bottom of the input/textarea)
44718 at2: 'center bottom'
44719 },
44720
44721 // allow jQuery position utility to reposition the keyboard on window resize
44722 reposition: true,
44723
44724 // preview added above keyboard if true, original input/textarea used if false
44725 usePreview: true,
44726
44727 // if true, the keyboard will always be visible
44728 alwaysOpen: false,
44729
44730 // give the preview initial focus when the keyboard becomes visible
44731 initialFocus: true,
44732
44733 // avoid changing the focus (hardware keyboard probably won't work)
44734 noFocus: false,
44735
44736 // if true, keyboard will remain open even if the input loses focus, but closes on escape
44737 // or when another keyboard opens.
44738 stayOpen: false,
44739
44740 // Prevents the keyboard from closing when the user clicks or presses outside the keyboard
44741 // the `autoAccept` option must also be set to true when this option is true or changes are lost
44742 userClosed: false,
44743
44744 // if true, keyboard will not close if you press escape.
44745 ignoreEsc: false,
44746
44747 // if true, keyboard will only closed on click event instead of mousedown and touchstart
44748 closeByClickEvent: false,
44749
44750 css: {
44751 // input & preview
44752 input: 'ui-widget-content ui-corner-all',
44753 // keyboard container
44754 container: 'ui-widget-content ui-widget ui-corner-all ui-helper-clearfix',
44755 // keyboard container extra class (same as container, but separate)
44756 popup: '',
44757 // default state
44758 buttonDefault: 'ui-state-default ui-corner-all',
44759 // hovered button
44760 buttonHover: 'ui-state-hover',
44761 // Action keys (e.g. Accept, Cancel, Tab, etc); this replaces 'actionClass' option
44762 buttonAction: 'ui-state-active',
44763 // Active keys (e.g. shift down, meta keyset active, combo keys active)
44764 buttonActive: 'ui-state-active',
44765 // used when disabling the decimal button {dec} when a decimal exists in the input area
44766 buttonDisabled: 'ui-state-disabled',
44767 buttonEmpty: 'ui-keyboard-empty'
44768 },
44769
44770 // *** Useability ***
44771 // Auto-accept content when clicking outside the keyboard (popup will close)
44772 autoAccept: false,
44773 // Auto-accept content even if the user presses escape (only works if `autoAccept` is `true`)
44774 autoAcceptOnEsc: false,
44775
44776 // Prevents direct input in the preview window when true
44777 lockInput: false,
44778
44779 // Prevent keys not in the displayed keyboard from being typed in
44780 restrictInput: false,
44781 // Additional allowed characters while restrictInput is true
44782 restrictInclude: '', // e.g. 'a b foo \ud83d\ude38'
44783
44784 // Check input against validate function, if valid the accept button gets a class name of
44785 // 'ui-keyboard-valid-input'. If invalid, the accept button gets a class name of
44786 // 'ui-keyboard-invalid-input'
44787 acceptValid: false,
44788 // Auto-accept when input is valid; requires `acceptValid` set `true` & validate callback
44789 autoAcceptOnValid: false,
44790
44791 // if acceptValid is true & the validate function returns a false, this option will cancel
44792 // a keyboard close only after the accept button is pressed
44793 cancelClose: true,
44794
44795 // tab to go to next, shift-tab for previous (default behavior)
44796 tabNavigation: false,
44797
44798 // enter for next input; shift+enter accepts content & goes to next
44799 // shift + 'enterMod' + enter ('enterMod' is the alt as set below) will accept content and go
44800 // to previous in a textarea
44801 enterNavigation: false,
44802 // mod key options: 'ctrlKey', 'shiftKey', 'altKey', 'metaKey' (MAC only)
44803 enterMod: 'altKey', // alt-enter to go to previous; shift-alt-enter to accept & go to previous
44804
44805 // if true, the next button will stop on the last keyboard input/textarea; prev button stops at first
44806 // if false, the next button will wrap to target the first input/textarea; prev will go to the last
44807 stopAtEnd: true,
44808
44809 // Set this to append the keyboard after the input/textarea (appended to the input/textarea parent).
44810 // This option works best when the input container doesn't have a set width & when the 'tabNavigation'
44811 // option is true.
44812 appendLocally: false,
44813 // When appendLocally is false, the keyboard will be appended to this object
44814 appendTo: 'body',
44815
44816 // If false, the shift key will remain active until the next key is (mouse) clicked on; if true it will
44817 // stay active until pressed again
44818 stickyShift: true,
44819
44820 // Prevent pasting content into the area
44821 preventPaste: false,
44822
44823 // caret placed at the end of any text when keyboard becomes visible
44824 caretToEnd: false,
44825
44826 // caret stays this many pixels from the edge of the input while scrolling left/right;
44827 // use "c" or "center" to center the caret while scrolling
44828 scrollAdjustment: 10,
44829
44830 // Set the max number of characters allowed in the input, setting it to false disables this option
44831 maxLength: false,
44832 // allow inserting characters @ caret when maxLength is set
44833 maxInsert: true,
44834
44835 // Mouse repeat delay - when clicking/touching a virtual keyboard key, after this delay the key will
44836 // start repeating
44837 repeatDelay: 500,
44838
44839 // Mouse repeat rate - after the repeatDelay, this is the rate (characters per second) at which the
44840 // key is repeated Added to simulate holding down a real keyboard key and having it repeat. I haven't
44841 // calculated the upper limit of this rate, but it is limited to how fast the javascript can process
44842 // the keys. And for me, in Firefox, it's around 20.
44843 repeatRate: 20,
44844
44845 // resets the keyboard to the default keyset when visible
44846 resetDefault: true,
44847
44848 // Event (namespaced) on the input to reveal the keyboard. To disable it, just set it to ''.
44849 openOn: 'focus',
44850
44851 // Event (namepaced) for when the character is added to the input (clicking on the keyboard)
44852 keyBinding: 'mousedown touchstart',
44853
44854 // enable/disable mousewheel functionality
44855 // enabling still depends on the mousewheel plugin
44856 useWheel: true,
44857
44858 // combos (emulate dead keys : http://en.wikipedia.org/wiki/Keyboard_layout#US-International)
44859 // if user inputs `a the script converts it to à, ^o becomes ô, etc.
44860 useCombos: true,
44861
44862 /*
44863 // *** Methods ***
44864 // commenting these out to reduce the size of the minified version
44865 // Callbacks - attach a function to any of these callbacks as desired
44866 initialized : function(e, keyboard, el) {},
44867 beforeVisible : function(e, keyboard, el) {},
44868 visible : function(e, keyboard, el) {},
44869 beforeInsert : function(e, keyboard, el, textToAdd) { return textToAdd; },
44870 change : function(e, keyboard, el) {},
44871 beforeClose : function(e, keyboard, el, accepted) {},
44872 accepted : function(e, keyboard, el) {},
44873 canceled : function(e, keyboard, el) {},
44874 restricted : function(e, keyboard, el) {},
44875 hidden : function(e, keyboard, el) {},
44876 // called instead of base.switchInput
44877 switchInput : function(keyboard, goToNext, isAccepted) {},
44878 // used if you want to create a custom layout or modify the built-in keyboard
44879 create : function(keyboard) { return keyboard.buildKeyboard(); },
44880
44881 // build key callback
44882 buildKey : function( keyboard, data ) {
44883 / *
44884 data = {
44885 // READ ONLY
44886 isAction : [boolean] true if key is an action key
44887 name : [string] key class name suffix ( prefix = 'ui-keyboard-' );
44888 may include decimal ascii value of character
44889 value : [string] text inserted (non-action keys)
44890 title : [string] title attribute of key
44891 action : [string] keyaction name
44892 html : [string] HTML of the key; it includes a <span> wrapping the text
44893 // use to modify key HTML
44894 $key : [object] jQuery selector of key which is already appended to keyboard
44895 }
44896 * /
44897 return data;
44898 },
44899 */
44900
44901 // this callback is called, if the acceptValid is true, and just before the 'beforeClose' to check
44902 // the value if the value is valid, return true and the keyboard will continue as it should
44903 // (close if not always open, etc). If the value is not valid, return false and clear the keyboard
44904 // value ( like this "keyboard.$preview.val('');" ), if desired. The validate function is called after
44905 // each input, the 'isClosing' value will be false; when the accept button is clicked,
44906 // 'isClosing' is true
44907 validate: function (keyboard, value, isClosing) {
44908 return true;
44909 }
44910
44911 };
44912
44913 // for checking combos
44914 $keyboard.comboRegex = /([`\'~\^\"ao])([a-z])/mig;
44915
44916 // store current keyboard element; used by base.isCurrent()
44917 $keyboard.currentKeyboard = '';
44918
44919 $('<!--[if lte IE 8]><script>jQuery("body").addClass("oldie");</script><![endif]--><!--[if IE]>' +
44920 '<script>jQuery("body").addClass("ie");</script><![endif]-->')
44921 .appendTo('body')
44922 .remove();
44923 $keyboard.msie = $('body').hasClass('oldie'); // Old IE flag, used for caret positioning
44924 $keyboard.allie = $('body').hasClass('ie');
44925
44926 $keyboard.watermark = (typeof (document.createElement('input').placeholder) !== 'undefined');
44927
44928 $keyboard.checkCaretSupport = function () {
44929 if (typeof $keyboard.checkCaret !== 'boolean') {
44930 // Check if caret position is saved when input is hidden or loses focus
44931 // (*cough* all versions of IE and I think Opera has/had an issue as well
44932 var $temp = $('<div style="height:0px;width:0px;overflow:hidden;position:fixed;top:0;left:-100px;">' +
44933 '<input type="text" value="testing"/></div>').prependTo('body'); // stop page scrolling
44934 $keyboard.caret($temp.find('input'), 3, 3);
44935 // Also save caret position of the input if it is locked
44936 $keyboard.checkCaret = $keyboard.caret($temp.find('input').hide().show()).start !== 3;
44937 $temp.remove();
44938 }
44939 return $keyboard.checkCaret;
44940 };
44941
44942 $keyboard.caret = function ($el, param1, param2) {
44943 if (!$el || !$el.length || $el.is(':hidden') || $el.css('visibility') === 'hidden') {
44944 return {};
44945 }
44946 var start, end, txt, pos,
44947 kb = $el.data('keyboard'),
44948 noFocus = kb && kb.options.noFocus;
44949 if (!noFocus) {
44950 $el.focus();
44951 }
44952 // set caret position
44953 if (typeof param1 !== 'undefined') {
44954 // allow setting caret using ( $el, { start: x, end: y } )
44955 if (typeof param1 === 'object' && 'start' in param1 && 'end' in param1) {
44956 start = param1.start;
44957 end = param1.end;
44958 } else if (typeof param2 === 'undefined') {
44959 param2 = param1; // set caret using start position
44960 }
44961 // set caret using ( $el, start, end );
44962 if (typeof param1 === 'number' && typeof param2 === 'number') {
44963 start = param1;
44964 end = param2;
44965 } else if (param1 === 'start') {
44966 start = end = 0;
44967 } else if (typeof param1 === 'string') {
44968 // unknown string setting, move caret to end
44969 start = end = $el.val().length;
44970 }
44971
44972 // *** SET CARET POSITION ***
44973 // modify the line below to adapt to other caret plugins
44974 return $el.caret(start, end, noFocus);
44975 }
44976 // *** GET CARET POSITION ***
44977 // modify the line below to adapt to other caret plugins
44978 pos = $el.caret();
44979 start = pos.start;
44980 end = pos.end;
44981
44982 // *** utilities ***
44983 txt = ($el[0].value || $el.text() || '');
44984 return {
44985 start: start,
44986 end: end,
44987 // return selected text
44988 text: txt.substring(start, end),
44989 // return a replace selected string method
44990 replaceStr: function (str) {
44991 return txt.substring(0, start) + str + txt.substring(end, txt.length);
44992 }
44993 };
44994 };
44995
44996 $.fn.keyboard = function (options) {
44997 return this.each(function () {
44998 if (!$(this).data('keyboard')) {
44999 /*jshint nonew:false */
45000 (new $.keyboard(this, options));
45001 }
45002 });
45003 };
45004
45005 $.fn.getkeyboard = function () {
45006 return this.data('keyboard');
45007 };
45008
45009 /* Copyright (c) 2010 C. F., Wong (<a href="http://cloudgen.w0ng.hk">Cloudgen Examplet Store</a>)
45010 * Licensed under the MIT License:
45011 * http://www.opensource.org/licenses/mit-license.php
45012 * Highly modified from the original
45013 */
45014
45015 $.fn.caret = function (start, end, noFocus) {
45016 if (typeof this[0] === 'undefined' || this.is(':hidden') || this.css('visibility') === 'hidden') {
45017 return this;
45018 }
45019 var selRange, range, stored_range, txt, val,
45020 selection = document.selection,
45021 $el = this,
45022 el = $el[0],
45023 sTop = el.scrollTop,
45024 ss = false,
45025 supportCaret = true;
45026 try {
45027 ss = 'selectionStart' in el;
45028 } catch (err) {
45029 supportCaret = false;
45030 }
45031 if (supportCaret && typeof start !== 'undefined') {
45032 if (!/(email|number)/i.test(el.type)) {
45033 if (ss) {
45034 el.selectionStart = start;
45035 el.selectionEnd = end;
45036 } else {
45037 selRange = el.createTextRange();
45038 selRange.collapse(true);
45039 selRange.moveStart('character', start);
45040 selRange.moveEnd('character', end - start);
45041 selRange.select();
45042 }
45043 }
45044 // must be visible or IE8 crashes; IE9 in compatibility mode works fine - issue #56
45045 if (!noFocus && ($el.is(':visible') || $el.css('visibility') !== 'hidden')) {
45046 el.focus();
45047 }
45048 el.scrollTop = sTop;
45049 return this;
45050 } else {
45051 if (/(email|number)/i.test(el.type)) {
45052 // fix suggested by raduanastase (https://github.com/Mottie/Keyboard/issues/105#issuecomment-40456535)
45053 start = end = $el.val().length;
45054 } else if (ss) {
45055 start = el.selectionStart;
45056 end = el.selectionEnd;
45057 } else if (selection) {
45058 if (el.nodeName === 'TEXTAREA') {
45059 val = $el.val();
45060 range = selection.createRange();
45061 stored_range = range.duplicate();
45062 stored_range.moveToElementText(el);
45063 stored_range.setEndPoint('EndToEnd', range);
45064 // thanks to the awesome comments in the rangy plugin
45065 start = stored_range.text.replace(/\r/g, '\n').length;
45066 end = start + range.text.replace(/\r/g, '\n').length;
45067 } else {
45068 val = $el.val().replace(/\r/g, '\n');
45069 range = selection.createRange().duplicate();
45070 range.moveEnd('character', val.length);
45071 start = (range.text === '' ? val.length : val.lastIndexOf(range.text));
45072 range = selection.createRange().duplicate();
45073 range.moveStart('character', -val.length);
45074 end = range.text.length;
45075 }
45076 } else {
45077 // caret positioning not supported
45078 start = end = (el.value || '').length;
45079 }
45080 txt = (el.value || '');
45081 return {
45082 start: start,
45083 end: end,
45084 text: txt.substring(start, end),
45085 replace: function (str) {
45086 return txt.substring(0, start) + str + txt.substring(end, txt.length);
45087 }
45088 };
45089 }
45090 };
45091
45092 return $keyboard;
45093
45094 }));
45095 </script>
45096 <script>jQuery(function($) {
45097 $('.virtual-keyboard').keyboard({
45098
45099 autoAccept : true,
45100
45101 accepted : function(event, keyboard, el) {
45102 $('.virtual-keyboard').trigger('input');
45103 },
45104
45105 display: {
45106 'bksp' : '\u2190',
45107 },
45108
45109 layout: 'custom',
45110
45111 customLayout: {
45112
45113 'normal': [
45114 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
45115 'q w e r t y u i o p [ ] \\',
45116 'a s d f g h j k l ; \'',
45117 '{s} z x c v b n m , . / {s}',
45118 '{space}'
45119 ],
45120 'shift': [
45121 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
45122 'Q W E R T Y U I O P { } |',
45123 'A S D F G H J K L : "',
45124 '{s} Z X C V B N M < > ? {s}',
45125 '{space}'
45126 ]
45127
45128 }
45129
45130 });
45131 });
45132 </script>
45133 <script>(function() {
45134
45135 // mnemonics is populated as required by getLanguage
45136 var mnemonics = { "english": new Mnemonic("english") };
45137 var mnemonic = mnemonics["english"];
45138 var seed = null;
45139 var bip32RootKey = null;
45140 var bip32ExtendedKey = null;
45141 var network = bitcoin.networks.bitcoin;
45142 var addressRowTemplate = $("#address-row-template");
45143
45144 var showIndex = true;
45145 var showAddress = true;
45146 var showPubKey = true;
45147 var showPrivKey = true;
45148 var showQr = false;
45149
45150 var entropyChangeTimeoutEvent = null;
45151 var phraseChangeTimeoutEvent = null;
45152 var rootKeyChangedTimeoutEvent = null;
45153
45154 var generationProcesses = [];
45155
45156 var DOM = {};
45157 DOM.network = $(".network");
45158 DOM.bip32Client = $("#bip32-client");
45159 DOM.phraseNetwork = $("#network-phrase");
45160 DOM.useEntropy = $(".use-entropy");
45161 DOM.entropyContainer = $(".entropy-container");
45162 DOM.entropy = $(".entropy");
45163 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
45164 DOM.entropyType = DOM.entropyContainer.find(".type");
45165 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
45166 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
45167 DOM.entropyBits = DOM.entropyContainer.find(".bits");
45168 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
45169 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
45170 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
45171 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
45172 DOM.phrase = $(".phrase");
45173 DOM.passphrase = $(".passphrase");
45174 DOM.generateContainer = $(".generate-container");
45175 DOM.generate = $(".generate");
45176 DOM.seed = $(".seed");
45177 DOM.rootKey = $(".root-key");
45178 DOM.extendedPrivKey = $(".extended-priv-key");
45179 DOM.extendedPubKey = $(".extended-pub-key");
45180 DOM.bip32tab = $("#bip32-tab");
45181 DOM.bip44tab = $("#bip44-tab");
45182 DOM.bip32panel = $("#bip32");
45183 DOM.bip44panel = $("#bip44");
45184 DOM.bip32path = $("#bip32-path");
45185 DOM.bip44path = $("#bip44-path");
45186 DOM.bip44purpose = $("#bip44 .purpose");
45187 DOM.bip44coin = $("#bip44 .coin");
45188 DOM.bip44account = $("#bip44 .account");
45189 DOM.bip44accountXprv = $("#bip44 .account-xprv");
45190 DOM.bip44accountXpub = $("#bip44 .account-xpub");
45191 DOM.bip44change = $("#bip44 .change");
45192 DOM.generatedStrength = $(".generate-container .strength");
45193 DOM.hardenedAddresses = $(".hardened-addresses");
45194 DOM.addresses = $(".addresses");
45195 DOM.rowsToAdd = $(".rows-to-add");
45196 DOM.more = $(".more");
45197 DOM.feedback = $(".feedback");
45198 DOM.tab = $(".derivation-type a");
45199 DOM.indexToggle = $(".index-toggle");
45200 DOM.addressToggle = $(".address-toggle");
45201 DOM.publicKeyToggle = $(".public-key-toggle");
45202 DOM.privateKeyToggle = $(".private-key-toggle");
45203 DOM.languages = $(".languages a");
45204 DOM.qrContainer = $(".qr-container");
45205 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
45206 DOM.qrImage = DOM.qrContainer.find(".qr-image");
45207 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
45208 DOM.showQrEls = $("[data-show-qr]");
45209
45210 function init() {
45211 // Events
45212 DOM.network.on("change", networkChanged);
45213 DOM.bip32Client.on("change", bip32ClientChanged);
45214 DOM.useEntropy.on("change", setEntropyVisibility);
45215 DOM.entropy.on("input", delayedEntropyChanged);
45216 DOM.entropyMnemonicLength.on("change", entropyChanged);
45217 DOM.phrase.on("input", delayedPhraseChanged);
45218 DOM.passphrase.on("input", delayedPhraseChanged);
45219 DOM.generate.on("click", generateClicked);
45220 DOM.more.on("click", showMore);
45221 DOM.rootKey.on("input", delayedRootKeyChanged);
45222 DOM.bip32path.on("input", calcForDerivationPath);
45223 DOM.bip44purpose.on("input", calcForDerivationPath);
45224 DOM.bip44coin.on("input", calcForDerivationPath);
45225 DOM.bip44account.on("input", calcForDerivationPath);
45226 DOM.bip44change.on("input", calcForDerivationPath);
45227 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
45228 DOM.hardenedAddresses.on("change", calcForDerivationPath);
45229 DOM.indexToggle.on("click", toggleIndexes);
45230 DOM.addressToggle.on("click", toggleAddresses);
45231 DOM.publicKeyToggle.on("click", togglePublicKeys);
45232 DOM.privateKeyToggle.on("click", togglePrivateKeys);
45233 DOM.languages.on("click", languageChanged);
45234 setQrEvents(DOM.showQrEls);
45235 disableForms();
45236 hidePending();
45237 hideValidationError();
45238 populateNetworkSelect();
45239 populateClientSelect();
45240 }
45241
45242 // Event handlers
45243
45244 function networkChanged(e) {
45245 var networkIndex = e.target.value;
45246 networks[networkIndex].onSelect();
45247 if (seed != null) {
45248 phraseChanged();
45249 }
45250 else {
45251 rootKeyChanged();
45252 }
45253 }
45254
45255 function bip32ClientChanged(e) {
45256 var clientIndex = DOM.bip32Client.val();
45257 if (clientIndex == "custom") {
45258 DOM.bip32path.prop("readonly", false);
45259 }
45260 else {
45261 DOM.bip32path.prop("readonly", true);
45262 clients[clientIndex].onSelect();
45263 if (seed != null) {
45264 phraseChanged();
45265 }
45266 else {
45267 rootKeyChanged();
45268 }
45269 }
45270 }
45271
45272 function setEntropyVisibility() {
45273 if (isUsingOwnEntropy()) {
45274 DOM.entropyContainer.removeClass("hidden");
45275 DOM.generateContainer.addClass("hidden");
45276 DOM.phrase.prop("readonly", true);
45277 DOM.entropy.focus();
45278 entropyChanged();
45279 }
45280 else {
45281 DOM.entropyContainer.addClass("hidden");
45282 DOM.generateContainer.removeClass("hidden");
45283 DOM.phrase.prop("readonly", false);
45284 hidePending();
45285 }
45286 }
45287
45288 function delayedPhraseChanged() {
45289 hideValidationError();
45290 showPending();
45291 if (phraseChangeTimeoutEvent != null) {
45292 clearTimeout(phraseChangeTimeoutEvent);
45293 }
45294 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
45295 }
45296
45297 function phraseChanged() {
45298 showPending();
45299 hideValidationError();
45300 setMnemonicLanguage();
45301 // Get the mnemonic phrase
45302 var phrase = DOM.phrase.val();
45303 var errorText = findPhraseErrors(phrase);
45304 if (errorText) {
45305 showValidationError(errorText);
45306 return;
45307 }
45308 // Calculate and display
45309 var passphrase = DOM.passphrase.val();
45310 calcBip32RootKeyFromSeed(phrase, passphrase);
45311 calcForDerivationPath();
45312 hidePending();
45313 }
45314
45315 function delayedEntropyChanged() {
45316 hideValidationError();
45317 showPending();
45318 if (entropyChangeTimeoutEvent != null) {
45319 clearTimeout(entropyChangeTimeoutEvent);
45320 }
45321 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
45322 }
45323
45324 function entropyChanged() {
45325 // If blank entropy, clear mnemonic, addresses, errors
45326 if (DOM.entropy.val().trim().length == 0) {
45327 clearDisplay();
45328 clearEntropyFeedback();
45329 DOM.phrase.val("");
45330 showValidationError("Blank entropy");
45331 return;
45332 }
45333 // Get the current phrase to detect changes
45334 var phrase = DOM.phrase.val();
45335 // Set the phrase from the entropy
45336 setMnemonicFromEntropy();
45337 // Recalc addresses if the phrase has changed
45338 var newPhrase = DOM.phrase.val();
45339 if (newPhrase != phrase) {
45340 if (newPhrase.length == 0) {
45341 clearDisplay();
45342 }
45343 else {
45344 phraseChanged();
45345 }
45346 }
45347 else {
45348 hidePending();
45349 }
45350 }
45351
45352 function delayedRootKeyChanged() {
45353 // Warn if there is an existing mnemonic or passphrase.
45354 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
45355 if (!confirm("This will clear existing mnemonic and passphrase")) {
45356 DOM.rootKey.val(bip32RootKey);
45357 return
45358 }
45359 }
45360 hideValidationError();
45361 showPending();
45362 // Clear existing mnemonic and passphrase
45363 DOM.phrase.val("");
45364 DOM.passphrase.val("");
45365 seed = null;
45366 if (rootKeyChangedTimeoutEvent != null) {
45367 clearTimeout(rootKeyChangedTimeoutEvent);
45368 }
45369 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
45370 }
45371
45372 function rootKeyChanged() {
45373 showPending();
45374 hideValidationError();
45375 // Validate the root key TODO
45376 var rootKeyBase58 = DOM.rootKey.val();
45377 var errorText = validateRootKey(rootKeyBase58);
45378 if (errorText) {
45379 showValidationError(errorText);
45380 return;
45381 }
45382 // Calculate and display
45383 calcBip32RootKeyFromBase58(rootKeyBase58);
45384 calcForDerivationPath();
45385 }
45386
45387 function calcForDerivationPath() {
45388 showPending();
45389 clearAddressesList();
45390 hideValidationError();
45391 // Get the derivation path
45392 var derivationPath = getDerivationPath();
45393 var errorText = findDerivationPathErrors(derivationPath);
45394 if (errorText) {
45395 showValidationError(errorText);
45396 return;
45397 }
45398 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
45399 if (bip44TabSelected()) {
45400 displayBip44Info();
45401 }
45402 displayBip32Info();
45403 hidePending();
45404 }
45405
45406 function generateClicked() {
45407 if (isUsingOwnEntropy()) {
45408 return;
45409 }
45410 clearDisplay();
45411 showPending();
45412 setTimeout(function() {
45413 setMnemonicLanguage();
45414 var phrase = generateRandomPhrase();
45415 if (!phrase) {
45416 return;
45417 }
45418 phraseChanged();
45419 }, 50);
45420 }
45421
45422 function languageChanged() {
45423 setTimeout(function() {
45424 setMnemonicLanguage();
45425 if (DOM.phrase.val().length > 0) {
45426 var newPhrase = convertPhraseToNewLanguage();
45427 DOM.phrase.val(newPhrase);
45428 phraseChanged();
45429 }
45430 else {
45431 DOM.generate.trigger("click");
45432 }
45433 }, 50);
45434 }
45435
45436 function toggleIndexes() {
45437 showIndex = !showIndex;
45438 $("td.index span").toggleClass("invisible");
45439 }
45440
45441 function toggleAddresses() {
45442 showAddress = !showAddress;
45443 $("td.address span").toggleClass("invisible");
45444 }
45445
45446 function togglePublicKeys() {
45447 showPubKey = !showPubKey;
45448 $("td.pubkey span").toggleClass("invisible");
45449 }
45450
45451 function togglePrivateKeys() {
45452 showPrivKey = !showPrivKey;
45453 $("td.privkey span").toggleClass("invisible");
45454 }
45455
45456 // Private methods
45457
45458 function generateRandomPhrase() {
45459 if (!hasStrongRandom()) {
45460 var errorText = "This browser does not support strong randomness";
45461 showValidationError(errorText);
45462 return;
45463 }
45464 var numWords = parseInt(DOM.generatedStrength.val());
45465 var strength = numWords / 3 * 32;
45466 var words = mnemonic.generate(strength);
45467 DOM.phrase.val(words);
45468 return words;
45469 }
45470
45471 function calcBip32RootKeyFromSeed(phrase, passphrase) {
45472 seed = mnemonic.toSeed(phrase, passphrase);
45473 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
45474 }
45475
45476 function calcBip32RootKeyFromBase58(rootKeyBase58) {
45477 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
45478 }
45479
45480 function calcBip32ExtendedKey(path) {
45481 // Check there's a root key to derive from
45482 if (!bip32RootKey) {
45483 return bip32RootKey;
45484 }
45485 var extendedKey = bip32RootKey;
45486 // Derive the key from the path
45487 var pathBits = path.split("/");
45488 for (var i=0; i<pathBits.length; i++) {
45489 var bit = pathBits[i];
45490 var index = parseInt(bit);
45491 if (isNaN(index)) {
45492 continue;
45493 }
45494 var hardened = bit[bit.length-1] == "'";
45495 var isPriv = "privKey" in extendedKey;
45496 var invalidDerivationPath = hardened && !isPriv;
45497 if (invalidDerivationPath) {
45498 extendedKey = null;
45499 }
45500 else if (hardened) {
45501 extendedKey = extendedKey.deriveHardened(index);
45502 }
45503 else {
45504 extendedKey = extendedKey.derive(index);
45505 }
45506 }
45507 return extendedKey
45508 }
45509
45510 function showValidationError(errorText) {
45511 DOM.feedback
45512 .text(errorText)
45513 .show();
45514 }
45515
45516 function hideValidationError() {
45517 DOM.feedback
45518 .text("")
45519 .hide();
45520 }
45521
45522 function findPhraseErrors(phrase) {
45523 // Preprocess the words
45524 phrase = mnemonic.normalizeString(phrase);
45525 var words = phraseToWordArray(phrase);
45526 // Detect blank phrase
45527 if (words.length == 0) {
45528 return "Blank mnemonic";
45529 }
45530 // Check each word
45531 for (var i=0; i<words.length; i++) {
45532 var word = words[i];
45533 var language = getLanguage();
45534 if (WORDLISTS[language].indexOf(word) == -1) {
45535 console.log("Finding closest match to " + word);
45536 var nearestWord = findNearestWord(word);
45537 return word + " not in wordlist, did you mean " + nearestWord + "?";
45538 }
45539 }
45540 // Check the words are valid
45541 var properPhrase = wordArrayToPhrase(words);
45542 var isValid = mnemonic.check(properPhrase);
45543 if (!isValid) {
45544 return "Invalid mnemonic";
45545 }
45546 return false;
45547 }
45548
45549 function validateRootKey(rootKeyBase58) {
45550 try {
45551 bitcoin.HDNode.fromBase58(rootKeyBase58);
45552 }
45553 catch (e) {
45554 return "Invalid root key";
45555 }
45556 return "";
45557 }
45558
45559 function getDerivationPath() {
45560 if (bip44TabSelected()) {
45561 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
45562 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
45563 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
45564 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
45565 var path = "m/";
45566 path += purpose + "'/";
45567 path += coin + "'/";
45568 path += account + "'/";
45569 path += change;
45570 DOM.bip44path.val(path);
45571 var derivationPath = DOM.bip44path.val();
45572 console.log("Using derivation path from BIP44 tab: " + derivationPath);
45573 return derivationPath;
45574 }
45575 else if (bip32TabSelected()) {
45576 var derivationPath = DOM.bip32path.val();
45577 console.log("Using derivation path from BIP32 tab: " + derivationPath);
45578 return derivationPath;
45579 }
45580 else {
45581 console.log("Unknown derivation path");
45582 }
45583 }
45584
45585 function findDerivationPathErrors(path) {
45586 // TODO is not perfect but is better than nothing
45587 // Inspired by
45588 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
45589 // and
45590 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
45591 var maxDepth = 255; // TODO verify this!!
45592 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
45593 if (path[0] != "m") {
45594 return "First character must be 'm'";
45595 }
45596 if (path.length > 1) {
45597 if (path[1] != "/") {
45598 return "Separator must be '/'";
45599 }
45600 var indexes = path.split("/");
45601 if (indexes.length > maxDepth) {
45602 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
45603 }
45604 for (var depth = 1; depth<indexes.length; depth++) {
45605 var index = indexes[depth];
45606 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
45607 if (invalidChars.length > 0) {
45608 return "Invalid characters " + invalidChars + " found at depth " + depth;
45609 }
45610 var indexValue = parseInt(index.replace("'", ""));
45611 if (isNaN(depth)) {
45612 return "Invalid number at depth " + depth;
45613 }
45614 if (indexValue > maxIndexValue) {
45615 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
45616 }
45617 }
45618 }
45619 // Check root key exists or else derivation path is useless!
45620 if (!bip32RootKey) {
45621 return "No root key";
45622 }
45623 // Check no hardened derivation path when using xpub keys
45624 var hardened = path.indexOf("'") > -1;
45625 var isXpubkey = !("privKey" in bip32RootKey);
45626 if (hardened && isXpubkey) {
45627 return "Hardened derivation path is invalid with xpub key";
45628 }
45629 return false;
45630 }
45631
45632 function displayBip44Info() {
45633 // Get the derivation path for the account
45634 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
45635 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
45636 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
45637 var path = "m/";
45638 path += purpose + "'/";
45639 path += coin + "'/";
45640 path += account + "'/";
45641 // Calculate the account extended keys
45642 var accountExtendedKey = calcBip32ExtendedKey(path);
45643 var accountXprv = accountExtendedKey.toBase58();
45644 var accountXpub = accountExtendedKey.toBase58(false);
45645 // Display the extended keys
45646 DOM.bip44accountXprv.val(accountXprv);
45647 DOM.bip44accountXpub.val(accountXpub);
45648 }
45649
45650 function displayBip32Info() {
45651 // Display the key
45652 DOM.seed.val(seed);
45653 var rootKey = bip32RootKey.toBase58();
45654 DOM.rootKey.val(rootKey);
45655 var xprvkeyB58 = "NA";
45656 if (bip32ExtendedKey.privKey) {
45657 xprvkeyB58 = bip32ExtendedKey.toBase58();
45658 }
45659 var extendedPrivKey = xprvkeyB58;
45660 DOM.extendedPrivKey.val(extendedPrivKey);
45661 var extendedPubKey = bip32ExtendedKey.toBase58(false);
45662 DOM.extendedPubKey.val(extendedPubKey);
45663 // Display the addresses and privkeys
45664 clearAddressesList();
45665 displayAddresses(0, 20);
45666 }
45667
45668 function displayAddresses(start, total) {
45669 generationProcesses.push(new (function() {
45670
45671 var rows = [];
45672
45673 this.stop = function() {
45674 for (var i=0; i<rows.length; i++) {
45675 rows[i].shouldGenerate = false;
45676 }
45677 }
45678
45679 for (var i=0; i<total; i++) {
45680 var index = i + start;
45681 rows.push(new TableRow(index));
45682 }
45683
45684 })());
45685 }
45686
45687 function TableRow(index) {
45688
45689 var self = this;
45690 this.shouldGenerate = true;
45691 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
45692
45693 function init() {
45694 calculateValues();
45695 }
45696
45697 function calculateValues() {
45698 setTimeout(function() {
45699 if (!self.shouldGenerate) {
45700 return;
45701 }
45702 var key = "";
45703 if (useHardenedAddresses) {
45704 key = bip32ExtendedKey.deriveHardened(index);
45705 }
45706 else {
45707 key = bip32ExtendedKey.derive(index);
45708 }
45709 var address = key.getAddress().toString();
45710 var privkey = "NA";
45711 if (key.privKey) {
45712 privkey = key.privKey.toWIF(network);
45713 }
45714 var pubkey = key.pubKey.toHex();
45715 var indexText = getDerivationPath() + "/" + index;
45716 if (useHardenedAddresses) {
45717 indexText = indexText + "'";
45718 }
45719 // Ethereum values are different
45720 if (networks[DOM.network.val()].name == "Ethereum") {
45721 var privKeyBuffer = key.privKey.d.toBuffer();
45722 privkey = privKeyBuffer.toString('hex');
45723 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
45724 var hexAddress = addressBuffer.toString('hex');
45725 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
45726 address = ethUtil.addHexPrefix(checksumAddress);
45727 }
45728 addAddressToList(indexText, address, pubkey, privkey);
45729 }, 50)
45730 }
45731
45732 init();
45733
45734 }
45735
45736 function showMore() {
45737 var start = DOM.addresses.children().length;
45738 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
45739 if (isNaN(rowsToAdd)) {
45740 rowsToAdd = 20;
45741 DOM.rowsToAdd.val("20");
45742 }
45743 if (rowsToAdd > 200) {
45744 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
45745 msg += "Do you want to continue?";
45746 if (!confirm(msg)) {
45747 return;
45748 }
45749 }
45750 displayAddresses(start, rowsToAdd);
45751 }
45752
45753 function clearDisplay() {
45754 clearAddressesList();
45755 clearKey();
45756 hideValidationError();
45757 }
45758
45759 function clearAddressesList() {
45760 DOM.addresses.empty();
45761 stopGenerating();
45762 }
45763
45764 function stopGenerating() {
45765 while (generationProcesses.length > 0) {
45766 var generation = generationProcesses.shift();
45767 generation.stop();
45768 }
45769 }
45770
45771 function clearKey() {
45772 DOM.rootKey.val("");
45773 DOM.extendedPrivKey.val("");
45774 DOM.extendedPubKey.val("");
45775 }
45776
45777 function addAddressToList(indexText, address, pubkey, privkey) {
45778 var row = $(addressRowTemplate.html());
45779 // Elements
45780 var indexCell = row.find(".index span");
45781 var addressCell = row.find(".address span");
45782 var pubkeyCell = row.find(".pubkey span");
45783 var privkeyCell = row.find(".privkey span");
45784 // Content
45785 indexCell.text(indexText);
45786 addressCell.text(address);
45787 pubkeyCell.text(pubkey);
45788 privkeyCell.text(privkey);
45789 // Visibility
45790 if (!showIndex) {
45791 indexCell.addClass("invisible");
45792 }
45793 if (!showAddress) {
45794 addressCell.addClass("invisible");
45795 }
45796 if (!showPubKey) {
45797 pubkeyCell.addClass("invisible");
45798 }
45799 if (!showPrivKey) {
45800 privkeyCell.addClass("invisible");
45801 }
45802 DOM.addresses.append(row);
45803 var rowShowQrEls = row.find("[data-show-qr]");
45804 setQrEvents(rowShowQrEls);
45805 }
45806
45807 function hasStrongRandom() {
45808 return 'crypto' in window && window['crypto'] !== null;
45809 }
45810
45811 function disableForms() {
45812 $("form").on("submit", function(e) {
45813 e.preventDefault();
45814 });
45815 }
45816
45817 function parseIntNoNaN(val, defaultVal) {
45818 var v = parseInt(val);
45819 if (isNaN(v)) {
45820 return defaultVal;
45821 }
45822 return v;
45823 }
45824
45825 function showPending() {
45826 DOM.feedback
45827 .text("Calculating...")
45828 .show();
45829 }
45830
45831 function findNearestWord(word) {
45832 var language = getLanguage();
45833 var words = WORDLISTS[language];
45834 var minDistance = 99;
45835 var closestWord = words[0];
45836 for (var i=0; i<words.length; i++) {
45837 var comparedTo = words[i];
45838 if (comparedTo.indexOf(word) == 0) {
45839 return comparedTo;
45840 }
45841 var distance = Levenshtein.get(word, comparedTo);
45842 if (distance < minDistance) {
45843 closestWord = comparedTo;
45844 minDistance = distance;
45845 }
45846 }
45847 return closestWord;
45848 }
45849
45850 function hidePending() {
45851 DOM.feedback
45852 .text("")
45853 .hide();
45854 }
45855
45856 function populateNetworkSelect() {
45857 for (var i=0; i<networks.length; i++) {
45858 var network = networks[i];
45859 var option = $("<option>");
45860 option.attr("value", i);
45861 option.text(network.name);
45862 DOM.phraseNetwork.append(option);
45863 }
45864 }
45865
45866 function populateClientSelect() {
45867 for (var i=0; i<clients.length; i++) {
45868 var client = clients[i];
45869 var option = $("<option>");
45870 option.attr("value", i);
45871 option.text(client.name);
45872 DOM.bip32Client.append(option);
45873 }
45874 }
45875
45876 function getLanguage() {
45877 var defaultLanguage = "english";
45878 // Try to get from existing phrase
45879 var language = getLanguageFromPhrase();
45880 // Try to get from url if not from phrase
45881 if (language.length == 0) {
45882 language = getLanguageFromUrl();
45883 }
45884 // Default to English if no other option
45885 if (language.length == 0) {
45886 language = defaultLanguage;
45887 }
45888 return language;
45889 }
45890
45891 function getLanguageFromPhrase(phrase) {
45892 // Check if how many words from existing phrase match a language.
45893 var language = "";
45894 if (!phrase) {
45895 phrase = DOM.phrase.val();
45896 }
45897 if (phrase.length > 0) {
45898 var words = phraseToWordArray(phrase);
45899 var languageMatches = {};
45900 for (l in WORDLISTS) {
45901 // Track how many words match in this language
45902 languageMatches[l] = 0;
45903 for (var i=0; i<words.length; i++) {
45904 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
45905 if (wordInLanguage) {
45906 languageMatches[l]++;
45907 }
45908 }
45909 // Find languages with most word matches.
45910 // This is made difficult due to commonalities between Chinese
45911 // simplified vs traditional.
45912 var mostMatches = 0;
45913 var mostMatchedLanguages = [];
45914 for (var l in languageMatches) {
45915 var numMatches = languageMatches[l];
45916 if (numMatches > mostMatches) {
45917 mostMatches = numMatches;
45918 mostMatchedLanguages = [l];
45919 }
45920 else if (numMatches == mostMatches) {
45921 mostMatchedLanguages.push(l);
45922 }
45923 }
45924 }
45925 if (mostMatchedLanguages.length > 0) {
45926 // Use first language and warn if multiple detected
45927 language = mostMatchedLanguages[0];
45928 if (mostMatchedLanguages.length > 1) {
45929 console.warn("Multiple possible languages");
45930 console.warn(mostMatchedLanguages);
45931 }
45932 }
45933 }
45934 return language;
45935 }
45936
45937 function getLanguageFromUrl() {
45938 for (var language in WORDLISTS) {
45939 if (window.location.hash.indexOf(language) > -1) {
45940 return language;
45941 }
45942 }
45943 return "";
45944 }
45945
45946 function setMnemonicLanguage() {
45947 var language = getLanguage();
45948 // Load the bip39 mnemonic generator for this language if required
45949 if (!(language in mnemonics)) {
45950 mnemonics[language] = new Mnemonic(language);
45951 }
45952 mnemonic = mnemonics[language];
45953 }
45954
45955 function convertPhraseToNewLanguage() {
45956 var oldLanguage = getLanguageFromPhrase();
45957 var newLanguage = getLanguageFromUrl();
45958 var oldPhrase = DOM.phrase.val();
45959 var oldWords = phraseToWordArray(oldPhrase);
45960 var newWords = [];
45961 for (var i=0; i<oldWords.length; i++) {
45962 var oldWord = oldWords[i];
45963 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
45964 var newWord = WORDLISTS[newLanguage][index];
45965 newWords.push(newWord);
45966 }
45967 newPhrase = wordArrayToPhrase(newWords);
45968 return newPhrase;
45969 }
45970
45971 // TODO look at jsbip39 - mnemonic.splitWords
45972 function phraseToWordArray(phrase) {
45973 var words = phrase.split(/\s/g);
45974 var noBlanks = [];
45975 for (var i=0; i<words.length; i++) {
45976 var word = words[i];
45977 if (word.length > 0) {
45978 noBlanks.push(word);
45979 }
45980 }
45981 return noBlanks;
45982 }
45983
45984 // TODO look at jsbip39 - mnemonic.joinWords
45985 function wordArrayToPhrase(words) {
45986 var phrase = words.join(" ");
45987 var language = getLanguageFromPhrase(phrase);
45988 if (language == "japanese") {
45989 phrase = words.join("\u3000");
45990 }
45991 return phrase;
45992 }
45993
45994 function isUsingOwnEntropy() {
45995 return DOM.useEntropy.prop("checked");
45996 }
45997
45998 function setMnemonicFromEntropy() {
45999 clearEntropyFeedback();
46000 // Get entropy value
46001 var entropyStr = DOM.entropy.val();
46002 // Work out minimum base for entropy
46003 var entropy = Entropy.fromString(entropyStr);
46004 if (entropy.binaryStr.length == 0) {
46005 return;
46006 }
46007 // Show entropy details
46008 showEntropyFeedback(entropy);
46009 // Use entropy hash if not using raw entropy
46010 var bits = entropy.binaryStr;
46011 var mnemonicLength = DOM.entropyMnemonicLength.val();
46012 if (mnemonicLength != "raw") {
46013 // Get bits by hashing entropy with SHA256
46014 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
46015 var hex = sjcl.codec.hex.fromBits(hash);
46016 bits = BigInteger.parse(hex, 16).toString(2);
46017 while (bits.length % 256 != 0) {
46018 bits = "0" + bits;
46019 }
46020 // Truncate hash to suit number of words
46021 mnemonicLength = parseInt(mnemonicLength);
46022 var numberOfBits = 32 * mnemonicLength / 3;
46023 bits = bits.substring(0, numberOfBits);
46024 }
46025 // Discard trailing entropy
46026 var bitsToUse = Math.floor(bits.length / 32) * 32;
46027 var start = bits.length - bitsToUse;
46028 var binaryStr = bits.substring(start);
46029 // Convert entropy string to numeric array
46030 var entropyArr = [];
46031 for (var i=0; i<binaryStr.length / 8; i++) {
46032 var byteAsBits = binaryStr.substring(i*8, i*8+8);
46033 var entropyByte = parseInt(byteAsBits, 2);
46034 entropyArr.push(entropyByte)
46035 }
46036 // Convert entropy array to mnemonic
46037 var phrase = mnemonic.toMnemonic(entropyArr);
46038 // Set the mnemonic in the UI
46039 DOM.phrase.val(phrase);
46040 }
46041
46042 function clearEntropyFeedback() {
46043 DOM.entropyStrength.text("...");
46044 DOM.entropyType.text("");
46045 DOM.entropyWordCount.text("0");
46046 DOM.entropyEventCount.text("0");
46047 DOM.entropyBitsPerEvent.text("0");
46048 DOM.entropyBits.text("0");
46049 DOM.entropyFiltered.html("&nbsp;");
46050 DOM.entropyBinary.html("&nbsp;");
46051 }
46052
46053 function showEntropyFeedback(entropy) {
46054 var numberOfBits = entropy.binaryStr.length;
46055 var strength = "extremely weak";
46056 if (numberOfBits >= 64) {
46057 strength = "very weak";
46058 }
46059 if (numberOfBits >= 96) {
46060 strength = "weak";
46061 }
46062 if (numberOfBits >= 128) {
46063 strength = "strong";
46064 }
46065 if (numberOfBits >= 160) {
46066 strength = "very strong";
46067 }
46068 if (numberOfBits >= 192) {
46069 strength = "extremely strong";
46070 }
46071 // If time to crack is less than one day, and password is considered
46072 // strong or better based on the number of bits, rename strength to
46073 // 'easily cracked'.
46074 try {
46075 var z = zxcvbn(entropy.base.parts.join(""));
46076 var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
46077 if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
46078 strength = "easily cracked";
46079 if (z.feedback.warning != "") {
46080 strength = strength + " - " + z.feedback.warning;
46081 };
46082 }
46083 }
46084 catch (e) {
46085 strength = "unknown";
46086 console.log("Error detecting entropy strength with zxcvbn:");
46087 console.log(e);
46088 }
46089 var entropyTypeStr = getEntropyTypeStr(entropy);
46090 var wordCount = Math.floor(numberOfBits / 32) * 3;
46091 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
46092 DOM.entropyFiltered.html(entropy.cleanHtml);
46093 DOM.entropyType.text(entropyTypeStr);
46094 DOM.entropyStrength.text(strength);
46095 DOM.entropyEventCount.text(entropy.base.ints.length);
46096 DOM.entropyBits.text(numberOfBits);
46097 DOM.entropyWordCount.text(wordCount);
46098 DOM.entropyBinary.text(entropy.binaryStr);
46099 DOM.entropyBitsPerEvent.text(bitsPerEvent);
46100 }
46101
46102 function getEntropyTypeStr(entropy) {
46103 var typeStr = entropy.base.str;
46104 // Add some detail if these are cards
46105 if (entropy.base.asInt == 52) {
46106 var cardDetail = []; // array of message strings
46107 // Detect duplicates
46108 var dupes = [];
46109 var dupeTracker = {};
46110 for (var i=0; i<entropy.base.parts.length; i++) {
46111 var card = entropy.base.parts[i];
46112 var cardUpper = card.toUpperCase();
46113 if (cardUpper in dupeTracker) {
46114 dupes.push(card);
46115 }
46116 dupeTracker[cardUpper] = true;
46117 }
46118 if (dupes.length > 0) {
46119 var dupeWord = "duplicates";
46120 if (dupes.length == 1) {
46121 dupeWord = "duplicate";
46122 }
46123 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
46124 if (dupes.length > 3) {
46125 msg += "...";
46126 }
46127 cardDetail.push(msg);
46128 }
46129 // Detect full deck
46130 var uniqueCards = [];
46131 for (var uniqueCard in dupeTracker) {
46132 uniqueCards.push(uniqueCard);
46133 }
46134 if (uniqueCards.length == 52) {
46135 cardDetail.unshift("full deck");
46136 }
46137 // Detect missing cards
46138 var values = "A23456789TJQK";
46139 var suits = "CDHS";
46140 var missingCards = [];
46141 for (var i=0; i<suits.length; i++) {
46142 for (var j=0; j<values.length; j++) {
46143 var card = values[j] + suits[i];
46144 if (!(card in dupeTracker)) {
46145 missingCards.push(card);
46146 }
46147 }
46148 }
46149 // Display missing cards if six or less, ie clearly going for full deck
46150 if (missingCards.length > 0 && missingCards.length <= 6) {
46151 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
46152 if (missingCards.length > 3) {
46153 msg += "...";
46154 }
46155 cardDetail.push(msg);
46156 }
46157 // Add card details to typeStr
46158 if (cardDetail.length > 0) {
46159 typeStr += " (" + cardDetail.join(", ") + ")";
46160 }
46161 }
46162 return typeStr;
46163 }
46164
46165 function setQrEvents(els) {
46166 els.on("mouseenter", createQr);
46167 els.on("mouseleave", destroyQr);
46168 els.on("click", toggleQr);
46169 }
46170
46171 function createQr(e) {
46172 var content = e.target.textContent || e.target.value;
46173 if (content) {
46174 var size = 130;
46175 DOM.qrImage.qrcode({width: size, height: size, text: content});
46176 if (!showQr) {
46177 DOM.qrHider.addClass("hidden");
46178 }
46179 else {
46180 DOM.qrHider.removeClass("hidden");
46181 }
46182 DOM.qrContainer.removeClass("hidden");
46183 }
46184 }
46185
46186 function destroyQr() {
46187 DOM.qrImage.text("");
46188 DOM.qrContainer.addClass("hidden");
46189 }
46190
46191 function toggleQr() {
46192 showQr = !showQr;
46193 DOM.qrHider.toggleClass("hidden");
46194 DOM.qrHint.toggleClass("hidden");
46195 }
46196
46197 function bip44TabSelected() {
46198 return DOM.bip44tab.hasClass("active");
46199 }
46200
46201 function bip32TabSelected() {
46202 return DOM.bip32tab.hasClass("active");
46203 }
46204
46205 var networks = [
46206 {
46207 name: "Bitcoin",
46208 onSelect: function() {
46209 network = bitcoin.networks.bitcoin;
46210 DOM.bip44coin.val(0);
46211 },
46212 },
46213 {
46214 name: "Bitcoin Testnet",
46215 onSelect: function() {
46216 network = bitcoin.networks.testnet;
46217 DOM.bip44coin.val(1);
46218 },
46219 },
46220 {
46221 name: "CLAM",
46222 onSelect: function() {
46223 network = bitcoin.networks.clam;
46224 DOM.bip44coin.val(23);
46225 },
46226 },
46227 {
46228 name: "Dogecoin",
46229 onSelect: function() {
46230 network = bitcoin.networks.dogecoin;
46231 DOM.bip44coin.val(3);
46232 },
46233 },
46234 {
46235 name: "DASH",
46236 onSelect: function() {
46237 network = bitcoin.networks.dash;
46238 DOM.bip44coin.val(5);
46239 },
46240 },
46241 {
46242 name: "Ethereum",
46243 onSelect: function() {
46244 network = bitcoin.networks.bitcoin;
46245 DOM.bip44coin.val(60);
46246 },
46247 },
46248 {
46249 name: "GAME",
46250 onSelect: function() {
46251 network = bitcoin.networks.game;
46252 DOM.bip44coin.val(101);
46253 },
46254 },
46255 {
46256 name: "Jumbucks",
46257 onSelect: function() {
46258 network = bitcoin.networks.jumbucks;
46259 DOM.bip44coin.val(26);
46260 },
46261 },
46262 {
46263 name: "Litecoin",
46264 onSelect: function() {
46265 network = bitcoin.networks.litecoin;
46266 DOM.bip44coin.val(2);
46267 },
46268 },
46269 {
46270 name: "Namecoin",
46271 onSelect: function() {
46272 network = bitcoin.networks.namecoin;
46273 DOM.bip44coin.val(7);
46274 },
46275 },
46276 {
46277 name: "Peercoin",
46278 onSelect: function() {
46279 network = bitcoin.networks.peercoin;
46280 DOM.bip44coin.val(6);
46281 },
46282 },
46283 {
46284 name: "ShadowCash",
46285 onSelect: function() {
46286 network = bitcoin.networks.shadow;
46287 DOM.bip44coin.val(35);
46288 },
46289 },
46290 {
46291 name: "ShadowCash Testnet",
46292 onSelect: function() {
46293 network = bitcoin.networks.shadowtn;
46294 DOM.bip44coin.val(1);
46295 },
46296 },
46297 {
46298 name: "Viacoin",
46299 onSelect: function() {
46300 network = bitcoin.networks.viacoin;
46301 DOM.bip44coin.val(14);
46302 },
46303 },
46304 {
46305 name: "Viacoin Testnet",
46306 onSelect: function() {
46307 network = bitcoin.networks.viacointestnet;
46308 DOM.bip44coin.val(1);
46309 },
46310 },
46311 ]
46312
46313 var clients = [
46314 {
46315 name: "Bitcoin Core",
46316 onSelect: function() {
46317 DOM.bip32path.val("m/0'/0'");
46318 DOM.hardenedAddresses.prop('checked', true);
46319 },
46320 },
46321 {
46322 name: "blockchain.info",
46323 onSelect: function() {
46324 DOM.bip32path.val("m/44'/0'/0'");
46325 DOM.hardenedAddresses.prop('checked', false);
46326 },
46327 },
46328 {
46329 name: "MultiBit HD",
46330 onSelect: function() {
46331 DOM.bip32path.val("m/0'/0");
46332 DOM.hardenedAddresses.prop('checked', false);
46333 },
46334 }
46335 ]
46336
46337 init();
46338
46339 })();
46340 </script>
46341 </body>
46342 </html>