]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Public key column in table, shown as hex
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
3af2954a 15
ab78acc6
IC
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
d5dc92fd
IC
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
0515eeec
IC
47 .phrase {
48 word-break: keep-all;
49 }
b0818b31
IC
50 .strength {
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
54 }
0515eeec
IC
55 .languages * {
56 padding-left: 10px;
57 }
ab78acc6
IC
58 </style>
59 </head>
60 <body>
61 <div class="container">
3af2954a 62
ab78acc6
IC
63 <h1 class="text-center">Mnemonic Code Converter</h1>
64 <hr>
65 <div class="row">
66 <div class="col-md-12">
67 <h2>Mnemonic</h2>
68 <form class="form-horizontal" role="form">
69 <div class="col-sm-2"></div>
70 <div class="col-sm-10">
71 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
72 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
73 </div>
74 <div class="form-group">
b0818b31 75 <label class="col-sm-2 control-label"></label>
ab78acc6 76 <div class="col-sm-10">
b0818b31
IC
77 <div class="form-inline">
78 <div class="input-group-inline">
79 <button class="btn generate">Generate</button>
80 <span>a random</span>
81 <select id="strength" class="strength form-control">
82 <option value="3">3</option>
83 <option value="6">6</option>
84 <option value="9">9</option>
85 <option value="12">12</option>
86 <option value="15" selected>15</option>
87 <option value="18">18</option>
88 <option value="21">21</option>
89 <option value="24">24</option>
90 </select>
91 word mnemonic, or enter your own below.
92 </div>
93 </div>
ab78acc6 94 </div>
0515eeec
IC
95 </div>
96 <div class="form-group">
97 <label class="col-sm-2 control-label"></label>
98 <div class="col-sm-10 languages">
99 <a href="#english">English</a>
100 <a href="#japanese" title="Japanese">日本語</a>
0515eeec
IC
101 <a href="#spanish" title="Spanish">Español</a>
102 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
103 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
104 <a href="#french" title="French">Français</a>
105 <a href="#italian" title="Italian">Italiano</a>
106 </div>
ab78acc6
IC
107 </div>
108 <div class="form-group">
b0818b31 109 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 110 <div class="col-sm-10">
b0818b31 111 <textarea id="phrase" class="phrase form-control"></textarea>
ab78acc6
IC
112 </div>
113 </div>
114 <div class="form-group">
115 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
116 <div class="col-sm-10">
117 <textarea id="passphrase" class="passphrase form-control"></textarea>
118 </div>
119 </div>
73161a92
IC
120 <div class="form-group">
121 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
122 <div class="col-sm-10">
123 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
124 </div>
125 </div>
ab78acc6
IC
126 <div class="form-group">
127 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
128 <div class="col-sm-10">
129 <select id="network-phrase" class="network form-control">
130 <!-- populated by javascript -->
131 </select>
132 </div>
133 </div>
134 <div class="form-group">
135 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
136 <div class="col-sm-10">
efe41586 137 <textarea id="root-key" class="root-key form-control"></textarea>
ab78acc6
IC
138 </div>
139 </div>
140 </form>
141 </div>
142 </div>
3af2954a 143
ab78acc6 144 <hr>
3af2954a 145
ab78acc6
IC
146 <div class="row">
147 <div class="col-md-12">
148 <h2>Derivation Path</h2>
149 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 150 <li id="bip44-tab" class="active">
ab78acc6
IC
151 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
152 </li>
153 <li id="bip32-tab">
154 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
155 </li>
156 </ul>
157 <div class="derivation-type tab-content">
d5dc92fd 158 <div id="bip44" class="tab-pane active">
ab78acc6
IC
159 <form class="form-horizontal" role="form">
160 <br>
161 <div class="col-sm-2"></div>
162 <div class="col-sm-10">
163 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
164 </div>
165 <div class="form-group">
166 <label for="purpose" class="col-sm-2 control-label">
167 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
168 </label>
169 <div class="col-sm-10">
170 <input id="purpose" type="text" class="purpose form-control" value="44">
171 </div>
172 </div>
173 <div class="form-group">
174 <label for="coin" class="col-sm-2 control-label">
175 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
176 </label>
177 <div class="col-sm-10">
178 <input id="coin" type="text" class="coin form-control" value="0">
179 </div>
180 </div>
181 <div class="form-group">
182 <label for="account" class="col-sm-2 control-label">
183 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
184 </label>
185 <div class="col-sm-10">
186 <input id="account" type="text" class="account form-control" value="0">
187 </div>
188 </div>
189 <div class="form-group">
190 <label for="change" class="col-sm-2 control-label">
191 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
192 </label>
193 <div class="col-sm-10">
194 <input id="change" type="text" class="change form-control" value="0">
195 </div>
196 </div>
197 <div class="form-group">
198 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
199 <div class="col-sm-10">
200 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
201 </div>
202 </div>
203 </form>
204 </div>
205 <div id="bip32" class="tab-pane">
206 <form class="form-horizontal" role="form">
207 <br>
208 <div class="col-sm-2"></div>
209 <div class="col-sm-10">
210 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
211 </div>
212 <div class="form-group">
213 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
214 <div class="col-sm-10">
215 <input id="bip32-path" type="text" class="path form-control" value="m/0">
216 </div>
217 </div>
1975bfbc
IC
218 <div class="form-group">
219 <div class="col-sm-2"></div>
220 <label class="col-sm-10">
221 <input class="hardened-addresses" type="checkbox">
222 Use hardened addresses
223 </label>
224 </div>
d5dc92fd
IC
225 <div class="form-group">
226 <label class="col-sm-2 control-label">Hive Wallet</label>
227 <div class="col-sm-10">
228 <p class="form-control no-border">
229 Use path <code>m/0'/0</code>.
230 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
231 </p>
232 </div>
233 </div>
234 <div class="form-group">
235 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
236 <div class="col-sm-10">
237 <p class="form-control no-border">
238 Use path <code>m/44'/0'/0'/0</code>.
239 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
240 </p>
241 </div>
242 </div>
1975bfbc
IC
243 <div class="form-group">
244 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
245 <div class="col-sm-10">
246 <p class="form-control no-border">
247 Use path <code>m/0'/0'</code> with hardened addresses.
248 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
249 </p>
250 </div>
251 </div>
aa51da11
IC
252 <div class="form-group">
253 <label class="col-sm-2 control-label">Block Explorers</label>
254 <div class="col-sm-10">
255 <p class="form-control no-border">
256 Use path <code>m/44'/0'/0'</code>.
257 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
258 </p>
259 </div>
260 </div>
ab78acc6
IC
261 </form>
262 </div>
263 </div>
264 <form class="form-horizontal" role="form">
265 <div class="form-group">
266 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
267 <div class="col-sm-10">
268 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
269 </div>
270 </div>
271 <div class="form-group">
272 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
273 <div class="col-sm-10">
274 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
275 </div>
276 </div>
277 </form>
278 </div>
279 </div>
3af2954a 280
ab78acc6 281 <hr>
3af2954a 282
ab78acc6
IC
283 <div class="row">
284 <div class="col-md-12">
285 <h2>Derived Addresses</h2>
286 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
287 <table class="table table-striped">
288 <thead>
289 <th>
290 <div class="input-group">
ae30fed8 291 Path&nbsp;&nbsp;
ab78acc6
IC
292 <button class="index-toggle">Toggle</button>
293 </div>
294 </th>
295 <th>
296 <div class="input-group">
297 Address&nbsp;&nbsp;
298 <button class="address-toggle">Toggle</button>
299 </div>
300 </th>
1b12b2f5
IC
301 <th>
302 <div class="input-group">
303 Public Key&nbsp;&nbsp;
304 <button class="public-key-toggle">Toggle</button>
305 </div>
306 </th>
ab78acc6
IC
307 <th>
308 <div class="input-group">
309 Private Key&nbsp;&nbsp;
310 <button class="private-key-toggle">Toggle</button>
311 </div>
312 </th>
313 </thead>
314 <tbody class="addresses">
315 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
316 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
317 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
318 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
319 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
320 </tbody>
321 </table>
322 </div>
323 </div>
324 <span>Show next </button>
325 <input type="number" class="rows-to-add" value="20">
326 <button class="more">Show</button>
3af2954a 327
ab78acc6 328 <hr>
3af2954a 329
ab78acc6
IC
330 <div class="row">
331 <div class="col-md-12">
332 <h2>More info</h2>
333 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
334 <p>
335 Read more at the
336 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
337 </p>
338 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
339 <p>
340 Read more at the
341 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
342 and see the demo at
343 <a href="http://bip32.org/" target="_blank">bip32.org</a>
344 </p>
345 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
346 <p>
347 Read more at the
348 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
349 </p>
350 <h3>Private Keys</h3>
351 <p>
352 Use private keys at
353 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
354 but be careful - it can be easy to make mistakes if you
355 don't know what you're doing
356 </p>
357 </div>
358 </div>
3af2954a 359
ab78acc6 360 <hr>
3af2954a 361
ab78acc6
IC
362 <div class="row">
363 <div class="col-md-12">
3af2954a 364
ab78acc6 365 <h2>Offline Usage</h2>
3af2954a 366
ab78acc6
IC
367 <p>
368 You can use this tool without having to be online.
369 </p>
370 <p>
371 In your browser, select file save-as, and save this page
372 as a file.
373 </p>
374 <p>
375 Double-click that file to open it in a browser
376 on any offline computer.
377 </p>
378 <p>
379 Alternatively, download it from
b630f83d
IC
380 <a href="https://github.com/iancoleman/bip39">
381 https://github.com/iancoleman/bip39
ab78acc6 382 </a>
3af2954a 383
ab78acc6
IC
384 </div>
385 </div>
3af2954a 386
ab78acc6 387 <hr>
3af2954a 388
ab78acc6
IC
389 <div class="row">
390 <div class="col-md-12">
3af2954a 391
ab78acc6 392 <h2>This project is 100% open-source code</h2>
3af2954a 393
ab78acc6
IC
394 <p>
395 <span>Get the source code at - </span>
b630f83d
IC
396 <a href="https://github.com/iancoleman/bip39" target="_blank">
397 https://github.com/iancoleman/bip39
ab78acc6
IC
398 </a>
399 </p>
3af2954a 400
ab78acc6 401 <h3>Libraries</h3>
3af2954a 402
ab78acc6
IC
403 <p>
404 <span>BitcoinJS - </span>
405 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
406 https://github.com/bitcoinjs/bitcoinjs-lib
407 </a>
408 </p>
3af2954a 409
ab78acc6
IC
410 <p>
411 <span>jsBIP39 - </span>
412 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
413 https://github.com/iancoleman/jsbip39
414 </a>
415 </p>
3af2954a 416
ab78acc6
IC
417 <p>
418 <span>sjcl - </span>
419 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
420 https://github.com/bitwiseshiftleft/sjcl
421 </a>
422 </p>
3af2954a 423
ab78acc6
IC
424 <p>
425 <span>jQuery - </span>
426 <a href="https://jquery.com/" target="_blank">
427 https://jquery.com/
428 </a>
429 </p>
3af2954a 430
ab78acc6
IC
431 <p>
432 <span>Twitter Bootstrap - </span>
433 <a href="http://getbootstrap.com/" target="_blank">
434 http://getbootstrap.com/
435 </a>
436 </p>
3af2954a 437
ab78acc6
IC
438 </div>
439 </div>
3af2954a 440
ab78acc6 441 </div>
3af2954a 442
ab78acc6
IC
443 <div class="feedback-container">
444 <div class="feedback">Loading...</div>
445 </div>
3af2954a 446
ab78acc6
IC
447 <script type="text/template" id="address-row-template">
448 <tr>
449 <td class="index"><span></span></td>
450 <td class="address"><span></span></td>
1b12b2f5 451 <td class="pubkey"><span></span></td>
ab78acc6
IC
452 <td class="privkey"><span></span></td>
453 </tr>
454 </script>
455 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
456!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)
457},_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))
458},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});
459</script>
460 <script>/*!
461 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
462 * Copyright 2011-2014 Twitter, Inc.
463 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
464 */
465if("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>
563e401a
IC
466 <script>(function() {
467 'use strict';
468
469 /**
470 * Extend an Object with another Object's properties.
471 *
472 * The source objects are specified as additional arguments.
473 *
474 * @param dst Object the object to extend.
475 *
476 * @return Object the final object.
477 */
478 var _extend = function(dst) {
479 var sources = Array.prototype.slice.call(arguments, 1);
480 for (var i=0; i<sources.length; ++i) {
481 var src = sources[i];
482 for (var p in src) {
483 if (src.hasOwnProperty(p)) dst[p] = src[p];
484 }
485 }
486 return dst;
487 };
488
489
490 /**
491 * Defer execution of given function.
492 * @param {Function} func
493 */
494 var _defer = function(func) {
495 if (typeof setImmediate === 'function') {
496 return setImmediate(func);
497 } else {
498 return setTimeout(func, 0);
499 }
500 };
501
502 /**
503 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
504 */
505 var Levenshtein = {
506 /**
507 * Calculate levenshtein distance of the two strings.
508 *
509 * @param str1 String the first string.
510 * @param str2 String the second string.
511 * @return Integer the levenshtein distance (0 and above).
512 */
513 get: function(str1, str2) {
514 // base cases
515 if (str1 === str2) return 0;
516 if (str1.length === 0) return str2.length;
517 if (str2.length === 0) return str1.length;
518
519 // two rows
520 var prevRow = new Array(str2.length + 1),
521 curCol, nextCol, i, j, tmp;
522
523 // initialise previous row
524 for (i=0; i<prevRow.length; ++i) {
525 prevRow[i] = i;
526 }
527
528 // calculate current row distance from previous row
529 for (i=0; i<str1.length; ++i) {
530 nextCol = i + 1;
531
532 for (j=0; j<str2.length; ++j) {
533 curCol = nextCol;
534
535 // substution
536 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
537 // insertion
538 tmp = curCol + 1;
539 if (nextCol > tmp) {
540 nextCol = tmp;
541 }
542 // deletion
543 tmp = prevRow[j + 1] + 1;
544 if (nextCol > tmp) {
545 nextCol = tmp;
546 }
547
548 // copy current col value into previous (in preparation for next iteration)
549 prevRow[j] = curCol;
550 }
551
552 // copy last col value into previous (in preparation for next iteration)
553 prevRow[j] = nextCol;
554 }
555
556 return nextCol;
557 },
558
559 /**
560 * Asynchronously calculate levenshtein distance of the two strings.
561 *
562 * @param str1 String the first string.
563 * @param str2 String the second string.
564 * @param cb Function callback function with signature: function(Error err, int distance)
565 * @param [options] Object additional options.
566 * @param [options.progress] Function progress callback with signature: function(percentComplete)
567 */
568 getAsync: function(str1, str2, cb, options) {
569 options = _extend({}, {
570 progress: null
571 }, options);
572
573 // base cases
574 if (str1 === str2) return cb(null, 0);
575 if (str1.length === 0) return cb(null, str2.length);
576 if (str2.length === 0) return cb(null, str1.length);
577
578 // two rows
579 var prevRow = new Array(str2.length + 1),
580 curCol, nextCol,
581 i, j, tmp,
582 startTime, currentTime;
583
584 // initialise previous row
585 for (i=0; i<prevRow.length; ++i) {
586 prevRow[i] = i;
587 }
588
589 nextCol = 1;
590 i = 0;
591 j = -1;
592
593 var __calculate = function() {
594 // reset timer
595 startTime = new Date().valueOf();
596 currentTime = startTime;
597
598 // keep going until one second has elapsed
599 while (currentTime - startTime < 1000) {
600 // reached end of current row?
601 if (str2.length <= (++j)) {
602 // copy current into previous (in preparation for next iteration)
603 prevRow[j] = nextCol;
604
605 // if already done all chars
606 if (str1.length <= (++i)) {
607 return cb(null, nextCol);
608 }
609 // else if we have more left to do
610 else {
611 nextCol = i + 1;
612 j = 0;
613 }
614 }
615
616 // calculation
617 curCol = nextCol;
618
619 // substution
620 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
621 // insertion
622 tmp = curCol + 1;
623 if (nextCol > tmp) {
624 nextCol = tmp;
625 }
626 // deletion
627 tmp = prevRow[j + 1] + 1;
628 if (nextCol > tmp) {
629 nextCol = tmp;
630 }
631
632 // copy current into previous (in preparation for next iteration)
633 prevRow[j] = curCol;
634
635 // get current time
636 currentTime = new Date().valueOf();
637 }
638
639 // send a progress update?
640 if (null !== options.progress) {
641 try {
642 options.progress.call(null, (i * 100.0/ str1.length));
643 } catch (err) {
644 return cb('Progress callback: ' + err.toString());
645 }
646 }
647
648 // next iteration
649 _defer(__calculate);
650 };
651
652 __calculate();
653 }
654
655 };
656
657 // amd
658 if (typeof define !== "undefined" && define !== null && define.amd) {
659 define(function() {
660 return Levenshtein;
661 });
662 }
663 // commonjs
664 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
665 module.exports = Levenshtein;
666 }
667 // web worker
668 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
669 self.Levenshtein = Levenshtein;
670 }
671 // browser main thread
672 else if (typeof window !== "undefined" && window !== null) {
673 window.Levenshtein = Levenshtein;
674 }
675}());
676
677</script>
ab78acc6
IC
678 <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){
679// (public) Constructor
680function BigInteger(a, b, c) {
681 if (!(this instanceof BigInteger))
682 return new BigInteger(a, b, c)
3af2954a 683
ab78acc6
IC
684 if (a != null) {
685 if ("number" == typeof a) this.fromNumber(a, b, c)
686 else if (b == null && "string" != typeof a) this.fromString(a, 256)
687 else this.fromString(a, b)
688 }
689}
3af2954a 690
ab78acc6 691var proto = BigInteger.prototype
3af2954a 692
ab78acc6
IC
693// duck-typed isBigInteger
694proto.__bigi = require('../package.json').version
695BigInteger.isBigInteger = function (obj, check_ver) {
696 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
697}
3af2954a 698
ab78acc6
IC
699// Bits per digit
700var dbits
3af2954a 701
ab78acc6
IC
702// am: Compute w_j += (x*this_i), propagate carries,
703// c is initial carry, returns final carry.
704// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
705// We need to select the fastest one that works in this environment.
3af2954a 706
ab78acc6
IC
707// am1: use a single mult and divide to get the high bits,
708// max digit bits should be 26 because
709// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
710function am1(i, x, w, j, c, n) {
711 while (--n >= 0) {
712 var v = x * this[i++] + w[j] + c
713 c = Math.floor(v / 0x4000000)
714 w[j++] = v & 0x3ffffff
3af2954a 715 }
ab78acc6
IC
716 return c
717}
718// am2 avoids a big mult-and-extract completely.
719// Max digit bits should be <= 30 because we do bitwise ops
720// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
721function am2(i, x, w, j, c, n) {
722 var xl = x & 0x7fff,
723 xh = x >> 15
724 while (--n >= 0) {
725 var l = this[i] & 0x7fff
726 var h = this[i++] >> 15
727 var m = xh * l + h * xl
728 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
729 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
730 w[j++] = l & 0x3fffffff
731 }
732 return c
733}
734// Alternately, set max digit bits to 28 since some
735// browsers slow down when dealing with 32-bit numbers.
736function am3(i, x, w, j, c, n) {
737 var xl = x & 0x3fff,
738 xh = x >> 14
739 while (--n >= 0) {
740 var l = this[i] & 0x3fff
741 var h = this[i++] >> 14
742 var m = xh * l + h * xl
743 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
744 c = (l >> 28) + (m >> 14) + xh * h
745 w[j++] = l & 0xfffffff
3af2954a 746 }
ab78acc6
IC
747 return c
748}
3af2954a 749
ab78acc6
IC
750// wtf?
751BigInteger.prototype.am = am1
752dbits = 26
3af2954a 753
ab78acc6
IC
754BigInteger.prototype.DB = dbits
755BigInteger.prototype.DM = ((1 << dbits) - 1)
756var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 757
ab78acc6
IC
758var BI_FP = 52
759BigInteger.prototype.FV = Math.pow(2, BI_FP)
760BigInteger.prototype.F1 = BI_FP - dbits
761BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 762
ab78acc6
IC
763// Digit conversions
764var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
765var BI_RC = new Array()
766var rr, vv
767rr = "0".charCodeAt(0)
768for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
769rr = "a".charCodeAt(0)
770for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
771rr = "A".charCodeAt(0)
772for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 773
ab78acc6
IC
774function int2char(n) {
775 return BI_RM.charAt(n)
776}
3af2954a 777
ab78acc6
IC
778function intAt(s, i) {
779 var c = BI_RC[s.charCodeAt(i)]
780 return (c == null) ? -1 : c
781}
3af2954a 782
ab78acc6
IC
783// (protected) copy this to r
784function bnpCopyTo(r) {
785 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
786 r.t = this.t
787 r.s = this.s
788}
3af2954a 789
ab78acc6
IC
790// (protected) set from integer value x, -DV <= x < DV
791function bnpFromInt(x) {
792 this.t = 1
793 this.s = (x < 0) ? -1 : 0
794 if (x > 0) this[0] = x
795 else if (x < -1) this[0] = x + DV
796 else this.t = 0
797}
3af2954a 798
ab78acc6
IC
799// return bigint initialized to value
800function nbv(i) {
801 var r = new BigInteger()
802 r.fromInt(i)
803 return r
804}
3af2954a 805
ab78acc6
IC
806// (protected) set from string and radix
807function bnpFromString(s, b) {
808 var self = this
3af2954a 809
ab78acc6
IC
810 var k
811 if (b == 16) k = 4
812 else if (b == 8) k = 3
813 else if (b == 256) k = 8; // byte array
814 else if (b == 2) k = 1
815 else if (b == 32) k = 5
816 else if (b == 4) k = 2
817 else {
818 self.fromRadix(s, b)
819 return
820 }
821 self.t = 0
822 self.s = 0
823 var i = s.length,
824 mi = false,
825 sh = 0
826 while (--i >= 0) {
827 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
828 if (x < 0) {
829 if (s.charAt(i) == "-") mi = true
830 continue
831 }
832 mi = false
833 if (sh == 0)
834 self[self.t++] = x
835 else if (sh + k > self.DB) {
836 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
837 self[self.t++] = (x >> (self.DB - sh))
838 } else
839 self[self.t - 1] |= x << sh
840 sh += k
841 if (sh >= self.DB) sh -= self.DB
842 }
843 if (k == 8 && (s[0] & 0x80) != 0) {
844 self.s = -1
845 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
846 }
847 self.clamp()
848 if (mi) BigInteger.ZERO.subTo(self, self)
849}
3af2954a 850
ab78acc6
IC
851// (protected) clamp off excess high words
852function bnpClamp() {
853 var c = this.s & this.DM
854 while (this.t > 0 && this[this.t - 1] == c)--this.t
855}
3af2954a 856
ab78acc6
IC
857// (public) return string representation in given radix
858function bnToString(b) {
859 var self = this
860 if (self.s < 0) return "-" + self.negate()
861 .toString(b)
862 var k
863 if (b == 16) k = 4
864 else if (b == 8) k = 3
865 else if (b == 2) k = 1
866 else if (b == 32) k = 5
867 else if (b == 4) k = 2
868 else return self.toRadix(b)
869 var km = (1 << k) - 1,
870 d, m = false,
871 r = "",
872 i = self.t
873 var p = self.DB - (i * self.DB) % k
874 if (i-- > 0) {
875 if (p < self.DB && (d = self[i] >> p) > 0) {
876 m = true
877 r = int2char(d)
878 }
879 while (i >= 0) {
880 if (p < k) {
881 d = (self[i] & ((1 << p) - 1)) << (k - p)
882 d |= self[--i] >> (p += self.DB - k)
883 } else {
884 d = (self[i] >> (p -= k)) & km
885 if (p <= 0) {
886 p += self.DB
887 --i
888 }
889 }
890 if (d > 0) m = true
891 if (m) r += int2char(d)
3af2954a 892 }
3af2954a 893 }
ab78acc6
IC
894 return m ? r : "0"
895}
3af2954a 896
ab78acc6
IC
897// (public) -this
898function bnNegate() {
899 var r = new BigInteger()
900 BigInteger.ZERO.subTo(this, r)
901 return r
902}
3af2954a 903
ab78acc6
IC
904// (public) |this|
905function bnAbs() {
906 return (this.s < 0) ? this.negate() : this
907}
3af2954a 908
ab78acc6
IC
909// (public) return + if this > a, - if this < a, 0 if equal
910function bnCompareTo(a) {
911 var r = this.s - a.s
912 if (r != 0) return r
913 var i = this.t
914 r = i - a.t
915 if (r != 0) return (this.s < 0) ? -r : r
916 while (--i >= 0)
917 if ((r = this[i] - a[i]) != 0) return r
918 return 0
919}
3af2954a 920
ab78acc6
IC
921// returns bit length of the integer x
922function nbits(x) {
923 var r = 1,
924 t
925 if ((t = x >>> 16) != 0) {
926 x = t
927 r += 16
928 }
929 if ((t = x >> 8) != 0) {
930 x = t
931 r += 8
932 }
933 if ((t = x >> 4) != 0) {
934 x = t
935 r += 4
936 }
937 if ((t = x >> 2) != 0) {
938 x = t
939 r += 2
3af2954a 940 }
ab78acc6
IC
941 if ((t = x >> 1) != 0) {
942 x = t
943 r += 1
944 }
945 return r
946}
947
948// (public) return the number of bits in "this"
949function bnBitLength() {
950 if (this.t <= 0) return 0
951 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
952}
3af2954a 953
ab78acc6
IC
954// (public) return the number of bytes in "this"
955function bnByteLength() {
956 return this.bitLength() >> 3
957}
3af2954a 958
ab78acc6
IC
959// (protected) r = this << n*DB
960function bnpDLShiftTo(n, r) {
961 var i
962 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
963 for (i = n - 1; i >= 0; --i) r[i] = 0
964 r.t = this.t + n
965 r.s = this.s
966}
3af2954a 967
ab78acc6
IC
968// (protected) r = this >> n*DB
969function bnpDRShiftTo(n, r) {
970 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
971 r.t = Math.max(this.t - n, 0)
972 r.s = this.s
973}
3af2954a 974
ab78acc6
IC
975// (protected) r = this << n
976function bnpLShiftTo(n, r) {
977 var self = this
978 var bs = n % self.DB
979 var cbs = self.DB - bs
980 var bm = (1 << cbs) - 1
981 var ds = Math.floor(n / self.DB),
982 c = (self.s << bs) & self.DM,
983 i
984 for (i = self.t - 1; i >= 0; --i) {
985 r[i + ds + 1] = (self[i] >> cbs) | c
986 c = (self[i] & bm) << bs
987 }
988 for (i = ds - 1; i >= 0; --i) r[i] = 0
989 r[ds] = c
990 r.t = self.t + ds + 1
991 r.s = self.s
992 r.clamp()
993}
3af2954a 994
ab78acc6
IC
995// (protected) r = this >> n
996function bnpRShiftTo(n, r) {
997 var self = this
998 r.s = self.s
999 var ds = Math.floor(n / self.DB)
1000 if (ds >= self.t) {
1001 r.t = 0
1002 return
3af2954a 1003 }
ab78acc6
IC
1004 var bs = n % self.DB
1005 var cbs = self.DB - bs
1006 var bm = (1 << bs) - 1
1007 r[0] = self[ds] >> bs
1008 for (var i = ds + 1; i < self.t; ++i) {
1009 r[i - ds - 1] |= (self[i] & bm) << cbs
1010 r[i - ds] = self[i] >> bs
1011 }
1012 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1013 r.t = self.t - ds
1014 r.clamp()
1015}
3af2954a 1016
ab78acc6
IC
1017// (protected) r = this - a
1018function bnpSubTo(a, r) {
1019 var self = this
1020 var i = 0,
1021 c = 0,
1022 m = Math.min(a.t, self.t)
1023 while (i < m) {
1024 c += self[i] - a[i]
1025 r[i++] = c & self.DM
1026 c >>= self.DB
1027 }
1028 if (a.t < self.t) {
1029 c -= a.s
1030 while (i < self.t) {
1031 c += self[i]
1032 r[i++] = c & self.DM
1033 c >>= self.DB
1034 }
1035 c += self.s
1036 } else {
1037 c += self.s
1038 while (i < a.t) {
1039 c -= a[i]
1040 r[i++] = c & self.DM
1041 c >>= self.DB
1042 }
1043 c -= a.s
1044 }
1045 r.s = (c < 0) ? -1 : 0
1046 if (c < -1) r[i++] = self.DV + c
1047 else if (c > 0) r[i++] = c
1048 r.t = i
1049 r.clamp()
1050}
3af2954a 1051
ab78acc6
IC
1052// (protected) r = this * a, r != this,a (HAC 14.12)
1053// "this" should be the larger one if appropriate.
1054function bnpMultiplyTo(a, r) {
1055 var x = this.abs(),
1056 y = a.abs()
1057 var i = x.t
1058 r.t = i + y.t
1059 while (--i >= 0) r[i] = 0
1060 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1061 r.s = 0
1062 r.clamp()
1063 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1064}
3af2954a 1065
ab78acc6
IC
1066// (protected) r = this^2, r != this (HAC 14.16)
1067function bnpSquareTo(r) {
1068 var x = this.abs()
1069 var i = r.t = 2 * x.t
1070 while (--i >= 0) r[i] = 0
1071 for (i = 0; i < x.t - 1; ++i) {
1072 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1073 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1074 r[i + x.t] -= x.DV
1075 r[i + x.t + 1] = 1
1076 }
1077 }
1078 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1079 r.s = 0
1080 r.clamp()
1081}
3af2954a 1082
ab78acc6
IC
1083// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1084// r != q, this != m. q or r may be null.
1085function bnpDivRemTo(m, q, r) {
1086 var self = this
1087 var pm = m.abs()
1088 if (pm.t <= 0) return
1089 var pt = self.abs()
1090 if (pt.t < pm.t) {
1091 if (q != null) q.fromInt(0)
1092 if (r != null) self.copyTo(r)
1093 return
1094 }
1095 if (r == null) r = new BigInteger()
1096 var y = new BigInteger(),
1097 ts = self.s,
1098 ms = m.s
1099 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1100 if (nsh > 0) {
1101 pm.lShiftTo(nsh, y)
1102 pt.lShiftTo(nsh, r)
1103 } else {
1104 pm.copyTo(y)
1105 pt.copyTo(r)
1106 }
1107 var ys = y.t
1108 var y0 = y[ys - 1]
1109 if (y0 == 0) return
1110 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1111 var d1 = self.FV / yt,
1112 d2 = (1 << self.F1) / yt,
1113 e = 1 << self.F2
1114 var i = r.t,
1115 j = i - ys,
1116 t = (q == null) ? new BigInteger() : q
1117 y.dlShiftTo(j, t)
1118 if (r.compareTo(t) >= 0) {
1119 r[r.t++] = 1
1120 r.subTo(t, r)
1121 }
1122 BigInteger.ONE.dlShiftTo(ys, t)
1123 t.subTo(y, y); // "negative" y so we can replace sub with am later
1124 while (y.t < ys) y[y.t++] = 0
1125 while (--j >= 0) {
1126 // Estimate quotient digit
1127 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1128 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1129 y.dlShiftTo(j, t)
1130 r.subTo(t, r)
1131 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1132 }
ab78acc6
IC
1133 }
1134 if (q != null) {
1135 r.drShiftTo(ys, q)
1136 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1137 }
1138 r.t = ys
1139 r.clamp()
1140 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1141 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1142}
3af2954a 1143
ab78acc6
IC
1144// (public) this mod a
1145function bnMod(a) {
1146 var r = new BigInteger()
1147 this.abs()
1148 .divRemTo(a, null, r)
1149 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1150 return r
1151}
3af2954a 1152
ab78acc6
IC
1153// Modular reduction using "classic" algorithm
1154function Classic(m) {
1155 this.m = m
1156}
3af2954a 1157
ab78acc6
IC
1158function cConvert(x) {
1159 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1160 else return x
1161}
1162
1163function cRevert(x) {
1164 return x
1165}
3af2954a 1166
ab78acc6
IC
1167function cReduce(x) {
1168 x.divRemTo(this.m, null, x)
1169}
3af2954a 1170
ab78acc6
IC
1171function cMulTo(x, y, r) {
1172 x.multiplyTo(y, r)
1173 this.reduce(r)
1174}
3af2954a 1175
ab78acc6
IC
1176function cSqrTo(x, r) {
1177 x.squareTo(r)
1178 this.reduce(r)
1179}
3af2954a 1180
ab78acc6
IC
1181Classic.prototype.convert = cConvert
1182Classic.prototype.revert = cRevert
1183Classic.prototype.reduce = cReduce
1184Classic.prototype.mulTo = cMulTo
1185Classic.prototype.sqrTo = cSqrTo
3af2954a 1186
ab78acc6
IC
1187// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1188// justification:
1189// xy == 1 (mod m)
1190// xy = 1+km
1191// xy(2-xy) = (1+km)(1-km)
1192// x[y(2-xy)] = 1-k^2m^2
1193// x[y(2-xy)] == 1 (mod m^2)
1194// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1195// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1196// JS multiply "overflows" differently from C/C++, so care is needed here.
1197function bnpInvDigit() {
1198 if (this.t < 1) return 0
1199 var x = this[0]
1200 if ((x & 1) == 0) return 0
1201 var y = x & 3; // y == 1/x mod 2^2
1202 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1203 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1204 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1205 // last step - calculate inverse mod DV directly
1206 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1207 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1208 // we really want the negative inverse, and -DV < y < DV
1209 return (y > 0) ? this.DV - y : -y
1210}
3af2954a 1211
ab78acc6
IC
1212// Montgomery reduction
1213function Montgomery(m) {
1214 this.m = m
1215 this.mp = m.invDigit()
1216 this.mpl = this.mp & 0x7fff
1217 this.mph = this.mp >> 15
1218 this.um = (1 << (m.DB - 15)) - 1
1219 this.mt2 = 2 * m.t
1220}
3af2954a 1221
ab78acc6
IC
1222// xR mod m
1223function montConvert(x) {
1224 var r = new BigInteger()
1225 x.abs()
1226 .dlShiftTo(this.m.t, r)
1227 r.divRemTo(this.m, null, r)
1228 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1229 return r
1230}
3af2954a 1231
ab78acc6
IC
1232// x/R mod m
1233function montRevert(x) {
1234 var r = new BigInteger()
1235 x.copyTo(r)
1236 this.reduce(r)
1237 return r
1238}
3af2954a 1239
ab78acc6
IC
1240// x = x/R mod m (HAC 14.32)
1241function montReduce(x) {
1242 while (x.t <= this.mt2) // pad x so am has enough room later
1243 x[x.t++] = 0
1244 for (var i = 0; i < this.m.t; ++i) {
1245 // faster way of calculating u0 = x[i]*mp mod DV
1246 var j = x[i] & 0x7fff
1247 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1248 // use am to combine the multiply-shift-add into one call
1249 j = i + this.m.t
1250 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1251 // propagate carry
1252 while (x[j] >= x.DV) {
1253 x[j] -= x.DV
1254 x[++j]++
1255 }
1256 }
1257 x.clamp()
1258 x.drShiftTo(this.m.t, x)
1259 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1260}
3af2954a 1261
ab78acc6
IC
1262// r = "x^2/R mod m"; x != r
1263function montSqrTo(x, r) {
1264 x.squareTo(r)
1265 this.reduce(r)
1266}
3af2954a 1267
ab78acc6
IC
1268// r = "xy/R mod m"; x,y != r
1269function montMulTo(x, y, r) {
1270 x.multiplyTo(y, r)
1271 this.reduce(r)
1272}
3af2954a 1273
ab78acc6
IC
1274Montgomery.prototype.convert = montConvert
1275Montgomery.prototype.revert = montRevert
1276Montgomery.prototype.reduce = montReduce
1277Montgomery.prototype.mulTo = montMulTo
1278Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1279
ab78acc6
IC
1280// (protected) true iff this is even
1281function bnpIsEven() {
1282 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1283}
3af2954a 1284
ab78acc6
IC
1285// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1286function bnpExp(e, z) {
1287 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1288 var r = new BigInteger(),
1289 r2 = new BigInteger(),
1290 g = z.convert(this),
1291 i = nbits(e) - 1
1292 g.copyTo(r)
1293 while (--i >= 0) {
1294 z.sqrTo(r, r2)
1295 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1296 else {
1297 var t = r
1298 r = r2
1299 r2 = t
3af2954a 1300 }
3af2954a 1301 }
ab78acc6
IC
1302 return z.revert(r)
1303}
3af2954a 1304
ab78acc6
IC
1305// (public) this^e % m, 0 <= e < 2^32
1306function bnModPowInt(e, m) {
1307 var z
1308 if (e < 256 || m.isEven()) z = new Classic(m)
1309 else z = new Montgomery(m)
1310 return this.exp(e, z)
1311}
3af2954a 1312
ab78acc6
IC
1313// protected
1314proto.copyTo = bnpCopyTo
1315proto.fromInt = bnpFromInt
1316proto.fromString = bnpFromString
1317proto.clamp = bnpClamp
1318proto.dlShiftTo = bnpDLShiftTo
1319proto.drShiftTo = bnpDRShiftTo
1320proto.lShiftTo = bnpLShiftTo
1321proto.rShiftTo = bnpRShiftTo
1322proto.subTo = bnpSubTo
1323proto.multiplyTo = bnpMultiplyTo
1324proto.squareTo = bnpSquareTo
1325proto.divRemTo = bnpDivRemTo
1326proto.invDigit = bnpInvDigit
1327proto.isEven = bnpIsEven
1328proto.exp = bnpExp
3af2954a 1329
ab78acc6
IC
1330// public
1331proto.toString = bnToString
1332proto.negate = bnNegate
1333proto.abs = bnAbs
1334proto.compareTo = bnCompareTo
1335proto.bitLength = bnBitLength
1336proto.byteLength = bnByteLength
1337proto.mod = bnMod
1338proto.modPowInt = bnModPowInt
3af2954a 1339
ab78acc6
IC
1340// (public)
1341function bnClone() {
1342 var r = new BigInteger()
1343 this.copyTo(r)
1344 return r
1345}
3af2954a 1346
ab78acc6
IC
1347// (public) return value as integer
1348function bnIntValue() {
1349 if (this.s < 0) {
1350 if (this.t == 1) return this[0] - this.DV
1351 else if (this.t == 0) return -1
1352 } else if (this.t == 1) return this[0]
1353 else if (this.t == 0) return 0
1354 // assumes 16 < DB < 32
1355 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1356}
3af2954a 1357
ab78acc6
IC
1358// (public) return value as byte
1359function bnByteValue() {
1360 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1361}
3af2954a 1362
ab78acc6
IC
1363// (public) return value as short (assumes DB>=16)
1364function bnShortValue() {
1365 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1366}
3af2954a 1367
ab78acc6
IC
1368// (protected) return x s.t. r^x < DV
1369function bnpChunkSize(r) {
1370 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1371}
3af2954a 1372
ab78acc6
IC
1373// (public) 0 if this == 0, 1 if this > 0
1374function bnSigNum() {
1375 if (this.s < 0) return -1
1376 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1377 else return 1
1378}
3af2954a 1379
ab78acc6
IC
1380// (protected) convert to radix string
1381function bnpToRadix(b) {
1382 if (b == null) b = 10
1383 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1384 var cs = this.chunkSize(b)
1385 var a = Math.pow(b, cs)
1386 var d = nbv(a),
1387 y = new BigInteger(),
1388 z = new BigInteger(),
1389 r = ""
1390 this.divRemTo(d, y, z)
1391 while (y.signum() > 0) {
1392 r = (a + z.intValue())
1393 .toString(b)
1394 .substr(1) + r
1395 y.divRemTo(d, y, z)
1396 }
1397 return z.intValue()
1398 .toString(b) + r
1399}
3af2954a 1400
ab78acc6
IC
1401// (protected) convert from radix string
1402function bnpFromRadix(s, b) {
1403 var self = this
1404 self.fromInt(0)
1405 if (b == null) b = 10
1406 var cs = self.chunkSize(b)
1407 var d = Math.pow(b, cs),
1408 mi = false,
1409 j = 0,
1410 w = 0
1411 for (var i = 0; i < s.length; ++i) {
1412 var x = intAt(s, i)
1413 if (x < 0) {
1414 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1415 continue
1416 }
1417 w = b * w + x
1418 if (++j >= cs) {
1419 self.dMultiply(d)
1420 self.dAddOffset(w, 0)
1421 j = 0
1422 w = 0
1423 }
1424 }
1425 if (j > 0) {
1426 self.dMultiply(Math.pow(b, j))
1427 self.dAddOffset(w, 0)
1428 }
1429 if (mi) BigInteger.ZERO.subTo(self, self)
1430}
3af2954a 1431
ab78acc6
IC
1432// (protected) alternate constructor
1433function bnpFromNumber(a, b, c) {
1434 var self = this
1435 if ("number" == typeof b) {
1436 // new BigInteger(int,int,RNG)
1437 if (a < 2) self.fromInt(1)
1438 else {
1439 self.fromNumber(a, c)
1440 if (!self.testBit(a - 1)) // force MSB set
1441 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1442 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1443 while (!self.isProbablePrime(b)) {
1444 self.dAddOffset(2, 0)
1445 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1446 }
1447 }
1448 } else {
1449 // new BigInteger(int,RNG)
1450 var x = new Array(),
1451 t = a & 7
1452 x.length = (a >> 3) + 1
1453 b.nextBytes(x)
1454 if (t > 0) x[0] &= ((1 << t) - 1)
1455 else x[0] = 0
1456 self.fromString(x, 256)
3af2954a 1457 }
ab78acc6 1458}
3af2954a 1459
ab78acc6
IC
1460// (public) convert to bigendian byte array
1461function bnToByteArray() {
1462 var self = this
1463 var i = self.t,
1464 r = new Array()
1465 r[0] = self.s
1466 var p = self.DB - (i * self.DB) % 8,
1467 d, k = 0
1468 if (i-- > 0) {
1469 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1470 r[k++] = d | (self.s << (self.DB - p))
1471 while (i >= 0) {
1472 if (p < 8) {
1473 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1474 d |= self[--i] >> (p += self.DB - 8)
1475 } else {
1476 d = (self[i] >> (p -= 8)) & 0xff
1477 if (p <= 0) {
1478 p += self.DB
1479 --i
1480 }
1481 }
1482 if ((d & 0x80) != 0) d |= -256
1483 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1484 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1485 }
3af2954a 1486 }
ab78acc6
IC
1487 return r
1488}
3af2954a 1489
ab78acc6
IC
1490function bnEquals(a) {
1491 return (this.compareTo(a) == 0)
1492}
3af2954a 1493
ab78acc6
IC
1494function bnMin(a) {
1495 return (this.compareTo(a) < 0) ? this : a
1496}
3af2954a 1497
ab78acc6
IC
1498function bnMax(a) {
1499 return (this.compareTo(a) > 0) ? this : a
1500}
3af2954a 1501
ab78acc6
IC
1502// (protected) r = this op a (bitwise)
1503function bnpBitwiseTo(a, op, r) {
1504 var self = this
1505 var i, f, m = Math.min(a.t, self.t)
1506 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1507 if (a.t < self.t) {
1508 f = a.s & self.DM
1509 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1510 r.t = self.t
1511 } else {
1512 f = self.s & self.DM
1513 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1514 r.t = a.t
3af2954a 1515 }
ab78acc6
IC
1516 r.s = op(self.s, a.s)
1517 r.clamp()
1518}
3af2954a 1519
ab78acc6
IC
1520// (public) this & a
1521function op_and(x, y) {
1522 return x & y
1523}
3af2954a 1524
ab78acc6
IC
1525function bnAnd(a) {
1526 var r = new BigInteger()
1527 this.bitwiseTo(a, op_and, r)
1528 return r
1529}
3af2954a 1530
ab78acc6
IC
1531// (public) this | a
1532function op_or(x, y) {
1533 return x | y
1534}
3af2954a 1535
ab78acc6
IC
1536function bnOr(a) {
1537 var r = new BigInteger()
1538 this.bitwiseTo(a, op_or, r)
1539 return r
1540}
3af2954a 1541
ab78acc6
IC
1542// (public) this ^ a
1543function op_xor(x, y) {
1544 return x ^ y
1545}
3af2954a 1546
ab78acc6
IC
1547function bnXor(a) {
1548 var r = new BigInteger()
1549 this.bitwiseTo(a, op_xor, r)
1550 return r
1551}
3af2954a 1552
ab78acc6
IC
1553// (public) this & ~a
1554function op_andnot(x, y) {
1555 return x & ~y
1556}
3af2954a 1557
ab78acc6
IC
1558function bnAndNot(a) {
1559 var r = new BigInteger()
1560 this.bitwiseTo(a, op_andnot, r)
1561 return r
1562}
3af2954a 1563
ab78acc6
IC
1564// (public) ~this
1565function bnNot() {
1566 var r = new BigInteger()
1567 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1568 r.t = this.t
1569 r.s = ~this.s
1570 return r
1571}
3af2954a 1572
ab78acc6
IC
1573// (public) this << n
1574function bnShiftLeft(n) {
1575 var r = new BigInteger()
1576 if (n < 0) this.rShiftTo(-n, r)
1577 else this.lShiftTo(n, r)
1578 return r
1579}
3af2954a 1580
ab78acc6
IC
1581// (public) this >> n
1582function bnShiftRight(n) {
1583 var r = new BigInteger()
1584 if (n < 0) this.lShiftTo(-n, r)
1585 else this.rShiftTo(n, r)
1586 return r
1587}
3af2954a 1588
ab78acc6
IC
1589// return index of lowest 1-bit in x, x < 2^31
1590function lbit(x) {
1591 if (x == 0) return -1
1592 var r = 0
1593 if ((x & 0xffff) == 0) {
1594 x >>= 16
1595 r += 16
3af2954a 1596 }
ab78acc6
IC
1597 if ((x & 0xff) == 0) {
1598 x >>= 8
1599 r += 8
1600 }
1601 if ((x & 0xf) == 0) {
1602 x >>= 4
1603 r += 4
1604 }
1605 if ((x & 3) == 0) {
1606 x >>= 2
1607 r += 2
1608 }
1609 if ((x & 1) == 0)++r
1610 return r
1611}
3af2954a 1612
ab78acc6
IC
1613// (public) returns index of lowest 1-bit (or -1 if none)
1614function bnGetLowestSetBit() {
1615 for (var i = 0; i < this.t; ++i)
1616 if (this[i] != 0) return i * this.DB + lbit(this[i])
1617 if (this.s < 0) return this.t * this.DB
1618 return -1
1619}
3af2954a 1620
ab78acc6
IC
1621// return number of 1 bits in x
1622function cbit(x) {
1623 var r = 0
1624 while (x != 0) {
1625 x &= x - 1
1626 ++r
3af2954a 1627 }
ab78acc6
IC
1628 return r
1629}
3af2954a 1630
ab78acc6
IC
1631// (public) return number of set bits
1632function bnBitCount() {
1633 var r = 0,
1634 x = this.s & this.DM
1635 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1636 return r
1637}
1638
1639// (public) true iff nth bit is set
1640function bnTestBit(n) {
1641 var j = Math.floor(n / this.DB)
1642 if (j >= this.t) return (this.s != 0)
1643 return ((this[j] & (1 << (n % this.DB))) != 0)
1644}
3af2954a 1645
ab78acc6
IC
1646// (protected) this op (1<<n)
1647function bnpChangeBit(n, op) {
1648 var r = BigInteger.ONE.shiftLeft(n)
1649 this.bitwiseTo(r, op, r)
1650 return r
1651}
3af2954a 1652
ab78acc6
IC
1653// (public) this | (1<<n)
1654function bnSetBit(n) {
1655 return this.changeBit(n, op_or)
1656}
3af2954a 1657
ab78acc6
IC
1658// (public) this & ~(1<<n)
1659function bnClearBit(n) {
1660 return this.changeBit(n, op_andnot)
1661}
3af2954a 1662
ab78acc6
IC
1663// (public) this ^ (1<<n)
1664function bnFlipBit(n) {
1665 return this.changeBit(n, op_xor)
1666}
3af2954a 1667
ab78acc6
IC
1668// (protected) r = this + a
1669function bnpAddTo(a, r) {
1670 var self = this
3af2954a 1671
ab78acc6
IC
1672 var i = 0,
1673 c = 0,
1674 m = Math.min(a.t, self.t)
1675 while (i < m) {
1676 c += self[i] + a[i]
1677 r[i++] = c & self.DM
1678 c >>= self.DB
1679 }
1680 if (a.t < self.t) {
1681 c += a.s
1682 while (i < self.t) {
1683 c += self[i]
1684 r[i++] = c & self.DM
1685 c >>= self.DB
1686 }
1687 c += self.s
1688 } else {
1689 c += self.s
1690 while (i < a.t) {
1691 c += a[i]
1692 r[i++] = c & self.DM
1693 c >>= self.DB
1694 }
1695 c += a.s
1696 }
1697 r.s = (c < 0) ? -1 : 0
1698 if (c > 0) r[i++] = c
1699 else if (c < -1) r[i++] = self.DV + c
1700 r.t = i
1701 r.clamp()
1702}
3af2954a 1703
ab78acc6
IC
1704// (public) this + a
1705function bnAdd(a) {
1706 var r = new BigInteger()
1707 this.addTo(a, r)
1708 return r
1709}
3af2954a 1710
ab78acc6
IC
1711// (public) this - a
1712function bnSubtract(a) {
1713 var r = new BigInteger()
1714 this.subTo(a, r)
1715 return r
1716}
3af2954a 1717
ab78acc6
IC
1718// (public) this * a
1719function bnMultiply(a) {
1720 var r = new BigInteger()
1721 this.multiplyTo(a, r)
1722 return r
1723}
3af2954a 1724
ab78acc6
IC
1725// (public) this^2
1726function bnSquare() {
1727 var r = new BigInteger()
1728 this.squareTo(r)
1729 return r
1730}
3af2954a 1731
ab78acc6
IC
1732// (public) this / a
1733function bnDivide(a) {
1734 var r = new BigInteger()
1735 this.divRemTo(a, r, null)
1736 return r
1737}
3af2954a 1738
ab78acc6
IC
1739// (public) this % a
1740function bnRemainder(a) {
1741 var r = new BigInteger()
1742 this.divRemTo(a, null, r)
1743 return r
1744}
3af2954a 1745
ab78acc6
IC
1746// (public) [this/a,this%a]
1747function bnDivideAndRemainder(a) {
1748 var q = new BigInteger(),
1749 r = new BigInteger()
1750 this.divRemTo(a, q, r)
1751 return new Array(q, r)
1752}
3af2954a 1753
ab78acc6
IC
1754// (protected) this *= n, this >= 0, 1 < n < DV
1755function bnpDMultiply(n) {
1756 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1757 ++this.t
1758 this.clamp()
1759}
3af2954a 1760
ab78acc6
IC
1761// (protected) this += n << w words, this >= 0
1762function bnpDAddOffset(n, w) {
1763 if (n == 0) return
1764 while (this.t <= w) this[this.t++] = 0
1765 this[w] += n
1766 while (this[w] >= this.DV) {
1767 this[w] -= this.DV
1768 if (++w >= this.t) this[this.t++] = 0
1769 ++this[w]
3af2954a 1770 }
ab78acc6 1771}
3af2954a 1772
ab78acc6
IC
1773// A "null" reducer
1774function NullExp() {}
3af2954a 1775
ab78acc6
IC
1776function nNop(x) {
1777 return x
1778}
3af2954a 1779
ab78acc6
IC
1780function nMulTo(x, y, r) {
1781 x.multiplyTo(y, r)
1782}
3af2954a 1783
ab78acc6
IC
1784function nSqrTo(x, r) {
1785 x.squareTo(r)
1786}
3af2954a 1787
ab78acc6
IC
1788NullExp.prototype.convert = nNop
1789NullExp.prototype.revert = nNop
1790NullExp.prototype.mulTo = nMulTo
1791NullExp.prototype.sqrTo = nSqrTo
3af2954a 1792
ab78acc6
IC
1793// (public) this^e
1794function bnPow(e) {
1795 return this.exp(e, new NullExp())
1796}
3af2954a 1797
ab78acc6
IC
1798// (protected) r = lower n words of "this * a", a.t <= n
1799// "this" should be the larger one if appropriate.
1800function bnpMultiplyLowerTo(a, n, r) {
1801 var i = Math.min(this.t + a.t, n)
1802 r.s = 0; // assumes a,this >= 0
1803 r.t = i
1804 while (i > 0) r[--i] = 0
1805 var j
1806 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1807 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1808 r.clamp()
1809}
3af2954a 1810
ab78acc6
IC
1811// (protected) r = "this * a" without lower n words, n > 0
1812// "this" should be the larger one if appropriate.
1813function bnpMultiplyUpperTo(a, n, r) {
1814 --n
1815 var i = r.t = this.t + a.t - n
1816 r.s = 0; // assumes a,this >= 0
1817 while (--i >= 0) r[i] = 0
1818 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1819 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1820 r.clamp()
1821 r.drShiftTo(1, r)
1822}
3af2954a 1823
ab78acc6
IC
1824// Barrett modular reduction
1825function Barrett(m) {
1826 // setup Barrett
1827 this.r2 = new BigInteger()
1828 this.q3 = new BigInteger()
1829 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1830 this.mu = this.r2.divide(m)
1831 this.m = m
1832}
3af2954a 1833
ab78acc6
IC
1834function barrettConvert(x) {
1835 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1836 else if (x.compareTo(this.m) < 0) return x
1837 else {
1838 var r = new BigInteger()
1839 x.copyTo(r)
1840 this.reduce(r)
1841 return r
3af2954a 1842 }
ab78acc6 1843}
3af2954a 1844
ab78acc6
IC
1845function barrettRevert(x) {
1846 return x
1847}
3af2954a 1848
ab78acc6
IC
1849// x = x mod m (HAC 14.42)
1850function barrettReduce(x) {
1851 var self = this
1852 x.drShiftTo(self.m.t - 1, self.r2)
1853 if (x.t > self.m.t + 1) {
1854 x.t = self.m.t + 1
1855 x.clamp()
3af2954a 1856 }
ab78acc6
IC
1857 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1858 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1859 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1860 x.subTo(self.r2, x)
1861 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1862}
3af2954a 1863
ab78acc6
IC
1864// r = x^2 mod m; x != r
1865function barrettSqrTo(x, r) {
1866 x.squareTo(r)
1867 this.reduce(r)
1868}
3af2954a 1869
ab78acc6
IC
1870// r = x*y mod m; x,y != r
1871function barrettMulTo(x, y, r) {
1872 x.multiplyTo(y, r)
1873 this.reduce(r)
1874}
3af2954a 1875
ab78acc6
IC
1876Barrett.prototype.convert = barrettConvert
1877Barrett.prototype.revert = barrettRevert
1878Barrett.prototype.reduce = barrettReduce
1879Barrett.prototype.mulTo = barrettMulTo
1880Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1881
ab78acc6
IC
1882// (public) this^e % m (HAC 14.85)
1883function bnModPow(e, m) {
1884 var i = e.bitLength(),
1885 k, r = nbv(1),
1886 z
1887 if (i <= 0) return r
1888 else if (i < 18) k = 1
1889 else if (i < 48) k = 3
1890 else if (i < 144) k = 4
1891 else if (i < 768) k = 5
1892 else k = 6
1893 if (i < 8)
1894 z = new Classic(m)
1895 else if (m.isEven())
1896 z = new Barrett(m)
1897 else
1898 z = new Montgomery(m)
3af2954a 1899
ab78acc6
IC
1900 // precomputation
1901 var g = new Array(),
1902 n = 3,
1903 k1 = k - 1,
1904 km = (1 << k) - 1
1905 g[1] = z.convert(this)
1906 if (k > 1) {
1907 var g2 = new BigInteger()
1908 z.sqrTo(g[1], g2)
1909 while (n <= km) {
1910 g[n] = new BigInteger()
1911 z.mulTo(g2, g[n - 2], g[n])
1912 n += 2
1913 }
1914 }
1915
1916 var j = e.t - 1,
1917 w, is1 = true,
1918 r2 = new BigInteger(),
1919 t
1920 i = nbits(e[j]) - 1
1921 while (j >= 0) {
1922 if (i >= k1) w = (e[j] >> (i - k1)) & km
1923 else {
1924 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1925 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1926 }
3af2954a 1927
ab78acc6
IC
1928 n = k
1929 while ((w & 1) == 0) {
1930 w >>= 1
1931 --n
1932 }
1933 if ((i -= n) < 0) {
1934 i += this.DB
1935 --j
1936 }
1937 if (is1) { // ret == 1, don't bother squaring or multiplying it
1938 g[w].copyTo(r)
1939 is1 = false
1940 } else {
1941 while (n > 1) {
1942 z.sqrTo(r, r2)
1943 z.sqrTo(r2, r)
1944 n -= 2
1945 }
1946 if (n > 0) z.sqrTo(r, r2)
1947 else {
1948 t = r
1949 r = r2
1950 r2 = t
1951 }
1952 z.mulTo(r2, g[w], r)
1953 }
3af2954a 1954
ab78acc6
IC
1955 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1956 z.sqrTo(r, r2)
1957 t = r
1958 r = r2
1959 r2 = t
1960 if (--i < 0) {
1961 i = this.DB - 1
1962 --j
3af2954a 1963 }
3af2954a
IC
1964 }
1965 }
ab78acc6
IC
1966 return z.revert(r)
1967}
3af2954a 1968
ab78acc6
IC
1969// (public) gcd(this,a) (HAC 14.54)
1970function bnGCD(a) {
1971 var x = (this.s < 0) ? this.negate() : this.clone()
1972 var y = (a.s < 0) ? a.negate() : a.clone()
1973 if (x.compareTo(y) < 0) {
1974 var t = x
1975 x = y
1976 y = t
1977 }
1978 var i = x.getLowestSetBit(),
1979 g = y.getLowestSetBit()
1980 if (g < 0) return x
1981 if (i < g) g = i
1982 if (g > 0) {
1983 x.rShiftTo(g, x)
1984 y.rShiftTo(g, y)
1985 }
1986 while (x.signum() > 0) {
1987 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1988 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1989 if (x.compareTo(y) >= 0) {
1990 x.subTo(y, x)
1991 x.rShiftTo(1, x)
1992 } else {
1993 y.subTo(x, y)
1994 y.rShiftTo(1, y)
1995 }
3af2954a 1996 }
ab78acc6
IC
1997 if (g > 0) y.lShiftTo(g, y)
1998 return y
1999}
3af2954a 2000
ab78acc6
IC
2001// (protected) this % n, n < 2^26
2002function bnpModInt(n) {
2003 if (n <= 0) return 0
2004 var d = this.DV % n,
2005 r = (this.s < 0) ? n - 1 : 0
2006 if (this.t > 0)
2007 if (d == 0) r = this[0] % n
2008 else
2009 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2010 return r
2011}
3af2954a 2012
ab78acc6
IC
2013// (public) 1/this % m (HAC 14.61)
2014function bnModInverse(m) {
2015 var ac = m.isEven()
2016 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2017 var u = m.clone(),
2018 v = this.clone()
2019 var a = nbv(1),
2020 b = nbv(0),
2021 c = nbv(0),
2022 d = nbv(1)
2023 while (u.signum() != 0) {
2024 while (u.isEven()) {
2025 u.rShiftTo(1, u)
2026 if (ac) {
2027 if (!a.isEven() || !b.isEven()) {
2028 a.addTo(this, a)
2029 b.subTo(m, b)
2030 }
2031 a.rShiftTo(1, a)
2032 } else if (!b.isEven()) b.subTo(m, b)
2033 b.rShiftTo(1, b)
2034 }
2035 while (v.isEven()) {
2036 v.rShiftTo(1, v)
2037 if (ac) {
2038 if (!c.isEven() || !d.isEven()) {
2039 c.addTo(this, c)
2040 d.subTo(m, d)
2041 }
2042 c.rShiftTo(1, c)
2043 } else if (!d.isEven()) d.subTo(m, d)
2044 d.rShiftTo(1, d)
2045 }
2046 if (u.compareTo(v) >= 0) {
2047 u.subTo(v, u)
2048 if (ac) a.subTo(c, a)
2049 b.subTo(d, b)
2050 } else {
2051 v.subTo(u, v)
2052 if (ac) c.subTo(a, c)
2053 d.subTo(b, d)
2054 }
2055 }
2056 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2057 if (d.compareTo(m) >= 0) return d.subtract(m)
2058 if (d.signum() < 0) d.addTo(m, d)
2059 else return d
2060 if (d.signum() < 0) return d.add(m)
2061 else return d
2062}
2063
2064var lowprimes = [
2065 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2066 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2067 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2068 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2069 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2070 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2071 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2072 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2073 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2074 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2075 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2076]
2077
2078var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2079
2080// (public) test primality with certainty >= 1-.5^t
2081function bnIsProbablePrime(t) {
2082 var i, x = this.abs()
2083 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2084 for (i = 0; i < lowprimes.length; ++i)
2085 if (x[0] == lowprimes[i]) return true
2086 return false
3af2954a 2087 }
ab78acc6
IC
2088 if (x.isEven()) return false
2089 i = 1
2090 while (i < lowprimes.length) {
2091 var m = lowprimes[i],
2092 j = i + 1
2093 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2094 m = x.modInt(m)
2095 while (i < j) if (m % lowprimes[i++] == 0) return false
2096 }
2097 return x.millerRabin(t)
2098}
2099
2100// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2101function bnpMillerRabin(t) {
2102 var n1 = this.subtract(BigInteger.ONE)
2103 var k = n1.getLowestSetBit()
2104 if (k <= 0) return false
2105 var r = n1.shiftRight(k)
2106 t = (t + 1) >> 1
2107 if (t > lowprimes.length) t = lowprimes.length
2108 var a = new BigInteger(null)
2109 var j, bases = []
2110 for (var i = 0; i < t; ++i) {
2111 for (;;) {
2112 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2113 if (bases.indexOf(j) == -1) break
2114 }
2115 bases.push(j)
2116 a.fromInt(j)
2117 var y = a.modPow(r, this)
2118 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2119 var j = 1
2120 while (j++ < k && y.compareTo(n1) != 0) {
2121 y = y.modPowInt(2, this)
2122 if (y.compareTo(BigInteger.ONE) == 0) return false
2123 }
2124 if (y.compareTo(n1) != 0) return false
2125 }
3af2954a 2126 }
ab78acc6
IC
2127 return true
2128}
3af2954a 2129
ab78acc6
IC
2130// protected
2131proto.chunkSize = bnpChunkSize
2132proto.toRadix = bnpToRadix
2133proto.fromRadix = bnpFromRadix
2134proto.fromNumber = bnpFromNumber
2135proto.bitwiseTo = bnpBitwiseTo
2136proto.changeBit = bnpChangeBit
2137proto.addTo = bnpAddTo
2138proto.dMultiply = bnpDMultiply
2139proto.dAddOffset = bnpDAddOffset
2140proto.multiplyLowerTo = bnpMultiplyLowerTo
2141proto.multiplyUpperTo = bnpMultiplyUpperTo
2142proto.modInt = bnpModInt
2143proto.millerRabin = bnpMillerRabin
3af2954a 2144
ab78acc6
IC
2145// public
2146proto.clone = bnClone
2147proto.intValue = bnIntValue
2148proto.byteValue = bnByteValue
2149proto.shortValue = bnShortValue
2150proto.signum = bnSigNum
2151proto.toByteArray = bnToByteArray
2152proto.equals = bnEquals
2153proto.min = bnMin
2154proto.max = bnMax
2155proto.and = bnAnd
2156proto.or = bnOr
2157proto.xor = bnXor
2158proto.andNot = bnAndNot
2159proto.not = bnNot
2160proto.shiftLeft = bnShiftLeft
2161proto.shiftRight = bnShiftRight
2162proto.getLowestSetBit = bnGetLowestSetBit
2163proto.bitCount = bnBitCount
2164proto.testBit = bnTestBit
2165proto.setBit = bnSetBit
2166proto.clearBit = bnClearBit
2167proto.flipBit = bnFlipBit
2168proto.add = bnAdd
2169proto.subtract = bnSubtract
2170proto.multiply = bnMultiply
2171proto.divide = bnDivide
2172proto.remainder = bnRemainder
2173proto.divideAndRemainder = bnDivideAndRemainder
2174proto.modPow = bnModPow
2175proto.modInverse = bnModInverse
2176proto.pow = bnPow
2177proto.gcd = bnGCD
2178proto.isProbablePrime = bnIsProbablePrime
3af2954a 2179
ab78acc6
IC
2180// JSBN-specific extension
2181proto.square = bnSquare
3af2954a 2182
ab78acc6
IC
2183// constants
2184BigInteger.ZERO = nbv(0)
2185BigInteger.ONE = nbv(1)
2186BigInteger.valueOf = nbv
3af2954a 2187
ab78acc6 2188module.exports = BigInteger
3af2954a 2189
ab78acc6
IC
2190},{"../package.json":4}],2:[function(require,module,exports){
2191(function (Buffer){
2192// FIXME: Kind of a weird way to throw exceptions, consider removing
2193var assert = require('assert')
2194var BigInteger = require('./bigi')
3af2954a 2195
ab78acc6
IC
2196/**
2197 * Turns a byte array into a big integer.
2198 *
2199 * This function will interpret a byte array as a big integer in big
2200 * endian notation.
2201 */
2202BigInteger.fromByteArrayUnsigned = function(byteArray) {
2203 // BigInteger expects a DER integer conformant byte array
2204 if (byteArray[0] & 0x80) {
2205 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2206 }
2207
ab78acc6
IC
2208 return new BigInteger(byteArray)
2209}
3af2954a 2210
ab78acc6
IC
2211/**
2212 * Returns a byte array representation of the big integer.
2213 *
2214 * This returns the absolute of the contained value in big endian
2215 * form. A value of zero results in an empty array.
2216 */
2217BigInteger.prototype.toByteArrayUnsigned = function() {
2218 var byteArray = this.toByteArray()
2219 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2220}
3af2954a 2221
ab78acc6
IC
2222BigInteger.fromDERInteger = function(byteArray) {
2223 return new BigInteger(byteArray)
2224}
3af2954a 2225
ab78acc6
IC
2226/*
2227 * Converts BigInteger to a DER integer representation.
2228 *
2229 * The format for this value uses the most significant bit as a sign
2230 * bit. If the most significant bit is already set and the integer is
2231 * positive, a 0x00 is prepended.
2232 *
2233 * Examples:
2234 *
2235 * 0 => 0x00
2236 * 1 => 0x01
2237 * -1 => 0xff
2238 * 127 => 0x7f
2239 * -127 => 0x81
2240 * 128 => 0x0080
2241 * -128 => 0x80
2242 * 255 => 0x00ff
2243 * -255 => 0xff01
2244 * 16300 => 0x3fac
2245 * -16300 => 0xc054
2246 * 62300 => 0x00f35c
2247 * -62300 => 0xff0ca4
2248*/
2249BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2250
ab78acc6
IC
2251BigInteger.fromBuffer = function(buffer) {
2252 // BigInteger expects a DER integer conformant byte array
2253 if (buffer[0] & 0x80) {
2254 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2255
ab78acc6 2256 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2257 }
2258
ab78acc6
IC
2259 return new BigInteger(buffer)
2260}
3af2954a 2261
ab78acc6
IC
2262BigInteger.fromHex = function(hex) {
2263 if (hex === '') return BigInteger.ZERO
3af2954a 2264
ab78acc6
IC
2265 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2266 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2267 return new BigInteger(hex, 16)
2268}
3af2954a 2269
ab78acc6
IC
2270BigInteger.prototype.toBuffer = function(size) {
2271 var byteArray = this.toByteArrayUnsigned()
2272 var zeros = []
3af2954a 2273
ab78acc6
IC
2274 var padding = size - byteArray.length
2275 while (zeros.length < padding) zeros.push(0)
3af2954a 2276
ab78acc6
IC
2277 return new Buffer(zeros.concat(byteArray))
2278}
3af2954a 2279
ab78acc6
IC
2280BigInteger.prototype.toHex = function(size) {
2281 return this.toBuffer(size).toString('hex')
2282}
3af2954a 2283
ab78acc6
IC
2284}).call(this,require("buffer").Buffer)
2285},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2286var BigInteger = require('./bigi')
3af2954a 2287
ab78acc6
IC
2288//addons
2289require('./convert')
3af2954a 2290
ab78acc6
IC
2291module.exports = BigInteger
2292},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2293module.exports={
2294 "name": "bigi",
2295 "version": "1.4.0",
2296 "description": "Big integers.",
2297 "keywords": [
2298 "cryptography",
2299 "math",
2300 "bitcoin",
2301 "arbitrary",
2302 "precision",
2303 "arithmetic",
2304 "big",
2305 "integer",
2306 "int",
2307 "number",
2308 "biginteger",
2309 "bigint",
2310 "bignumber",
2311 "decimal",
2312 "float"
2313 ],
2314 "devDependencies": {
2315 "mocha": "^1.20.1",
2316 "jshint": "^2.5.1",
2317 "coveralls": "^2.10.0",
2318 "istanbul": "^0.2.11"
2319 },
2320 "repository": {
2321 "url": "https://github.com/cryptocoinjs/bigi",
2322 "type": "git"
2323 },
2324 "main": "./lib/index.js",
2325 "scripts": {
2326 "test": "_mocha -- test/*.js",
2327 "jshint": "jshint --config jshint.json lib/*.js ; true",
2328 "unit": "mocha",
2329 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2330 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2331 },
2332 "dependencies": {},
2333 "testling": {
2334 "files": "test/*.js",
2335 "harness": "mocha",
2336 "browsers": [
2337 "ie/9..latest",
2338 "firefox/latest",
2339 "chrome/latest",
2340 "safari/6.0..latest",
2341 "iphone/6.0..latest",
2342 "android-browser/4.2..latest"
2343 ]
2344 },
2345 "bugs": {
2346 "url": "https://github.com/cryptocoinjs/bigi/issues"
2347 },
2348 "homepage": "https://github.com/cryptocoinjs/bigi",
2349 "_id": "bigi@1.4.0",
2350 "dist": {
2351 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2352 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2353 },
2354 "_from": "bigi@^1.4.0",
2355 "_npmVersion": "1.4.3",
2356 "_npmUser": {
2357 "name": "jp",
2358 "email": "jprichardson@gmail.com"
2359 },
2360 "maintainers": [
2361 {
2362 "name": "jp",
2363 "email": "jprichardson@gmail.com"
2364 },
2365 {
2366 "name": "midnightlightning",
2367 "email": "boydb@midnightdesign.ws"
2368 },
2369 {
2370 "name": "sidazhang",
2371 "email": "sidazhang89@gmail.com"
2372 },
2373 {
2374 "name": "nadav",
2375 "email": "npm@shesek.info"
3af2954a 2376 }
ab78acc6
IC
2377 ],
2378 "directories": {},
2379 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2380 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2381}
3af2954a 2382
ab78acc6
IC
2383},{}],5:[function(require,module,exports){
2384// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2385//
2386// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2387//
2388// Originally from narwhal.js (http://narwhaljs.org)
2389// Copyright (c) 2009 Thomas Robinson <280north.com>
2390//
2391// Permission is hereby granted, free of charge, to any person obtaining a copy
2392// of this software and associated documentation files (the 'Software'), to
2393// deal in the Software without restriction, including without limitation the
2394// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2395// sell copies of the Software, and to permit persons to whom the Software is
2396// furnished to do so, subject to the following conditions:
2397//
2398// The above copyright notice and this permission notice shall be included in
2399// all copies or substantial portions of the Software.
2400//
2401// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2402// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2403// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2404// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2405// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2406// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2407
ab78acc6
IC
2408// when used in node, this will actually load the util module we depend on
2409// versus loading the builtin util module as happens otherwise
2410// this is a bug in node module loading as far as I am concerned
2411var util = require('util/');
3af2954a 2412
ab78acc6
IC
2413var pSlice = Array.prototype.slice;
2414var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2415
ab78acc6
IC
2416// 1. The assert module provides functions that throw
2417// AssertionError's when particular conditions are not met. The
2418// assert module must conform to the following interface.
3af2954a 2419
ab78acc6 2420var assert = module.exports = ok;
3af2954a 2421
ab78acc6
IC
2422// 2. The AssertionError is defined in assert.
2423// new assert.AssertionError({ message: message,
2424// actual: actual,
2425// expected: expected })
3af2954a 2426
ab78acc6
IC
2427assert.AssertionError = function AssertionError(options) {
2428 this.name = 'AssertionError';
2429 this.actual = options.actual;
2430 this.expected = options.expected;
2431 this.operator = options.operator;
2432 if (options.message) {
2433 this.message = options.message;
2434 this.generatedMessage = false;
2435 } else {
2436 this.message = getMessage(this);
2437 this.generatedMessage = true;
2438 }
2439 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2440
ab78acc6
IC
2441 if (Error.captureStackTrace) {
2442 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2443 }
ab78acc6
IC
2444 else {
2445 // non v8 browsers so we can have a stacktrace
2446 var err = new Error();
2447 if (err.stack) {
2448 var out = err.stack;
3af2954a 2449
ab78acc6
IC
2450 // try to strip useless frames
2451 var fn_name = stackStartFunction.name;
2452 var idx = out.indexOf('\n' + fn_name);
2453 if (idx >= 0) {
2454 // once we have located the function frame
2455 // we need to strip out everything before it (and its line)
2456 var next_line = out.indexOf('\n', idx + 1);
2457 out = out.substring(next_line + 1);
2458 }
3af2954a 2459
ab78acc6 2460 this.stack = out;
3af2954a 2461 }
3af2954a 2462 }
ab78acc6 2463};
3af2954a 2464
ab78acc6
IC
2465// assert.AssertionError instanceof Error
2466util.inherits(assert.AssertionError, Error);
3af2954a 2467
ab78acc6
IC
2468function replacer(key, value) {
2469 if (util.isUndefined(value)) {
2470 return '' + value;
2471 }
2472 if (util.isNumber(value) && !isFinite(value)) {
2473 return value.toString();
2474 }
2475 if (util.isFunction(value) || util.isRegExp(value)) {
2476 return value.toString();
2477 }
2478 return value;
2479}
3af2954a 2480
ab78acc6
IC
2481function truncate(s, n) {
2482 if (util.isString(s)) {
2483 return s.length < n ? s : s.slice(0, n);
2484 } else {
2485 return s;
2486 }
2487}
3af2954a 2488
ab78acc6
IC
2489function getMessage(self) {
2490 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2491 self.operator + ' ' +
2492 truncate(JSON.stringify(self.expected, replacer), 128);
2493}
3af2954a 2494
ab78acc6
IC
2495// At present only the three keys mentioned above are used and
2496// understood by the spec. Implementations or sub modules can pass
2497// other keys to the AssertionError's constructor - they will be
2498// ignored.
3af2954a 2499
ab78acc6
IC
2500// 3. All of the following functions must throw an AssertionError
2501// when a corresponding condition is not met, with a message that
2502// may be undefined if not provided. All assertion methods provide
2503// both the actual and expected values to the assertion error for
2504// display purposes.
3af2954a 2505
ab78acc6
IC
2506function fail(actual, expected, message, operator, stackStartFunction) {
2507 throw new assert.AssertionError({
2508 message: message,
2509 actual: actual,
2510 expected: expected,
2511 operator: operator,
2512 stackStartFunction: stackStartFunction
2513 });
2514}
3af2954a 2515
ab78acc6
IC
2516// EXTENSION! allows for well behaved errors defined elsewhere.
2517assert.fail = fail;
ebd8d4e8 2518
ab78acc6
IC
2519// 4. Pure assertion tests whether a value is truthy, as determined
2520// by !!guard.
2521// assert.ok(guard, message_opt);
2522// This statement is equivalent to assert.equal(true, !!guard,
2523// message_opt);. To test strictly for the value true, use
2524// assert.strictEqual(true, guard, message_opt);.
3af2954a 2525
ab78acc6
IC
2526function ok(value, message) {
2527 if (!value) fail(value, true, message, '==', assert.ok);
2528}
2529assert.ok = ok;
3af2954a 2530
ab78acc6
IC
2531// 5. The equality assertion tests shallow, coercive equality with
2532// ==.
2533// assert.equal(actual, expected, message_opt);
3af2954a 2534
ab78acc6
IC
2535assert.equal = function equal(actual, expected, message) {
2536 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2537};
3af2954a 2538
ab78acc6
IC
2539// 6. The non-equality assertion tests for whether two objects are not equal
2540// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2541
ab78acc6
IC
2542assert.notEqual = function notEqual(actual, expected, message) {
2543 if (actual == expected) {
2544 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2545 }
ab78acc6 2546};
3af2954a 2547
ab78acc6
IC
2548// 7. The equivalence assertion tests a deep equality relation.
2549// assert.deepEqual(actual, expected, message_opt);
3af2954a 2550
ab78acc6
IC
2551assert.deepEqual = function deepEqual(actual, expected, message) {
2552 if (!_deepEqual(actual, expected)) {
2553 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2554 }
2555};
3af2954a 2556
ab78acc6
IC
2557function _deepEqual(actual, expected) {
2558 // 7.1. All identical values are equivalent, as determined by ===.
2559 if (actual === expected) {
2560 return true;
3af2954a 2561
ab78acc6
IC
2562 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2563 if (actual.length != expected.length) return false;
3af2954a 2564
ab78acc6
IC
2565 for (var i = 0; i < actual.length; i++) {
2566 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2567 }
2568
ab78acc6 2569 return true;
3af2954a 2570
ab78acc6
IC
2571 // 7.2. If the expected value is a Date object, the actual value is
2572 // equivalent if it is also a Date object that refers to the same time.
2573 } else if (util.isDate(actual) && util.isDate(expected)) {
2574 return actual.getTime() === expected.getTime();
3af2954a 2575
ab78acc6
IC
2576 // 7.3 If the expected value is a RegExp object, the actual value is
2577 // equivalent if it is also a RegExp object with the same source and
2578 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2579 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2580 return actual.source === expected.source &&
2581 actual.global === expected.global &&
2582 actual.multiline === expected.multiline &&
2583 actual.lastIndex === expected.lastIndex &&
2584 actual.ignoreCase === expected.ignoreCase;
3af2954a 2585
ab78acc6
IC
2586 // 7.4. Other pairs that do not both pass typeof value == 'object',
2587 // equivalence is determined by ==.
2588 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2589 return actual == expected;
3af2954a 2590
ab78acc6
IC
2591 // 7.5 For all other Object pairs, including Array objects, equivalence is
2592 // determined by having the same number of owned properties (as verified
2593 // with Object.prototype.hasOwnProperty.call), the same set of keys
2594 // (although not necessarily the same order), equivalent values for every
2595 // corresponding key, and an identical 'prototype' property. Note: this
2596 // accounts for both named and indexed properties on Arrays.
2597 } else {
2598 return objEquiv(actual, expected);
3af2954a 2599 }
ab78acc6 2600}
3af2954a 2601
ab78acc6
IC
2602function isArguments(object) {
2603 return Object.prototype.toString.call(object) == '[object Arguments]';
2604}
3af2954a 2605
ab78acc6
IC
2606function objEquiv(a, b) {
2607 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2608 return false;
2609 // an identical 'prototype' property.
2610 if (a.prototype !== b.prototype) return false;
2611 // if one is a primitive, the other must be same
2612 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2613 return a === b;
3af2954a 2614 }
ab78acc6
IC
2615 var aIsArgs = isArguments(a),
2616 bIsArgs = isArguments(b);
2617 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2618 return false;
2619 if (aIsArgs) {
2620 a = pSlice.call(a);
2621 b = pSlice.call(b);
2622 return _deepEqual(a, b);
3af2954a 2623 }
ab78acc6
IC
2624 var ka = objectKeys(a),
2625 kb = objectKeys(b),
2626 key, i;
2627 // having the same number of owned properties (keys incorporates
2628 // hasOwnProperty)
2629 if (ka.length != kb.length)
2630 return false;
2631 //the same set of keys (although not necessarily the same order),
2632 ka.sort();
2633 kb.sort();
2634 //~~~cheap key test
2635 for (i = ka.length - 1; i >= 0; i--) {
2636 if (ka[i] != kb[i])
2637 return false;
3af2954a 2638 }
ab78acc6
IC
2639 //equivalent values for every corresponding key, and
2640 //~~~possibly expensive deep test
2641 for (i = ka.length - 1; i >= 0; i--) {
2642 key = ka[i];
2643 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2644 }
ab78acc6
IC
2645 return true;
2646}
2647
2648// 8. The non-equivalence assertion tests for any deep inequality.
2649// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2650
ab78acc6
IC
2651assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2652 if (_deepEqual(actual, expected)) {
2653 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2654 }
ab78acc6 2655};
3af2954a 2656
ab78acc6
IC
2657// 9. The strict equality assertion tests strict equality, as determined by ===.
2658// assert.strictEqual(actual, expected, message_opt);
3af2954a 2659
ab78acc6
IC
2660assert.strictEqual = function strictEqual(actual, expected, message) {
2661 if (actual !== expected) {
2662 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2663 }
ab78acc6 2664};
3af2954a 2665
ab78acc6
IC
2666// 10. The strict non-equality assertion tests for strict inequality, as
2667// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2668
ab78acc6
IC
2669assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2670 if (actual === expected) {
2671 fail(actual, expected, message, '!==', assert.notStrictEqual);
2672 }
2673};
3af2954a 2674
ab78acc6
IC
2675function expectedException(actual, expected) {
2676 if (!actual || !expected) {
2677 return false;
2678 }
3af2954a 2679
ab78acc6
IC
2680 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2681 return expected.test(actual);
2682 } else if (actual instanceof expected) {
2683 return true;
2684 } else if (expected.call({}, actual) === true) {
2685 return true;
3af2954a
IC
2686 }
2687
ab78acc6
IC
2688 return false;
2689}
3af2954a 2690
ab78acc6
IC
2691function _throws(shouldThrow, block, expected, message) {
2692 var actual;
3af2954a 2693
ab78acc6
IC
2694 if (util.isString(expected)) {
2695 message = expected;
2696 expected = null;
3af2954a
IC
2697 }
2698
ab78acc6
IC
2699 try {
2700 block();
2701 } catch (e) {
2702 actual = e;
3af2954a
IC
2703 }
2704
ab78acc6
IC
2705 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2706 (message ? ' ' + message : '.');
3af2954a 2707
ab78acc6
IC
2708 if (shouldThrow && !actual) {
2709 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2710 }
2711
ab78acc6
IC
2712 if (!shouldThrow && expectedException(actual, expected)) {
2713 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2714 }
2715
ab78acc6
IC
2716 if ((shouldThrow && actual && expected &&
2717 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2718 throw actual;
3af2954a 2719 }
ab78acc6 2720}
3af2954a 2721
ab78acc6
IC
2722// 11. Expected to throw an error:
2723// assert.throws(block, Error_opt, message_opt);
3af2954a 2724
ab78acc6
IC
2725assert.throws = function(block, /*optional*/error, /*optional*/message) {
2726 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2727};
3af2954a 2728
ab78acc6
IC
2729// EXTENSION! This is annoying to write outside this module.
2730assert.doesNotThrow = function(block, /*optional*/message) {
2731 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2732};
3af2954a 2733
ab78acc6 2734assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2735
ab78acc6
IC
2736var objectKeys = Object.keys || function (obj) {
2737 var keys = [];
2738 for (var key in obj) {
2739 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2740 }
ab78acc6
IC
2741 return keys;
2742};
3af2954a 2743
ab78acc6 2744},{"util/":29}],6:[function(require,module,exports){
3af2954a 2745
ab78acc6
IC
2746},{}],7:[function(require,module,exports){
2747/*!
2748 * The buffer module from node.js, for the browser.
2749 *
2750 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2751 * @license MIT
2752 */
3af2954a 2753
ab78acc6
IC
2754var base64 = require('base64-js')
2755var ieee754 = require('ieee754')
2756var isArray = require('is-array')
3af2954a 2757
ab78acc6
IC
2758exports.Buffer = Buffer
2759exports.SlowBuffer = SlowBuffer
2760exports.INSPECT_MAX_BYTES = 50
2761Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2762
ab78acc6 2763var rootParent = {}
3af2954a 2764
ab78acc6
IC
2765/**
2766 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2767 * === true Use Uint8Array implementation (fastest)
2768 * === false Use Object implementation (most compatible, even IE6)
2769 *
2770 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2771 * Opera 11.6+, iOS 4.2+.
2772 *
2773 * Due to various browser bugs, sometimes the Object implementation will be used even
2774 * when the browser supports typed arrays.
2775 *
2776 * Note:
2777 *
2778 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2779 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2780 *
2781 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2782 * on objects.
2783 *
2784 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2785 *
2786 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2787 * incorrect length in some situations.
3af2954a 2788
ab78acc6
IC
2789 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2790 * get the Object implementation, which is slower but behaves correctly.
2791 */
2792Buffer.TYPED_ARRAY_SUPPORT = (function () {
2793 function Bar () {}
2794 try {
2795 var arr = new Uint8Array(1)
2796 arr.foo = function () { return 42 }
2797 arr.constructor = Bar
2798 return arr.foo() === 42 && // typed array instances can be augmented
2799 arr.constructor === Bar && // constructor can be set
2800 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2801 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2802 } catch (e) {
2803 return false
2804 }
2805})()
3af2954a 2806
ab78acc6
IC
2807function kMaxLength () {
2808 return Buffer.TYPED_ARRAY_SUPPORT
2809 ? 0x7fffffff
2810 : 0x3fffffff
2811}
3af2954a 2812
ab78acc6
IC
2813/**
2814 * Class: Buffer
2815 * =============
2816 *
2817 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2818 * with function properties for all the node `Buffer` API functions. We use
2819 * `Uint8Array` so that square bracket notation works as expected -- it returns
2820 * a single octet.
2821 *
2822 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2823 * prototype.
2824 */
2825function Buffer (arg) {
2826 if (!(this instanceof Buffer)) {
2827 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2828 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2829 return new Buffer(arg)
3af2954a
IC
2830 }
2831
ab78acc6
IC
2832 this.length = 0
2833 this.parent = undefined
3af2954a 2834
ab78acc6
IC
2835 // Common case.
2836 if (typeof arg === 'number') {
2837 return fromNumber(this, arg)
2838 }
3af2954a 2839
ab78acc6
IC
2840 // Slightly less common case.
2841 if (typeof arg === 'string') {
2842 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2843 }
3af2954a 2844
ab78acc6
IC
2845 // Unusual.
2846 return fromObject(this, arg)
2847}
3af2954a 2848
ab78acc6
IC
2849function fromNumber (that, length) {
2850 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2851 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2852 for (var i = 0; i < length; i++) {
2853 that[i] = 0
2854 }
3af2954a 2855 }
ab78acc6
IC
2856 return that
2857}
3af2954a 2858
ab78acc6
IC
2859function fromString (that, string, encoding) {
2860 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2861
ab78acc6
IC
2862 // Assumption: byteLength() return value is always < kMaxLength.
2863 var length = byteLength(string, encoding) | 0
2864 that = allocate(that, length)
3af2954a 2865
ab78acc6
IC
2866 that.write(string, encoding)
2867 return that
2868}
3af2954a 2869
ab78acc6
IC
2870function fromObject (that, object) {
2871 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2872
ab78acc6 2873 if (isArray(object)) return fromArray(that, object)
3af2954a 2874
ab78acc6
IC
2875 if (object == null) {
2876 throw new TypeError('must start with number, buffer, array or string')
2877 }
3af2954a 2878
ab78acc6
IC
2879 if (typeof ArrayBuffer !== 'undefined') {
2880 if (object.buffer instanceof ArrayBuffer) {
2881 return fromTypedArray(that, object)
2882 }
2883 if (object instanceof ArrayBuffer) {
2884 return fromArrayBuffer(that, object)
2885 }
3af2954a
IC
2886 }
2887
ab78acc6 2888 if (object.length) return fromArrayLike(that, object)
3af2954a 2889
ab78acc6
IC
2890 return fromJsonObject(that, object)
2891}
3af2954a 2892
ab78acc6
IC
2893function fromBuffer (that, buffer) {
2894 var length = checked(buffer.length) | 0
2895 that = allocate(that, length)
2896 buffer.copy(that, 0, 0, length)
2897 return that
2898}
3af2954a 2899
ab78acc6
IC
2900function fromArray (that, array) {
2901 var length = checked(array.length) | 0
2902 that = allocate(that, length)
2903 for (var i = 0; i < length; i += 1) {
2904 that[i] = array[i] & 255
3af2954a 2905 }
ab78acc6
IC
2906 return that
2907}
3af2954a 2908
ab78acc6
IC
2909// Duplicate of fromArray() to keep fromArray() monomorphic.
2910function fromTypedArray (that, array) {
2911 var length = checked(array.length) | 0
2912 that = allocate(that, length)
2913 // Truncating the elements is probably not what people expect from typed
2914 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2915 // of the old Buffer constructor.
2916 for (var i = 0; i < length; i += 1) {
2917 that[i] = array[i] & 255
3af2954a 2918 }
ab78acc6
IC
2919 return that
2920}
3af2954a 2921
ab78acc6
IC
2922function fromArrayBuffer (that, array) {
2923 if (Buffer.TYPED_ARRAY_SUPPORT) {
2924 // Return an augmented `Uint8Array` instance, for best performance
2925 array.byteLength
2926 that = Buffer._augment(new Uint8Array(array))
2927 } else {
2928 // Fallback: Return an object instance of the Buffer class
2929 that = fromTypedArray(that, new Uint8Array(array))
2930 }
2931 return that
2932}
3af2954a 2933
ab78acc6
IC
2934function fromArrayLike (that, array) {
2935 var length = checked(array.length) | 0
2936 that = allocate(that, length)
2937 for (var i = 0; i < length; i += 1) {
2938 that[i] = array[i] & 255
3af2954a 2939 }
ab78acc6
IC
2940 return that
2941}
3af2954a 2942
ab78acc6
IC
2943// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2944// Returns a zero-length buffer for inputs that don't conform to the spec.
2945function fromJsonObject (that, object) {
2946 var array
2947 var length = 0
2948
2949 if (object.type === 'Buffer' && isArray(object.data)) {
2950 array = object.data
2951 length = checked(array.length) | 0
3af2954a 2952 }
ab78acc6 2953 that = allocate(that, length)
3af2954a 2954
ab78acc6
IC
2955 for (var i = 0; i < length; i += 1) {
2956 that[i] = array[i] & 255
3af2954a 2957 }
ab78acc6
IC
2958 return that
2959}
3af2954a 2960
ab78acc6
IC
2961function allocate (that, length) {
2962 if (Buffer.TYPED_ARRAY_SUPPORT) {
2963 // Return an augmented `Uint8Array` instance, for best performance
2964 that = Buffer._augment(new Uint8Array(length))
2965 } else {
2966 // Fallback: Return an object instance of the Buffer class
2967 that.length = length
2968 that._isBuffer = true
2969 }
3af2954a 2970
ab78acc6
IC
2971 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2972 if (fromPool) that.parent = rootParent
3af2954a 2973
ab78acc6
IC
2974 return that
2975}
3af2954a 2976
ab78acc6
IC
2977function checked (length) {
2978 // Note: cannot use `length < kMaxLength` here because that fails when
2979 // length is NaN (which is otherwise coerced to zero.)
2980 if (length >= kMaxLength()) {
2981 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2982 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2983 }
ab78acc6
IC
2984 return length | 0
2985}
3af2954a 2986
ab78acc6
IC
2987function SlowBuffer (subject, encoding) {
2988 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2989
ab78acc6
IC
2990 var buf = new Buffer(subject, encoding)
2991 delete buf.parent
2992 return buf
2993}
3af2954a 2994
ab78acc6
IC
2995Buffer.isBuffer = function isBuffer (b) {
2996 return !!(b != null && b._isBuffer)
2997}
3af2954a 2998
ab78acc6
IC
2999Buffer.compare = function compare (a, b) {
3000 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
3001 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
3002 }
3003
ab78acc6 3004 if (a === b) return 0
3af2954a 3005
ab78acc6
IC
3006 var x = a.length
3007 var y = b.length
3af2954a 3008
ab78acc6
IC
3009 var i = 0
3010 var len = Math.min(x, y)
3011 while (i < len) {
3012 if (a[i] !== b[i]) break
3af2954a 3013
ab78acc6
IC
3014 ++i
3015 }
3af2954a 3016
ab78acc6
IC
3017 if (i !== len) {
3018 x = a[i]
3019 y = b[i]
3020 }
3af2954a 3021
ab78acc6
IC
3022 if (x < y) return -1
3023 if (y < x) return 1
3024 return 0
3025}
3af2954a 3026
ab78acc6
IC
3027Buffer.isEncoding = function isEncoding (encoding) {
3028 switch (String(encoding).toLowerCase()) {
3029 case 'hex':
3030 case 'utf8':
3031 case 'utf-8':
3032 case 'ascii':
3033 case 'binary':
3034 case 'base64':
3035 case 'raw':
3036 case 'ucs2':
3037 case 'ucs-2':
3038 case 'utf16le':
3039 case 'utf-16le':
3040 return true
3041 default:
3042 return false
3af2954a 3043 }
ab78acc6 3044}
3af2954a 3045
ab78acc6
IC
3046Buffer.concat = function concat (list, length) {
3047 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 3048
ab78acc6
IC
3049 if (list.length === 0) {
3050 return new Buffer(0)
3af2954a
IC
3051 }
3052
ab78acc6
IC
3053 var i
3054 if (length === undefined) {
3055 length = 0
3056 for (i = 0; i < list.length; i++) {
3057 length += list[i].length
3058 }
3af2954a
IC
3059 }
3060
ab78acc6
IC
3061 var buf = new Buffer(length)
3062 var pos = 0
3063 for (i = 0; i < list.length; i++) {
3064 var item = list[i]
3065 item.copy(buf, pos)
3066 pos += item.length
3067 }
3068 return buf
3069}
3af2954a 3070
ab78acc6
IC
3071function byteLength (string, encoding) {
3072 if (typeof string !== 'string') string = '' + string
3073
3074 var len = string.length
3075 if (len === 0) return 0
3076
3077 // Use a for loop to avoid recursion
3078 var loweredCase = false
3079 for (;;) {
3080 switch (encoding) {
3081 case 'ascii':
3082 case 'binary':
3083 // Deprecated
3084 case 'raw':
3085 case 'raws':
3086 return len
3087 case 'utf8':
3088 case 'utf-8':
3089 return utf8ToBytes(string).length
3090 case 'ucs2':
3091 case 'ucs-2':
3092 case 'utf16le':
3093 case 'utf-16le':
3094 return len * 2
3095 case 'hex':
3096 return len >>> 1
3097 case 'base64':
3098 return base64ToBytes(string).length
3099 default:
3100 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3101 encoding = ('' + encoding).toLowerCase()
3102 loweredCase = true
3af2954a 3103 }
3af2954a 3104 }
ab78acc6
IC
3105}
3106Buffer.byteLength = byteLength
3af2954a 3107
ab78acc6
IC
3108// pre-set for values that may exist in the future
3109Buffer.prototype.length = undefined
3110Buffer.prototype.parent = undefined
3af2954a 3111
ab78acc6
IC
3112function slowToString (encoding, start, end) {
3113 var loweredCase = false
3af2954a 3114
ab78acc6
IC
3115 start = start | 0
3116 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3117
ab78acc6
IC
3118 if (!encoding) encoding = 'utf8'
3119 if (start < 0) start = 0
3120 if (end > this.length) end = this.length
3121 if (end <= start) return ''
3af2954a 3122
ab78acc6
IC
3123 while (true) {
3124 switch (encoding) {
3125 case 'hex':
3126 return hexSlice(this, start, end)
3af2954a 3127
ab78acc6
IC
3128 case 'utf8':
3129 case 'utf-8':
3130 return utf8Slice(this, start, end)
3af2954a 3131
ab78acc6
IC
3132 case 'ascii':
3133 return asciiSlice(this, start, end)
3af2954a 3134
ab78acc6
IC
3135 case 'binary':
3136 return binarySlice(this, start, end)
3af2954a 3137
ab78acc6
IC
3138 case 'base64':
3139 return base64Slice(this, start, end)
3af2954a 3140
ab78acc6
IC
3141 case 'ucs2':
3142 case 'ucs-2':
3143 case 'utf16le':
3144 case 'utf-16le':
3145 return utf16leSlice(this, start, end)
3af2954a 3146
ab78acc6
IC
3147 default:
3148 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3149 encoding = (encoding + '').toLowerCase()
3150 loweredCase = true
3151 }
3af2954a 3152 }
ab78acc6 3153}
3af2954a 3154
ab78acc6
IC
3155Buffer.prototype.toString = function toString () {
3156 var length = this.length | 0
3157 if (length === 0) return ''
3158 if (arguments.length === 0) return utf8Slice(this, 0, length)
3159 return slowToString.apply(this, arguments)
3160}
3af2954a 3161
ab78acc6
IC
3162Buffer.prototype.equals = function equals (b) {
3163 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3164 if (this === b) return true
3165 return Buffer.compare(this, b) === 0
3166}
3af2954a 3167
ab78acc6
IC
3168Buffer.prototype.inspect = function inspect () {
3169 var str = ''
3170 var max = exports.INSPECT_MAX_BYTES
3171 if (this.length > 0) {
3172 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3173 if (this.length > max) str += ' ... '
3af2954a 3174 }
ab78acc6
IC
3175 return '<Buffer ' + str + '>'
3176}
3af2954a 3177
ab78acc6
IC
3178Buffer.prototype.compare = function compare (b) {
3179 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3180 if (this === b) return 0
3181 return Buffer.compare(this, b)
3182}
3af2954a 3183
ab78acc6
IC
3184Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3185 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3186 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3187 byteOffset >>= 0
3af2954a 3188
ab78acc6
IC
3189 if (this.length === 0) return -1
3190 if (byteOffset >= this.length) return -1
3af2954a 3191
ab78acc6
IC
3192 // Negative offsets start from the end of the buffer
3193 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3194
ab78acc6
IC
3195 if (typeof val === 'string') {
3196 if (val.length === 0) return -1 // special case: looking for empty string always fails
3197 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3198 }
ab78acc6
IC
3199 if (Buffer.isBuffer(val)) {
3200 return arrayIndexOf(this, val, byteOffset)
3af2954a 3201 }
ab78acc6
IC
3202 if (typeof val === 'number') {
3203 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3204 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3205 }
ab78acc6 3206 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3207 }
3208
ab78acc6
IC
3209 function arrayIndexOf (arr, val, byteOffset) {
3210 var foundIndex = -1
3211 for (var i = 0; byteOffset + i < arr.length; i++) {
3212 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3213 if (foundIndex === -1) foundIndex = i
3214 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3215 } else {
ab78acc6 3216 foundIndex = -1
3af2954a 3217 }
3af2954a 3218 }
ab78acc6
IC
3219 return -1
3220 }
3af2954a 3221
ab78acc6
IC
3222 throw new TypeError('val must be string, number or Buffer')
3223}
3af2954a 3224
ab78acc6
IC
3225// `get` is deprecated
3226Buffer.prototype.get = function get (offset) {
3227 console.log('.get() is deprecated. Access using array indexes instead.')
3228 return this.readUInt8(offset)
3229}
3af2954a 3230
ab78acc6
IC
3231// `set` is deprecated
3232Buffer.prototype.set = function set (v, offset) {
3233 console.log('.set() is deprecated. Access using array indexes instead.')
3234 return this.writeUInt8(v, offset)
3235}
3af2954a 3236
ab78acc6
IC
3237function hexWrite (buf, string, offset, length) {
3238 offset = Number(offset) || 0
3239 var remaining = buf.length - offset
3240 if (!length) {
3241 length = remaining
3242 } else {
3243 length = Number(length)
3244 if (length > remaining) {
3245 length = remaining
3246 }
3247 }
3af2954a 3248
ab78acc6
IC
3249 // must be an even number of digits
3250 var strLen = string.length
3251 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3252
ab78acc6
IC
3253 if (length > strLen / 2) {
3254 length = strLen / 2
3255 }
3256 for (var i = 0; i < length; i++) {
3257 var parsed = parseInt(string.substr(i * 2, 2), 16)
3258 if (isNaN(parsed)) throw new Error('Invalid hex string')
3259 buf[offset + i] = parsed
3af2954a 3260 }
ab78acc6
IC
3261 return i
3262}
3263
3264function utf8Write (buf, string, offset, length) {
3265 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3266}
3af2954a 3267
ab78acc6
IC
3268function asciiWrite (buf, string, offset, length) {
3269 return blitBuffer(asciiToBytes(string), buf, offset, length)
3270}
3af2954a 3271
ab78acc6
IC
3272function binaryWrite (buf, string, offset, length) {
3273 return asciiWrite(buf, string, offset, length)
3274}
3af2954a 3275
ab78acc6
IC
3276function base64Write (buf, string, offset, length) {
3277 return blitBuffer(base64ToBytes(string), buf, offset, length)
3278}
3af2954a 3279
ab78acc6
IC
3280function ucs2Write (buf, string, offset, length) {
3281 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3282}
3af2954a 3283
ab78acc6
IC
3284Buffer.prototype.write = function write (string, offset, length, encoding) {
3285 // Buffer#write(string)
3286 if (offset === undefined) {
3287 encoding = 'utf8'
3288 length = this.length
3289 offset = 0
3290 // Buffer#write(string, encoding)
3291 } else if (length === undefined && typeof offset === 'string') {
3292 encoding = offset
3293 length = this.length
3294 offset = 0
3295 // Buffer#write(string, offset[, length][, encoding])
3296 } else if (isFinite(offset)) {
3297 offset = offset | 0
3298 if (isFinite(length)) {
3299 length = length | 0
3300 if (encoding === undefined) encoding = 'utf8'
3301 } else {
3302 encoding = length
3303 length = undefined
3304 }
3305 // legacy write(string, encoding, offset, length) - remove in v0.13
3306 } else {
3307 var swap = encoding
3308 encoding = offset
3309 offset = length | 0
3310 length = swap
3af2954a
IC
3311 }
3312
ab78acc6
IC
3313 var remaining = this.length - offset
3314 if (length === undefined || length > remaining) length = remaining
3af2954a 3315
ab78acc6
IC
3316 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3317 throw new RangeError('attempt to write outside buffer bounds')
3318 }
3af2954a 3319
ab78acc6 3320 if (!encoding) encoding = 'utf8'
3af2954a 3321
ab78acc6
IC
3322 var loweredCase = false
3323 for (;;) {
3324 switch (encoding) {
3325 case 'hex':
3326 return hexWrite(this, string, offset, length)
ebd8d4e8 3327
ab78acc6
IC
3328 case 'utf8':
3329 case 'utf-8':
3330 return utf8Write(this, string, offset, length)
ebd8d4e8 3331
ab78acc6
IC
3332 case 'ascii':
3333 return asciiWrite(this, string, offset, length)
ebd8d4e8 3334
ab78acc6
IC
3335 case 'binary':
3336 return binaryWrite(this, string, offset, length)
ebd8d4e8 3337
ab78acc6
IC
3338 case 'base64':
3339 // Warning: maxLength not taken into account in base64Write
3340 return base64Write(this, string, offset, length)
ebd8d4e8 3341
ab78acc6
IC
3342 case 'ucs2':
3343 case 'ucs-2':
3344 case 'utf16le':
3345 case 'utf-16le':
3346 return ucs2Write(this, string, offset, length)
ebd8d4e8 3347
ab78acc6
IC
3348 default:
3349 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3350 encoding = ('' + encoding).toLowerCase()
3351 loweredCase = true
3352 }
3353 }
3354}
212b1b46 3355
ab78acc6
IC
3356Buffer.prototype.toJSON = function toJSON () {
3357 return {
3358 type: 'Buffer',
3359 data: Array.prototype.slice.call(this._arr || this, 0)
3360 }
3361}
212b1b46 3362
ab78acc6
IC
3363function base64Slice (buf, start, end) {
3364 if (start === 0 && end === buf.length) {
3365 return base64.fromByteArray(buf)
3366 } else {
3367 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3368 }
ab78acc6
IC
3369}
3370
3371function utf8Slice (buf, start, end) {
3372 end = Math.min(buf.length, end)
3373 var firstByte
3374 var secondByte
3375 var thirdByte
3376 var fourthByte
3377 var bytesPerSequence
3378 var tempCodePoint
3379 var codePoint
3380 var res = []
3381 var i = start
3382
3383 for (; i < end; i += bytesPerSequence) {
3384 firstByte = buf[i]
3385 codePoint = 0xFFFD
3386
3387 if (firstByte > 0xEF) {
3388 bytesPerSequence = 4
3389 } else if (firstByte > 0xDF) {
3390 bytesPerSequence = 3
3391 } else if (firstByte > 0xBF) {
3392 bytesPerSequence = 2
3393 } else {
3394 bytesPerSequence = 1
3395 }
212b1b46 3396
ab78acc6
IC
3397 if (i + bytesPerSequence <= end) {
3398 switch (bytesPerSequence) {
3399 case 1:
3400 if (firstByte < 0x80) {
3401 codePoint = firstByte
3402 }
3403 break
3404 case 2:
3405 secondByte = buf[i + 1]
3406 if ((secondByte & 0xC0) === 0x80) {
3407 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3408 if (tempCodePoint > 0x7F) {
3409 codePoint = tempCodePoint
3410 }
3411 }
3412 break
3413 case 3:
3414 secondByte = buf[i + 1]
3415 thirdByte = buf[i + 2]
3416 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3417 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3418 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3419 codePoint = tempCodePoint
3420 }
3421 }
3422 break
3423 case 4:
3424 secondByte = buf[i + 1]
3425 thirdByte = buf[i + 2]
3426 fourthByte = buf[i + 3]
3427 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3428 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3429 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3430 codePoint = tempCodePoint
3431 }
3432 }
3433 }
3434 }
212b1b46 3435
ab78acc6
IC
3436 if (codePoint === 0xFFFD) {
3437 // we generated an invalid codePoint so make sure to only advance by 1 byte
3438 bytesPerSequence = 1
3439 } else if (codePoint > 0xFFFF) {
3440 // encode to utf16 (surrogate pair dance)
3441 codePoint -= 0x10000
3442 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3443 codePoint = 0xDC00 | codePoint & 0x3FF
3444 }
212b1b46 3445
ab78acc6 3446 res.push(codePoint)
3af2954a 3447 }
212b1b46 3448
ab78acc6
IC
3449 return String.fromCharCode.apply(String, res)
3450}
212b1b46 3451
ab78acc6
IC
3452function asciiSlice (buf, start, end) {
3453 var ret = ''
3454 end = Math.min(buf.length, end)
3455
3456 for (var i = start; i < end; i++) {
3457 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3458 }
ab78acc6
IC
3459 return ret
3460}
212b1b46 3461
ab78acc6
IC
3462function binarySlice (buf, start, end) {
3463 var ret = ''
3464 end = Math.min(buf.length, end)
212b1b46 3465
ab78acc6
IC
3466 for (var i = start; i < end; i++) {
3467 ret += String.fromCharCode(buf[i])
3468 }
3469 return ret
3470}
212b1b46 3471
ab78acc6
IC
3472function hexSlice (buf, start, end) {
3473 var len = buf.length
212b1b46 3474
ab78acc6
IC
3475 if (!start || start < 0) start = 0
3476 if (!end || end < 0 || end > len) end = len
212b1b46 3477
ab78acc6
IC
3478 var out = ''
3479 for (var i = start; i < end; i++) {
3480 out += toHex(buf[i])
3481 }
3482 return out
3483}
212b1b46 3484
ab78acc6
IC
3485function utf16leSlice (buf, start, end) {
3486 var bytes = buf.slice(start, end)
3487 var res = ''
3488 for (var i = 0; i < bytes.length; i += 2) {
3489 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3490 }
3491 return res
3492}
212b1b46 3493
ab78acc6
IC
3494Buffer.prototype.slice = function slice (start, end) {
3495 var len = this.length
3496 start = ~~start
3497 end = end === undefined ? len : ~~end
212b1b46 3498
ab78acc6
IC
3499 if (start < 0) {
3500 start += len
3501 if (start < 0) start = 0
3502 } else if (start > len) {
3503 start = len
3504 }
212b1b46 3505
ab78acc6
IC
3506 if (end < 0) {
3507 end += len
3508 if (end < 0) end = 0
3509 } else if (end > len) {
3510 end = len
3511 }
212b1b46 3512
ab78acc6 3513 if (end < start) end = start
212b1b46 3514
ab78acc6
IC
3515 var newBuf
3516 if (Buffer.TYPED_ARRAY_SUPPORT) {
3517 newBuf = Buffer._augment(this.subarray(start, end))
3518 } else {
3519 var sliceLen = end - start
3520 newBuf = new Buffer(sliceLen, undefined)
3521 for (var i = 0; i < sliceLen; i++) {
3522 newBuf[i] = this[i + start]
3af2954a
IC
3523 }
3524 }
212b1b46 3525
ab78acc6 3526 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3527
ab78acc6
IC
3528 return newBuf
3529}
ebd8d4e8 3530
ab78acc6
IC
3531/*
3532 * Need to make sure that buffer isn't trying to write out of bounds.
3533 */
3534function checkOffset (offset, ext, length) {
3535 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3536 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3537}
ebd8d4e8 3538
ab78acc6
IC
3539Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3540 offset = offset | 0
3541 byteLength = byteLength | 0
3542 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3543
ab78acc6
IC
3544 var val = this[offset]
3545 var mul = 1
3546 var i = 0
3547 while (++i < byteLength && (mul *= 0x100)) {
3548 val += this[offset + i] * mul
3549 }
3af2954a 3550
ab78acc6
IC
3551 return val
3552}
3af2954a 3553
ab78acc6
IC
3554Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3555 offset = offset | 0
3556 byteLength = byteLength | 0
3557 if (!noAssert) {
3558 checkOffset(offset, byteLength, this.length)
3559 }
3af2954a 3560
ab78acc6
IC
3561 var val = this[offset + --byteLength]
3562 var mul = 1
3563 while (byteLength > 0 && (mul *= 0x100)) {
3564 val += this[offset + --byteLength] * mul
3af2954a
IC
3565 }
3566
ab78acc6
IC
3567 return val
3568}
3af2954a 3569
ab78acc6
IC
3570Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3571 if (!noAssert) checkOffset(offset, 1, this.length)
3572 return this[offset]
3573}
3af2954a 3574
ab78acc6
IC
3575Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3576 if (!noAssert) checkOffset(offset, 2, this.length)
3577 return this[offset] | (this[offset + 1] << 8)
3578}
3af2954a 3579
ab78acc6
IC
3580Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3581 if (!noAssert) checkOffset(offset, 2, this.length)
3582 return (this[offset] << 8) | this[offset + 1]
3583}
ebd8d4e8 3584
ab78acc6
IC
3585Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3586 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3587
ab78acc6
IC
3588 return ((this[offset]) |
3589 (this[offset + 1] << 8) |
3590 (this[offset + 2] << 16)) +
3591 (this[offset + 3] * 0x1000000)
3592}
3af2954a 3593
ab78acc6
IC
3594Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3595 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3596
ab78acc6
IC
3597 return (this[offset] * 0x1000000) +
3598 ((this[offset + 1] << 16) |
3599 (this[offset + 2] << 8) |
3600 this[offset + 3])
3601}
ebd8d4e8 3602
ab78acc6
IC
3603Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3604 offset = offset | 0
3605 byteLength = byteLength | 0
3606 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3607
ab78acc6
IC
3608 var val = this[offset]
3609 var mul = 1
3610 var i = 0
3611 while (++i < byteLength && (mul *= 0x100)) {
3612 val += this[offset + i] * mul
ebd8d4e8 3613 }
ab78acc6 3614 mul *= 0x80
ebd8d4e8 3615
ab78acc6
IC
3616 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3617
3618 return val
ebd8d4e8
IC
3619}
3620
ab78acc6
IC
3621Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3622 offset = offset | 0
3623 byteLength = byteLength | 0
3624 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3625
ab78acc6
IC
3626 var i = byteLength
3627 var mul = 1
3628 var val = this[offset + --i]
3629 while (i > 0 && (mul *= 0x100)) {
3630 val += this[offset + --i] * mul
3631 }
3632 mul *= 0x80
ebd8d4e8 3633
ab78acc6 3634 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3635
ab78acc6
IC
3636 return val
3637}
ebd8d4e8 3638
ab78acc6
IC
3639Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset, 1, this.length)
3641 if (!(this[offset] & 0x80)) return (this[offset])
3642 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3643}
ab78acc6
IC
3644
3645Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3646 if (!noAssert) checkOffset(offset, 2, this.length)
3647 var val = this[offset] | (this[offset + 1] << 8)
3648 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3649}
ab78acc6
IC
3650
3651Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3652 if (!noAssert) checkOffset(offset, 2, this.length)
3653 var val = this[offset + 1] | (this[offset] << 8)
3654 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3655}
3656
ab78acc6
IC
3657Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3658 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3659
ab78acc6
IC
3660 return (this[offset]) |
3661 (this[offset + 1] << 8) |
3662 (this[offset + 2] << 16) |
3663 (this[offset + 3] << 24)
ebd8d4e8 3664}
ebd8d4e8 3665
ab78acc6
IC
3666Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3667 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3668
ab78acc6
IC
3669 return (this[offset] << 24) |
3670 (this[offset + 1] << 16) |
3671 (this[offset + 2] << 8) |
3672 (this[offset + 3])
ebd8d4e8
IC
3673}
3674
ab78acc6
IC
3675Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3676 if (!noAssert) checkOffset(offset, 4, this.length)
3677 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3678}
3679
ab78acc6
IC
3680Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3681 if (!noAssert) checkOffset(offset, 4, this.length)
3682 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3683}
3684
ab78acc6
IC
3685Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3686 if (!noAssert) checkOffset(offset, 8, this.length)
3687 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3688}
3689
ab78acc6
IC
3690Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3691 if (!noAssert) checkOffset(offset, 8, this.length)
3692 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3693}
3694
ab78acc6
IC
3695function checkInt (buf, value, offset, ext, max, min) {
3696 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3697 if (value > max || value < min) throw new RangeError('value is out of bounds')
3698 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3699}
3700
ab78acc6
IC
3701Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3702 value = +value
3703 offset = offset | 0
3704 byteLength = byteLength | 0
3705 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3706
ab78acc6
IC
3707 var mul = 1
3708 var i = 0
3709 this[offset] = value & 0xFF
3710 while (++i < byteLength && (mul *= 0x100)) {
3711 this[offset + i] = (value / mul) & 0xFF
3712 }
ebd8d4e8 3713
ab78acc6 3714 return offset + byteLength
ebd8d4e8
IC
3715}
3716
ab78acc6
IC
3717Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3718 value = +value
3719 offset = offset | 0
3720 byteLength = byteLength | 0
3721 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3722
ab78acc6
IC
3723 var i = byteLength - 1
3724 var mul = 1
3725 this[offset + i] = value & 0xFF
3726 while (--i >= 0 && (mul *= 0x100)) {
3727 this[offset + i] = (value / mul) & 0xFF
3728 }
ebd8d4e8 3729
ab78acc6 3730 return offset + byteLength
ebd8d4e8
IC
3731}
3732
ab78acc6
IC
3733Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3734 value = +value
3735 offset = offset | 0
3736 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3737 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3738 this[offset] = value
3739 return offset + 1
ebd8d4e8
IC
3740}
3741
ab78acc6
IC
3742function objectWriteUInt16 (buf, value, offset, littleEndian) {
3743 if (value < 0) value = 0xffff + value + 1
3744 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3745 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3746 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3747 }
ebd8d4e8
IC
3748}
3749
ab78acc6
IC
3750Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3751 value = +value
3752 offset = offset | 0
3753 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3754 if (Buffer.TYPED_ARRAY_SUPPORT) {
3755 this[offset] = value
3756 this[offset + 1] = (value >>> 8)
3757 } else {
3758 objectWriteUInt16(this, value, offset, true)
3759 }
3760 return offset + 2
ebd8d4e8
IC
3761}
3762
ab78acc6
IC
3763Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3764 value = +value
3765 offset = offset | 0
3766 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3767 if (Buffer.TYPED_ARRAY_SUPPORT) {
3768 this[offset] = (value >>> 8)
3769 this[offset + 1] = value
3770 } else {
3771 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3772 }
ab78acc6 3773 return offset + 2
ebd8d4e8
IC
3774}
3775
ab78acc6
IC
3776function objectWriteUInt32 (buf, value, offset, littleEndian) {
3777 if (value < 0) value = 0xffffffff + value + 1
3778 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3779 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3780 }
ebd8d4e8
IC
3781}
3782
ab78acc6
IC
3783Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3784 value = +value
3785 offset = offset | 0
3786 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3787 if (Buffer.TYPED_ARRAY_SUPPORT) {
3788 this[offset + 3] = (value >>> 24)
3789 this[offset + 2] = (value >>> 16)
3790 this[offset + 1] = (value >>> 8)
3791 this[offset] = value
3792 } else {
3793 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3794 }
ab78acc6 3795 return offset + 4
ebd8d4e8
IC
3796}
3797
ab78acc6
IC
3798Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3799 value = +value
3800 offset = offset | 0
3801 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3802 if (Buffer.TYPED_ARRAY_SUPPORT) {
3803 this[offset] = (value >>> 24)
3804 this[offset + 1] = (value >>> 16)
3805 this[offset + 2] = (value >>> 8)
3806 this[offset + 3] = value
3807 } else {
3808 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3809 }
ab78acc6
IC
3810 return offset + 4
3811}
3812
3813Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3814 value = +value
3815 offset = offset | 0
3816 if (!noAssert) {
3817 var limit = Math.pow(2, 8 * byteLength - 1)
3818
3819 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3820 }
ab78acc6
IC
3821
3822 var i = 0
3823 var mul = 1
3824 var sub = value < 0 ? 1 : 0
3825 this[offset] = value & 0xFF
3826 while (++i < byteLength && (mul *= 0x100)) {
3827 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3828 }
ebd8d4e8 3829
ab78acc6 3830 return offset + byteLength
ebd8d4e8
IC
3831}
3832
ab78acc6
IC
3833Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3834 value = +value
3835 offset = offset | 0
3836 if (!noAssert) {
3837 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3838
ab78acc6
IC
3839 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3840 }
ebd8d4e8 3841
ab78acc6
IC
3842 var i = byteLength - 1
3843 var mul = 1
3844 var sub = value < 0 ? 1 : 0
3845 this[offset + i] = value & 0xFF
3846 while (--i >= 0 && (mul *= 0x100)) {
3847 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3848 }
3849
3850 return offset + byteLength
ebd8d4e8
IC
3851}
3852
ab78acc6
IC
3853Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3854 value = +value
3855 offset = offset | 0
3856 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3857 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3858 if (value < 0) value = 0xff + value + 1
3859 this[offset] = value
3860 return offset + 1
ebd8d4e8
IC
3861}
3862
ab78acc6
IC
3863Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3864 value = +value
3865 offset = offset | 0
3866 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3867 if (Buffer.TYPED_ARRAY_SUPPORT) {
3868 this[offset] = value
3869 this[offset + 1] = (value >>> 8)
3870 } else {
3871 objectWriteUInt16(this, value, offset, true)
3872 }
3873 return offset + 2
ebd8d4e8
IC
3874}
3875
ab78acc6
IC
3876Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3877 value = +value
3878 offset = offset | 0
3879 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3880 if (Buffer.TYPED_ARRAY_SUPPORT) {
3881 this[offset] = (value >>> 8)
3882 this[offset + 1] = value
3883 } else {
3884 objectWriteUInt16(this, value, offset, false)
3885 }
3886 return offset + 2
ebd8d4e8
IC
3887}
3888
ab78acc6
IC
3889Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3890 value = +value
3891 offset = offset | 0
3892 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3893 if (Buffer.TYPED_ARRAY_SUPPORT) {
3894 this[offset] = value
3895 this[offset + 1] = (value >>> 8)
3896 this[offset + 2] = (value >>> 16)
3897 this[offset + 3] = (value >>> 24)
3898 } else {
3899 objectWriteUInt32(this, value, offset, true)
3900 }
3901 return offset + 4
3902}
3903
3904Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3905 value = +value
3906 offset = offset | 0
3907 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3908 if (value < 0) value = 0xffffffff + value + 1
3909 if (Buffer.TYPED_ARRAY_SUPPORT) {
3910 this[offset] = (value >>> 24)
3911 this[offset + 1] = (value >>> 16)
3912 this[offset + 2] = (value >>> 8)
3913 this[offset + 3] = value
3914 } else {
3915 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3916 }
ab78acc6 3917 return offset + 4
ebd8d4e8
IC
3918}
3919
ab78acc6
IC
3920function checkIEEE754 (buf, value, offset, ext, max, min) {
3921 if (value > max || value < min) throw new RangeError('value is out of bounds')
3922 if (offset + ext > buf.length) throw new RangeError('index out of range')
3923 if (offset < 0) throw new RangeError('index out of range')
3924}
ebd8d4e8 3925
ab78acc6
IC
3926function writeFloat (buf, value, offset, littleEndian, noAssert) {
3927 if (!noAssert) {
3928 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3929 }
3930 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3931 return offset + 4
3932}
ebd8d4e8 3933
ab78acc6
IC
3934Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3935 return writeFloat(this, value, offset, true, noAssert)
3936}
ebd8d4e8 3937
ab78acc6
IC
3938Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3939 return writeFloat(this, value, offset, false, noAssert)
3940}
ebd8d4e8 3941
ab78acc6
IC
3942function writeDouble (buf, value, offset, littleEndian, noAssert) {
3943 if (!noAssert) {
3944 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3945 }
ab78acc6
IC
3946 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3947 return offset + 8
ebd8d4e8
IC
3948}
3949
ab78acc6
IC
3950Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3951 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3952}
3953
ab78acc6
IC
3954Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3955 return writeDouble(this, value, offset, false, noAssert)
3956}
ebd8d4e8 3957
ab78acc6
IC
3958// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3959Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3960 if (!start) start = 0
3961 if (!end && end !== 0) end = this.length
3962 if (targetStart >= target.length) targetStart = target.length
3963 if (!targetStart) targetStart = 0
3964 if (end > 0 && end < start) end = start
3965
3966 // Copy 0 bytes; we're done
3967 if (end === start) return 0
3968 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3969
ab78acc6
IC
3970 // Fatal error conditions
3971 if (targetStart < 0) {
3972 throw new RangeError('targetStart out of bounds')
3973 }
3974 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3975 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3976
ab78acc6
IC
3977 // Are we oob?
3978 if (end > this.length) end = this.length
3979 if (target.length - targetStart < end - start) {
3980 end = target.length - targetStart + start
3981 }
ebd8d4e8 3982
ab78acc6
IC
3983 var len = end - start
3984 var i
ebd8d4e8 3985
ab78acc6
IC
3986 if (this === target && start < targetStart && targetStart < end) {
3987 // descending copy from end
3988 for (i = len - 1; i >= 0; i--) {
3989 target[i + targetStart] = this[i + start]
3990 }
3991 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3992 // ascending copy from start
3993 for (i = 0; i < len; i++) {
3994 target[i + targetStart] = this[i + start]
3995 }
3996 } else {
3997 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3998 }
ebd8d4e8 3999
ab78acc6
IC
4000 return len
4001}
ebd8d4e8 4002
ab78acc6
IC
4003// fill(value, start=0, end=buffer.length)
4004Buffer.prototype.fill = function fill (value, start, end) {
4005 if (!value) value = 0
4006 if (!start) start = 0
4007 if (!end) end = this.length
ebd8d4e8 4008
ab78acc6 4009 if (end < start) throw new RangeError('end < start')
ebd8d4e8 4010
ab78acc6
IC
4011 // Fill 0 bytes; we're done
4012 if (end === start) return
4013 if (this.length === 0) return
ebd8d4e8 4014
ab78acc6
IC
4015 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4016 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 4017
ab78acc6
IC
4018 var i
4019 if (typeof value === 'number') {
4020 for (i = start; i < end; i++) {
4021 this[i] = value
ebd8d4e8 4022 }
ab78acc6
IC
4023 } else {
4024 var bytes = utf8ToBytes(value.toString())
4025 var len = bytes.length
4026 for (i = start; i < end; i++) {
4027 this[i] = bytes[i % len]
ebd8d4e8
IC
4028 }
4029 }
ebd8d4e8 4030
ab78acc6 4031 return this
ebd8d4e8
IC
4032}
4033
ab78acc6
IC
4034/**
4035 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4036 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4037 */
4038Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4039 if (typeof Uint8Array !== 'undefined') {
4040 if (Buffer.TYPED_ARRAY_SUPPORT) {
4041 return (new Buffer(this)).buffer
4042 } else {
4043 var buf = new Uint8Array(this.length)
4044 for (var i = 0, len = buf.length; i < len; i += 1) {
4045 buf[i] = this[i]
ebd8d4e8 4046 }
ab78acc6 4047 return buf.buffer
ebd8d4e8 4048 }
ab78acc6
IC
4049 } else {
4050 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 4051 }
ebd8d4e8
IC
4052}
4053
ab78acc6
IC
4054// HELPER FUNCTIONS
4055// ================
ebd8d4e8 4056
ab78acc6 4057var BP = Buffer.prototype
ebd8d4e8 4058
ab78acc6
IC
4059/**
4060 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4061 */
4062Buffer._augment = function _augment (arr) {
4063 arr.constructor = Buffer
4064 arr._isBuffer = true
ebd8d4e8 4065
ab78acc6
IC
4066 // save reference to original Uint8Array set method before overwriting
4067 arr._set = arr.set
ebd8d4e8 4068
ab78acc6
IC
4069 // deprecated
4070 arr.get = BP.get
4071 arr.set = BP.set
ebd8d4e8 4072
ab78acc6
IC
4073 arr.write = BP.write
4074 arr.toString = BP.toString
4075 arr.toLocaleString = BP.toString
4076 arr.toJSON = BP.toJSON
4077 arr.equals = BP.equals
4078 arr.compare = BP.compare
4079 arr.indexOf = BP.indexOf
4080 arr.copy = BP.copy
4081 arr.slice = BP.slice
4082 arr.readUIntLE = BP.readUIntLE
4083 arr.readUIntBE = BP.readUIntBE
4084 arr.readUInt8 = BP.readUInt8
4085 arr.readUInt16LE = BP.readUInt16LE
4086 arr.readUInt16BE = BP.readUInt16BE
4087 arr.readUInt32LE = BP.readUInt32LE
4088 arr.readUInt32BE = BP.readUInt32BE
4089 arr.readIntLE = BP.readIntLE
4090 arr.readIntBE = BP.readIntBE
4091 arr.readInt8 = BP.readInt8
4092 arr.readInt16LE = BP.readInt16LE
4093 arr.readInt16BE = BP.readInt16BE
4094 arr.readInt32LE = BP.readInt32LE
4095 arr.readInt32BE = BP.readInt32BE
4096 arr.readFloatLE = BP.readFloatLE
4097 arr.readFloatBE = BP.readFloatBE
4098 arr.readDoubleLE = BP.readDoubleLE
4099 arr.readDoubleBE = BP.readDoubleBE
4100 arr.writeUInt8 = BP.writeUInt8
4101 arr.writeUIntLE = BP.writeUIntLE
4102 arr.writeUIntBE = BP.writeUIntBE
4103 arr.writeUInt16LE = BP.writeUInt16LE
4104 arr.writeUInt16BE = BP.writeUInt16BE
4105 arr.writeUInt32LE = BP.writeUInt32LE
4106 arr.writeUInt32BE = BP.writeUInt32BE
4107 arr.writeIntLE = BP.writeIntLE
4108 arr.writeIntBE = BP.writeIntBE
4109 arr.writeInt8 = BP.writeInt8
4110 arr.writeInt16LE = BP.writeInt16LE
4111 arr.writeInt16BE = BP.writeInt16BE
4112 arr.writeInt32LE = BP.writeInt32LE
4113 arr.writeInt32BE = BP.writeInt32BE
4114 arr.writeFloatLE = BP.writeFloatLE
4115 arr.writeFloatBE = BP.writeFloatBE
4116 arr.writeDoubleLE = BP.writeDoubleLE
4117 arr.writeDoubleBE = BP.writeDoubleBE
4118 arr.fill = BP.fill
4119 arr.inspect = BP.inspect
4120 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4121
ab78acc6 4122 return arr
ebd8d4e8
IC
4123}
4124
ab78acc6 4125var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4126
ab78acc6
IC
4127function base64clean (str) {
4128 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4129 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4130 // Node converts strings with length < 2 to ''
4131 if (str.length < 2) return ''
4132 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4133 while (str.length % 4 !== 0) {
4134 str = str + '='
4135 }
4136 return str
ebd8d4e8
IC
4137}
4138
ab78acc6
IC
4139function stringtrim (str) {
4140 if (str.trim) return str.trim()
4141 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4142}
4143
ab78acc6
IC
4144function toHex (n) {
4145 if (n < 16) return '0' + n.toString(16)
4146 return n.toString(16)
ebd8d4e8
IC
4147}
4148
ab78acc6
IC
4149function utf8ToBytes (string, units) {
4150 units = units || Infinity
4151 var codePoint
4152 var length = string.length
4153 var leadSurrogate = null
4154 var bytes = []
ebd8d4e8 4155
ab78acc6
IC
4156 for (var i = 0; i < length; i++) {
4157 codePoint = string.charCodeAt(i)
ebd8d4e8 4158
ab78acc6
IC
4159 // is surrogate component
4160 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4161 // last char was a lead
4162 if (!leadSurrogate) {
4163 // no lead yet
4164 if (codePoint > 0xDBFF) {
4165 // unexpected trail
4166 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4167 continue
ebd8d4e8 4168
ab78acc6
IC
4169 } else if (i + 1 === length) {
4170 // unpaired lead
4171 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4172 continue
4173 }
ebd8d4e8 4174
ab78acc6
IC
4175 // valid lead
4176 leadSurrogate = codePoint
ebd8d4e8 4177
ab78acc6
IC
4178 continue
4179 }
ebd8d4e8 4180
ab78acc6
IC
4181 // 2 leads in a row
4182 if (codePoint < 0xDC00) {
4183 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4184 leadSurrogate = codePoint
4185 continue
4186 }
ebd8d4e8 4187
ab78acc6
IC
4188 // valid surrogate pair
4189 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4190
4191 } else if (leadSurrogate) {
4192 // valid bmp char, but last char was a lead
4193 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4194 }
4195
4196 leadSurrogate = null
4197
4198 // encode utf8
4199 if (codePoint < 0x80) {
4200 if ((units -= 1) < 0) break
4201 bytes.push(codePoint)
4202 } else if (codePoint < 0x800) {
4203 if ((units -= 2) < 0) break
4204 bytes.push(
4205 codePoint >> 0x6 | 0xC0,
4206 codePoint & 0x3F | 0x80
4207 )
4208 } else if (codePoint < 0x10000) {
4209 if ((units -= 3) < 0) break
4210 bytes.push(
4211 codePoint >> 0xC | 0xE0,
4212 codePoint >> 0x6 & 0x3F | 0x80,
4213 codePoint & 0x3F | 0x80
4214 )
4215 } else if (codePoint < 0x110000) {
4216 if ((units -= 4) < 0) break
4217 bytes.push(
4218 codePoint >> 0x12 | 0xF0,
4219 codePoint >> 0xC & 0x3F | 0x80,
4220 codePoint >> 0x6 & 0x3F | 0x80,
4221 codePoint & 0x3F | 0x80
4222 )
4223 } else {
4224 throw new Error('Invalid code point')
ebd8d4e8 4225 }
ebd8d4e8 4226 }
ab78acc6
IC
4227
4228 return bytes
4229}
4230
4231function asciiToBytes (str) {
4232 var byteArray = []
4233 for (var i = 0; i < str.length; i++) {
4234 // Node's code seems to be doing this and not & 0x7F..
4235 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4236 }
ab78acc6 4237 return byteArray
ebd8d4e8
IC
4238}
4239
ab78acc6
IC
4240function utf16leToBytes (str, units) {
4241 var c, hi, lo
4242 var byteArray = []
4243 for (var i = 0; i < str.length; i++) {
4244 if ((units -= 2) < 0) break
ebd8d4e8 4245
ab78acc6
IC
4246 c = str.charCodeAt(i)
4247 hi = c >> 8
4248 lo = c % 256
4249 byteArray.push(lo)
4250 byteArray.push(hi)
4251 }
ebd8d4e8 4252
ab78acc6
IC
4253 return byteArray
4254}
ebd8d4e8 4255
ab78acc6
IC
4256function base64ToBytes (str) {
4257 return base64.toByteArray(base64clean(str))
4258}
ebd8d4e8 4259
ab78acc6
IC
4260function blitBuffer (src, dst, offset, length) {
4261 for (var i = 0; i < length; i++) {
4262 if ((i + offset >= dst.length) || (i >= src.length)) break
4263 dst[i + offset] = src[i]
4264 }
4265 return i
4266}
4267
4268},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4269var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4270
4271;(function (exports) {
4272 'use strict';
4273
4274 var Arr = (typeof Uint8Array !== 'undefined')
4275 ? Uint8Array
4276 : Array
ebd8d4e8 4277
ab78acc6
IC
4278 var PLUS = '+'.charCodeAt(0)
4279 var SLASH = '/'.charCodeAt(0)
4280 var NUMBER = '0'.charCodeAt(0)
4281 var LOWER = 'a'.charCodeAt(0)
4282 var UPPER = 'A'.charCodeAt(0)
4283 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4284 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4285
ab78acc6
IC
4286 function decode (elt) {
4287 var code = elt.charCodeAt(0)
4288 if (code === PLUS ||
4289 code === PLUS_URL_SAFE)
4290 return 62 // '+'
4291 if (code === SLASH ||
4292 code === SLASH_URL_SAFE)
4293 return 63 // '/'
4294 if (code < NUMBER)
4295 return -1 //no match
4296 if (code < NUMBER + 10)
4297 return code - NUMBER + 26 + 26
4298 if (code < UPPER + 26)
4299 return code - UPPER
4300 if (code < LOWER + 26)
4301 return code - LOWER + 26
4302 }
ebd8d4e8 4303
ab78acc6
IC
4304 function b64ToByteArray (b64) {
4305 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4306
ab78acc6
IC
4307 if (b64.length % 4 > 0) {
4308 throw new Error('Invalid string. Length must be a multiple of 4')
4309 }
ebd8d4e8 4310
ab78acc6
IC
4311 // the number of equal signs (place holders)
4312 // if there are two placeholders, than the two characters before it
4313 // represent one byte
4314 // if there is only one, then the three characters before it represent 2 bytes
4315 // this is just a cheap hack to not do indexOf twice
4316 var len = b64.length
4317 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4318
ab78acc6
IC
4319 // base64 is 4/3 + up to two characters of the original data
4320 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4321
ab78acc6
IC
4322 // if there are placeholders, only get up to the last complete 4 chars
4323 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4324
ab78acc6 4325 var L = 0
ebd8d4e8 4326
ab78acc6
IC
4327 function push (v) {
4328 arr[L++] = v
4329 }
ebd8d4e8 4330
ab78acc6
IC
4331 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4332 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4333 push((tmp & 0xFF0000) >> 16)
4334 push((tmp & 0xFF00) >> 8)
4335 push(tmp & 0xFF)
4336 }
ebd8d4e8 4337
ab78acc6
IC
4338 if (placeHolders === 2) {
4339 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4340 push(tmp & 0xFF)
4341 } else if (placeHolders === 1) {
4342 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4343 push((tmp >> 8) & 0xFF)
4344 push(tmp & 0xFF)
4345 }
ebd8d4e8 4346
ab78acc6
IC
4347 return arr
4348 }
ebd8d4e8 4349
ab78acc6
IC
4350 function uint8ToBase64 (uint8) {
4351 var i,
4352 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4353 output = "",
4354 temp, length
ebd8d4e8 4355
ab78acc6
IC
4356 function encode (num) {
4357 return lookup.charAt(num)
4358 }
ebd8d4e8 4359
ab78acc6
IC
4360 function tripletToBase64 (num) {
4361 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4362 }
ebd8d4e8 4363
ab78acc6
IC
4364 // go through the array every three bytes, we'll deal with trailing stuff later
4365 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4366 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4367 output += tripletToBase64(temp)
4368 }
ebd8d4e8 4369
ab78acc6
IC
4370 // pad the end with zeros, but make sure to not forget the extra bytes
4371 switch (extraBytes) {
4372 case 1:
4373 temp = uint8[uint8.length - 1]
4374 output += encode(temp >> 2)
4375 output += encode((temp << 4) & 0x3F)
4376 output += '=='
4377 break
4378 case 2:
4379 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4380 output += encode(temp >> 10)
4381 output += encode((temp >> 4) & 0x3F)
4382 output += encode((temp << 2) & 0x3F)
4383 output += '='
4384 break
4385 }
ebd8d4e8 4386
ab78acc6
IC
4387 return output
4388 }
ebd8d4e8 4389
ab78acc6
IC
4390 exports.toByteArray = b64ToByteArray
4391 exports.fromByteArray = uint8ToBase64
4392}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4393
ab78acc6
IC
4394},{}],9:[function(require,module,exports){
4395exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4396 var e, m
4397 var eLen = nBytes * 8 - mLen - 1
4398 var eMax = (1 << eLen) - 1
4399 var eBias = eMax >> 1
4400 var nBits = -7
4401 var i = isLE ? (nBytes - 1) : 0
4402 var d = isLE ? -1 : 1
4403 var s = buffer[offset + i]
4404
4405 i += d
4406
4407 e = s & ((1 << (-nBits)) - 1)
4408 s >>= (-nBits)
4409 nBits += eLen
4410 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4411
4412 m = e & ((1 << (-nBits)) - 1)
4413 e >>= (-nBits)
4414 nBits += mLen
4415 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4416
ab78acc6
IC
4417 if (e === 0) {
4418 e = 1 - eBias
4419 } else if (e === eMax) {
4420 return m ? NaN : ((s ? -1 : 1) * Infinity)
4421 } else {
4422 m = m + Math.pow(2, mLen)
4423 e = e - eBias
ebd8d4e8 4424 }
ab78acc6 4425 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4426}
4427
ab78acc6
IC
4428exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4429 var e, m, c
4430 var eLen = nBytes * 8 - mLen - 1
4431 var eMax = (1 << eLen) - 1
4432 var eBias = eMax >> 1
4433 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4434 var i = isLE ? 0 : (nBytes - 1)
4435 var d = isLE ? 1 : -1
4436 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4437
ab78acc6 4438 value = Math.abs(value)
ebd8d4e8 4439
ab78acc6
IC
4440 if (isNaN(value) || value === Infinity) {
4441 m = isNaN(value) ? 1 : 0
4442 e = eMax
4443 } else {
4444 e = Math.floor(Math.log(value) / Math.LN2)
4445 if (value * (c = Math.pow(2, -e)) < 1) {
4446 e--
4447 c *= 2
ebd8d4e8 4448 }
ab78acc6
IC
4449 if (e + eBias >= 1) {
4450 value += rt / c
4451 } else {
4452 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4453 }
ab78acc6
IC
4454 if (value * c >= 2) {
4455 e++
4456 c /= 2
ebd8d4e8 4457 }
ab78acc6
IC
4458
4459 if (e + eBias >= eMax) {
4460 m = 0
4461 e = eMax
4462 } else if (e + eBias >= 1) {
4463 m = (value * c - 1) * Math.pow(2, mLen)
4464 e = e + eBias
4465 } else {
4466 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4467 e = 0
ebd8d4e8
IC
4468 }
4469 }
ebd8d4e8 4470
ab78acc6 4471 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4472
ab78acc6
IC
4473 e = (e << mLen) | m
4474 eLen += mLen
4475 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4476
ab78acc6
IC
4477 buffer[offset + i - d] |= s * 128
4478}
ebd8d4e8 4479
ab78acc6 4480},{}],10:[function(require,module,exports){
ebd8d4e8 4481
ab78acc6
IC
4482/**
4483 * isArray
4484 */
ebd8d4e8 4485
ab78acc6 4486var isArray = Array.isArray;
ebd8d4e8
IC
4487
4488/**
ab78acc6 4489 * toString
ebd8d4e8 4490 */
ebd8d4e8 4491
ab78acc6 4492var str = Object.prototype.toString;
ebd8d4e8
IC
4493
4494/**
ab78acc6
IC
4495 * Whether or not the given `val`
4496 * is an array.
ebd8d4e8 4497 *
ab78acc6
IC
4498 * example:
4499 *
4500 * isArray([]);
4501 * // > true
4502 * isArray(arguments);
4503 * // > false
4504 * isArray('');
4505 * // > false
4506 *
4507 * @param {mixed} val
4508 * @return {bool}
ebd8d4e8 4509 */
ebd8d4e8 4510
ab78acc6
IC
4511module.exports = isArray || function (val) {
4512 return !! val && '[object Array]' == str.call(val);
4513};
4514
4515},{}],11:[function(require,module,exports){
4516// Copyright Joyent, Inc. and other Node contributors.
4517//
4518// Permission is hereby granted, free of charge, to any person obtaining a
4519// copy of this software and associated documentation files (the
4520// "Software"), to deal in the Software without restriction, including
4521// without limitation the rights to use, copy, modify, merge, publish,
4522// distribute, sublicense, and/or sell copies of the Software, and to permit
4523// persons to whom the Software is furnished to do so, subject to the
4524// following conditions:
4525//
4526// The above copyright notice and this permission notice shall be included
4527// in all copies or substantial portions of the Software.
4528//
4529// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4530// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4531// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4532// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4533// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4534// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4535// USE OR OTHER DEALINGS IN THE SOFTWARE.
4536
4537function EventEmitter() {
4538 this._events = this._events || {};
4539 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4540}
ab78acc6 4541module.exports = EventEmitter;
ebd8d4e8 4542
ab78acc6
IC
4543// Backwards-compat with node 0.10.x
4544EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4545
ab78acc6
IC
4546EventEmitter.prototype._events = undefined;
4547EventEmitter.prototype._maxListeners = undefined;
4548
4549// By default EventEmitters will print a warning if more than 10 listeners are
4550// added to it. This is a useful default which helps finding memory leaks.
4551EventEmitter.defaultMaxListeners = 10;
4552
4553// Obviously not all Emitters should be limited to 10. This function allows
4554// that to be increased. Set to zero for unlimited.
4555EventEmitter.prototype.setMaxListeners = function(n) {
4556 if (!isNumber(n) || n < 0 || isNaN(n))
4557 throw TypeError('n must be a positive number');
4558 this._maxListeners = n;
4559 return this;
4560};
4561
4562EventEmitter.prototype.emit = function(type) {
4563 var er, handler, len, args, i, listeners;
4564
4565 if (!this._events)
4566 this._events = {};
4567
4568 // If there is no 'error' event listener then throw.
4569 if (type === 'error') {
4570 if (!this._events.error ||
4571 (isObject(this._events.error) && !this._events.error.length)) {
4572 er = arguments[1];
4573 if (er instanceof Error) {
4574 throw er; // Unhandled 'error' event
4575 }
4576 throw TypeError('Uncaught, unspecified "error" event.');
4577 }
4578 }
4579
4580 handler = this._events[type];
4581
4582 if (isUndefined(handler))
4583 return false;
4584
4585 if (isFunction(handler)) {
4586 switch (arguments.length) {
4587 // fast cases
4588 case 1:
4589 handler.call(this);
4590 break;
4591 case 2:
4592 handler.call(this, arguments[1]);
4593 break;
4594 case 3:
4595 handler.call(this, arguments[1], arguments[2]);
4596 break;
4597 // slower
4598 default:
4599 len = arguments.length;
4600 args = new Array(len - 1);
4601 for (i = 1; i < len; i++)
4602 args[i - 1] = arguments[i];
4603 handler.apply(this, args);
4604 }
4605 } else if (isObject(handler)) {
4606 len = arguments.length;
4607 args = new Array(len - 1);
4608 for (i = 1; i < len; i++)
4609 args[i - 1] = arguments[i];
ebd8d4e8 4610
ab78acc6
IC
4611 listeners = handler.slice();
4612 len = listeners.length;
4613 for (i = 0; i < len; i++)
4614 listeners[i].apply(this, args);
ebd8d4e8
IC
4615 }
4616
ab78acc6
IC
4617 return true;
4618};
ebd8d4e8 4619
ab78acc6
IC
4620EventEmitter.prototype.addListener = function(type, listener) {
4621 var m;
ebd8d4e8 4622
ab78acc6
IC
4623 if (!isFunction(listener))
4624 throw TypeError('listener must be a function');
ebd8d4e8 4625
ab78acc6
IC
4626 if (!this._events)
4627 this._events = {};
ebd8d4e8 4628
ab78acc6
IC
4629 // To avoid recursion in the case that type === "newListener"! Before
4630 // adding it to the listeners, first emit "newListener".
4631 if (this._events.newListener)
4632 this.emit('newListener', type,
4633 isFunction(listener.listener) ?
4634 listener.listener : listener);
ebd8d4e8 4635
ab78acc6
IC
4636 if (!this._events[type])
4637 // Optimize the case of one listener. Don't need the extra array object.
4638 this._events[type] = listener;
4639 else if (isObject(this._events[type]))
4640 // If we've already got an array, just append.
4641 this._events[type].push(listener);
4642 else
4643 // Adding the second element, need to change to array.
4644 this._events[type] = [this._events[type], listener];
4645
4646 // Check for listener leak
4647 if (isObject(this._events[type]) && !this._events[type].warned) {
4648 var m;
4649 if (!isUndefined(this._maxListeners)) {
4650 m = this._maxListeners;
4651 } else {
4652 m = EventEmitter.defaultMaxListeners;
4653 }
4654
4655 if (m && m > 0 && this._events[type].length > m) {
4656 this._events[type].warned = true;
4657 console.error('(node) warning: possible EventEmitter memory ' +
4658 'leak detected. %d listeners added. ' +
4659 'Use emitter.setMaxListeners() to increase limit.',
4660 this._events[type].length);
4661 if (typeof console.trace === 'function') {
4662 // not supported in IE 10
4663 console.trace();
4664 }
4665 }
4666 }
ebd8d4e8 4667
ab78acc6
IC
4668 return this;
4669};
ebd8d4e8 4670
ab78acc6 4671EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4672
ab78acc6
IC
4673EventEmitter.prototype.once = function(type, listener) {
4674 if (!isFunction(listener))
4675 throw TypeError('listener must be a function');
ebd8d4e8 4676
ab78acc6 4677 var fired = false;
ebd8d4e8 4678
ab78acc6
IC
4679 function g() {
4680 this.removeListener(type, g);
ebd8d4e8 4681
ab78acc6
IC
4682 if (!fired) {
4683 fired = true;
4684 listener.apply(this, arguments);
4685 }
4686 }
ebd8d4e8 4687
ab78acc6
IC
4688 g.listener = listener;
4689 this.on(type, g);
ebd8d4e8 4690
ab78acc6
IC
4691 return this;
4692};
ebd8d4e8 4693
ab78acc6
IC
4694// emits a 'removeListener' event iff the listener was removed
4695EventEmitter.prototype.removeListener = function(type, listener) {
4696 var list, position, length, i;
ebd8d4e8 4697
ab78acc6
IC
4698 if (!isFunction(listener))
4699 throw TypeError('listener must be a function');
ebd8d4e8 4700
ab78acc6
IC
4701 if (!this._events || !this._events[type])
4702 return this;
ebd8d4e8 4703
ab78acc6
IC
4704 list = this._events[type];
4705 length = list.length;
4706 position = -1;
4707
4708 if (list === listener ||
4709 (isFunction(list.listener) && list.listener === listener)) {
4710 delete this._events[type];
4711 if (this._events.removeListener)
4712 this.emit('removeListener', type, listener);
4713
4714 } else if (isObject(list)) {
4715 for (i = length; i-- > 0;) {
4716 if (list[i] === listener ||
4717 (list[i].listener && list[i].listener === listener)) {
4718 position = i;
4719 break;
ebd8d4e8 4720 }
ab78acc6 4721 }
ebd8d4e8 4722
ab78acc6
IC
4723 if (position < 0)
4724 return this;
4725
4726 if (list.length === 1) {
4727 list.length = 0;
4728 delete this._events[type];
4729 } else {
4730 list.splice(position, 1);
ebd8d4e8 4731 }
ab78acc6
IC
4732
4733 if (this._events.removeListener)
4734 this.emit('removeListener', type, listener);
ebd8d4e8 4735 }
ab78acc6
IC
4736
4737 return this;
ebd8d4e8
IC
4738};
4739
ab78acc6
IC
4740EventEmitter.prototype.removeAllListeners = function(type) {
4741 var key, listeners;
ebd8d4e8 4742
ab78acc6
IC
4743 if (!this._events)
4744 return this;
4745
4746 // not listening for removeListener, no need to emit
4747 if (!this._events.removeListener) {
4748 if (arguments.length === 0)
4749 this._events = {};
4750 else if (this._events[type])
4751 delete this._events[type];
4752 return this;
ebd8d4e8 4753 }
ab78acc6
IC
4754
4755 // emit removeListener for all listeners on all events
4756 if (arguments.length === 0) {
4757 for (key in this._events) {
4758 if (key === 'removeListener') continue;
4759 this.removeAllListeners(key);
4760 }
4761 this.removeAllListeners('removeListener');
4762 this._events = {};
4763 return this;
ebd8d4e8 4764 }
ebd8d4e8 4765
ab78acc6
IC
4766 listeners = this._events[type];
4767
4768 if (isFunction(listeners)) {
4769 this.removeListener(type, listeners);
ebd8d4e8 4770 } else {
ab78acc6
IC
4771 // LIFO order
4772 while (listeners.length)
4773 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4774 }
ab78acc6 4775 delete this._events[type];
ebd8d4e8 4776
ab78acc6
IC
4777 return this;
4778};
ebd8d4e8 4779
ab78acc6
IC
4780EventEmitter.prototype.listeners = function(type) {
4781 var ret;
4782 if (!this._events || !this._events[type])
4783 ret = [];
4784 else if (isFunction(this._events[type]))
4785 ret = [this._events[type]];
4786 else
4787 ret = this._events[type].slice();
4788 return ret;
4789};
ebd8d4e8 4790
ab78acc6
IC
4791EventEmitter.listenerCount = function(emitter, type) {
4792 var ret;
4793 if (!emitter._events || !emitter._events[type])
4794 ret = 0;
4795 else if (isFunction(emitter._events[type]))
4796 ret = 1;
4797 else
4798 ret = emitter._events[type].length;
4799 return ret;
4800};
ebd8d4e8 4801
ab78acc6
IC
4802function isFunction(arg) {
4803 return typeof arg === 'function';
ebd8d4e8
IC
4804}
4805
ab78acc6
IC
4806function isNumber(arg) {
4807 return typeof arg === 'number';
4808}
ebd8d4e8 4809
ab78acc6
IC
4810function isObject(arg) {
4811 return typeof arg === 'object' && arg !== null;
4812}
ebd8d4e8 4813
ab78acc6
IC
4814function isUndefined(arg) {
4815 return arg === void 0;
ebd8d4e8 4816}
ebd8d4e8 4817
ab78acc6
IC
4818},{}],12:[function(require,module,exports){
4819if (typeof Object.create === 'function') {
4820 // implementation from standard node.js 'util' module
4821 module.exports = function inherits(ctor, superCtor) {
4822 ctor.super_ = superCtor
4823 ctor.prototype = Object.create(superCtor.prototype, {
4824 constructor: {
4825 value: ctor,
4826 enumerable: false,
4827 writable: true,
4828 configurable: true
4829 }
4830 });
4831 };
4832} else {
4833 // old school shim for old browsers
4834 module.exports = function inherits(ctor, superCtor) {
4835 ctor.super_ = superCtor
4836 var TempCtor = function () {}
4837 TempCtor.prototype = superCtor.prototype
4838 ctor.prototype = new TempCtor()
4839 ctor.prototype.constructor = ctor
4840 }
4841}
ebd8d4e8 4842
ab78acc6
IC
4843},{}],13:[function(require,module,exports){
4844module.exports = Array.isArray || function (arr) {
4845 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4846};
4847
ab78acc6
IC
4848},{}],14:[function(require,module,exports){
4849// shim for using process in browser
ebd8d4e8 4850
ab78acc6
IC
4851var process = module.exports = {};
4852var queue = [];
4853var draining = false;
4854var currentQueue;
4855var queueIndex = -1;
4856
4857function cleanUpNextTick() {
4858 draining = false;
4859 if (currentQueue.length) {
4860 queue = currentQueue.concat(queue);
4861 } else {
4862 queueIndex = -1;
4863 }
4864 if (queue.length) {
4865 drainQueue();
4866 }
4867}
ebd8d4e8 4868
ab78acc6
IC
4869function drainQueue() {
4870 if (draining) {
4871 return;
4872 }
4873 var timeout = setTimeout(cleanUpNextTick);
4874 draining = true;
ebd8d4e8 4875
ab78acc6
IC
4876 var len = queue.length;
4877 while(len) {
4878 currentQueue = queue;
4879 queue = [];
4880 while (++queueIndex < len) {
4881 currentQueue[queueIndex].run();
4882 }
4883 queueIndex = -1;
4884 len = queue.length;
4885 }
4886 currentQueue = null;
4887 draining = false;
4888 clearTimeout(timeout);
4889}
4890
4891process.nextTick = function (fun) {
4892 var args = new Array(arguments.length - 1);
4893 if (arguments.length > 1) {
4894 for (var i = 1; i < arguments.length; i++) {
4895 args[i - 1] = arguments[i];
4896 }
4897 }
4898 queue.push(new Item(fun, args));
4899 if (queue.length === 1 && !draining) {
4900 setTimeout(drainQueue, 0);
4901 }
ebd8d4e8
IC
4902};
4903
ab78acc6
IC
4904// v8 likes predictible objects
4905function Item(fun, array) {
4906 this.fun = fun;
4907 this.array = array;
4908}
4909Item.prototype.run = function () {
4910 this.fun.apply(null, this.array);
4911};
4912process.title = 'browser';
4913process.browser = true;
4914process.env = {};
4915process.argv = [];
4916process.version = ''; // empty string to avoid regexp issues
4917process.versions = {};
ebd8d4e8 4918
ab78acc6
IC
4919function noop() {}
4920
4921process.on = noop;
4922process.addListener = noop;
4923process.once = noop;
4924process.off = noop;
4925process.removeListener = noop;
4926process.removeAllListeners = noop;
4927process.emit = noop;
4928
4929process.binding = function (name) {
4930 throw new Error('process.binding is not supported');
4931};
ebd8d4e8 4932
ab78acc6
IC
4933// TODO(shtylman)
4934process.cwd = function () { return '/' };
4935process.chdir = function (dir) {
4936 throw new Error('process.chdir is not supported');
4937};
4938process.umask = function() { return 0; };
ebd8d4e8 4939
ab78acc6
IC
4940},{}],15:[function(require,module,exports){
4941module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4942
ab78acc6
IC
4943},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4944(function (process){
4945// Copyright Joyent, Inc. and other Node contributors.
4946//
4947// Permission is hereby granted, free of charge, to any person obtaining a
4948// copy of this software and associated documentation files (the
4949// "Software"), to deal in the Software without restriction, including
4950// without limitation the rights to use, copy, modify, merge, publish,
4951// distribute, sublicense, and/or sell copies of the Software, and to permit
4952// persons to whom the Software is furnished to do so, subject to the
4953// following conditions:
4954//
4955// The above copyright notice and this permission notice shall be included
4956// in all copies or substantial portions of the Software.
4957//
4958// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4959// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4960// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4961// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4962// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4963// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4964// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4965
ab78acc6
IC
4966// a duplex stream is just a stream that is both readable and writable.
4967// Since JS doesn't have multiple prototypal inheritance, this class
4968// prototypally inherits from Readable, and then parasitically from
4969// Writable.
ebd8d4e8 4970
ab78acc6 4971module.exports = Duplex;
ebd8d4e8 4972
ab78acc6
IC
4973/*<replacement>*/
4974var objectKeys = Object.keys || function (obj) {
4975 var keys = [];
4976 for (var key in obj) keys.push(key);
4977 return keys;
ebd8d4e8 4978}
ab78acc6 4979/*</replacement>*/
ebd8d4e8 4980
ebd8d4e8 4981
ab78acc6
IC
4982/*<replacement>*/
4983var util = require('core-util-is');
4984util.inherits = require('inherits');
4985/*</replacement>*/
ebd8d4e8 4986
ab78acc6
IC
4987var Readable = require('./_stream_readable');
4988var Writable = require('./_stream_writable');
ebd8d4e8 4989
ab78acc6 4990util.inherits(Duplex, Readable);
ebd8d4e8 4991
ab78acc6
IC
4992forEach(objectKeys(Writable.prototype), function(method) {
4993 if (!Duplex.prototype[method])
4994 Duplex.prototype[method] = Writable.prototype[method];
4995});
ebd8d4e8 4996
ab78acc6
IC
4997function Duplex(options) {
4998 if (!(this instanceof Duplex))
4999 return new Duplex(options);
ebd8d4e8 5000
ab78acc6
IC
5001 Readable.call(this, options);
5002 Writable.call(this, options);
ebd8d4e8 5003
ab78acc6
IC
5004 if (options && options.readable === false)
5005 this.readable = false;
ebd8d4e8 5006
ab78acc6
IC
5007 if (options && options.writable === false)
5008 this.writable = false;
ebd8d4e8 5009
ab78acc6
IC
5010 this.allowHalfOpen = true;
5011 if (options && options.allowHalfOpen === false)
5012 this.allowHalfOpen = false;
ebd8d4e8 5013
ab78acc6 5014 this.once('end', onend);
ebd8d4e8
IC
5015}
5016
ab78acc6
IC
5017// the no-half-open enforcer
5018function onend() {
5019 // if we allow half-open state, or if the writable side ended,
5020 // then we're ok.
5021 if (this.allowHalfOpen || this._writableState.ended)
5022 return;
ebd8d4e8 5023
ab78acc6
IC
5024 // no more data can be written.
5025 // But allow more writes to happen in this tick.
5026 process.nextTick(this.end.bind(this));
5027}
ebd8d4e8 5028
ab78acc6
IC
5029function forEach (xs, f) {
5030 for (var i = 0, l = xs.length; i < l; i++) {
5031 f(xs[i], i);
ebd8d4e8 5032 }
ab78acc6 5033}
ebd8d4e8 5034
ab78acc6
IC
5035}).call(this,require('_process'))
5036},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5037// Copyright Joyent, Inc. and other Node contributors.
5038//
5039// Permission is hereby granted, free of charge, to any person obtaining a
5040// copy of this software and associated documentation files (the
5041// "Software"), to deal in the Software without restriction, including
5042// without limitation the rights to use, copy, modify, merge, publish,
5043// distribute, sublicense, and/or sell copies of the Software, and to permit
5044// persons to whom the Software is furnished to do so, subject to the
5045// following conditions:
5046//
5047// The above copyright notice and this permission notice shall be included
5048// in all copies or substantial portions of the Software.
5049//
5050// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5051// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5052// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5053// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5054// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5055// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5056// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5057
ab78acc6
IC
5058// a passthrough stream.
5059// basically just the most minimal sort of Transform stream.
5060// Every written chunk gets output as-is.
ebd8d4e8 5061
ab78acc6 5062module.exports = PassThrough;
ebd8d4e8 5063
ab78acc6 5064var Transform = require('./_stream_transform');
ebd8d4e8 5065
ab78acc6
IC
5066/*<replacement>*/
5067var util = require('core-util-is');
5068util.inherits = require('inherits');
5069/*</replacement>*/
ebd8d4e8 5070
ab78acc6 5071util.inherits(PassThrough, Transform);
ebd8d4e8 5072
ab78acc6
IC
5073function PassThrough(options) {
5074 if (!(this instanceof PassThrough))
5075 return new PassThrough(options);
ebd8d4e8 5076
ab78acc6
IC
5077 Transform.call(this, options);
5078}
ebd8d4e8 5079
ab78acc6
IC
5080PassThrough.prototype._transform = function(chunk, encoding, cb) {
5081 cb(null, chunk);
ebd8d4e8
IC
5082};
5083
ab78acc6
IC
5084},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5085(function (process){
ebd8d4e8
IC
5086// Copyright Joyent, Inc. and other Node contributors.
5087//
5088// Permission is hereby granted, free of charge, to any person obtaining a
5089// copy of this software and associated documentation files (the
5090// "Software"), to deal in the Software without restriction, including
5091// without limitation the rights to use, copy, modify, merge, publish,
5092// distribute, sublicense, and/or sell copies of the Software, and to permit
5093// persons to whom the Software is furnished to do so, subject to the
5094// following conditions:
5095//
5096// The above copyright notice and this permission notice shall be included
5097// in all copies or substantial portions of the Software.
5098//
5099// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5100// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5101// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5102// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5103// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5104// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5105// USE OR OTHER DEALINGS IN THE SOFTWARE.
5106
ab78acc6 5107module.exports = Readable;
ebd8d4e8 5108
ab78acc6
IC
5109/*<replacement>*/
5110var isArray = require('isarray');
5111/*</replacement>*/
5112
5113
5114/*<replacement>*/
5115var Buffer = require('buffer').Buffer;
5116/*</replacement>*/
5117
5118Readable.ReadableState = ReadableState;
5119
5120var EE = require('events').EventEmitter;
5121
5122/*<replacement>*/
5123if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5124 return emitter.listeners(type).length;
ebd8d4e8 5125};
ab78acc6
IC
5126/*</replacement>*/
5127
5128var Stream = require('stream');
5129
5130/*<replacement>*/
5131var util = require('core-util-is');
5132util.inherits = require('inherits');
5133/*</replacement>*/
5134
5135var StringDecoder;
5136
5137
5138/*<replacement>*/
5139var debug = require('util');
5140if (debug && debug.debuglog) {
5141 debug = debug.debuglog('stream');
5142} else {
5143 debug = function () {};
5144}
5145/*</replacement>*/
5146
5147
5148util.inherits(Readable, Stream);
5149
5150function ReadableState(options, stream) {
5151 var Duplex = require('./_stream_duplex');
5152
5153 options = options || {};
5154
5155 // the point at which it stops calling _read() to fill the buffer
5156 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5157 var hwm = options.highWaterMark;
5158 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5159 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5160
5161 // cast to ints.
5162 this.highWaterMark = ~~this.highWaterMark;
5163
5164 this.buffer = [];
5165 this.length = 0;
5166 this.pipes = null;
5167 this.pipesCount = 0;
5168 this.flowing = null;
5169 this.ended = false;
5170 this.endEmitted = false;
5171 this.reading = false;
ebd8d4e8 5172
ab78acc6
IC
5173 // a flag to be able to tell if the onwrite cb is called immediately,
5174 // or on a later tick. We set this to true at first, because any
5175 // actions that shouldn't happen until "later" should generally also
5176 // not happen before the first write call.
5177 this.sync = true;
ebd8d4e8 5178
ab78acc6
IC
5179 // whenever we return null, then we set a flag to say
5180 // that we're awaiting a 'readable' event emission.
5181 this.needReadable = false;
5182 this.emittedReadable = false;
5183 this.readableListening = false;
ebd8d4e8 5184
ab78acc6
IC
5185
5186 // object stream flag. Used to make read(n) ignore n and to
5187 // make all the buffer merging and length checks go away
5188 this.objectMode = !!options.objectMode;
5189
5190 if (stream instanceof Duplex)
5191 this.objectMode = this.objectMode || !!options.readableObjectMode;
5192
5193 // Crypto is kind of old and crusty. Historically, its default string
5194 // encoding is 'binary' so we have to make this configurable.
5195 // Everything else in the universe uses 'utf8', though.
5196 this.defaultEncoding = options.defaultEncoding || 'utf8';
5197
5198 // when piping, we only care about 'readable' events that happen
5199 // after read()ing all the bytes and not getting any pushback.
5200 this.ranOut = false;
5201
5202 // the number of writers that are awaiting a drain event in .pipe()s
5203 this.awaitDrain = 0;
5204
5205 // if true, a maybeReadMore has been scheduled
5206 this.readingMore = false;
5207
5208 this.decoder = null;
5209 this.encoding = null;
5210 if (options.encoding) {
5211 if (!StringDecoder)
5212 StringDecoder = require('string_decoder/').StringDecoder;
5213 this.decoder = new StringDecoder(options.encoding);
5214 this.encoding = options.encoding;
ebd8d4e8 5215 }
ab78acc6 5216}
ebd8d4e8 5217
ab78acc6
IC
5218function Readable(options) {
5219 var Duplex = require('./_stream_duplex');
5220
5221 if (!(this instanceof Readable))
5222 return new Readable(options);
5223
5224 this._readableState = new ReadableState(options, this);
5225
5226 // legacy
5227 this.readable = true;
5228
5229 Stream.call(this);
5230}
5231
5232// Manually shove something into the read() buffer.
5233// This returns true if the highWaterMark has not been hit yet,
5234// similar to how Writable.write() returns true if you should
5235// write() some more.
5236Readable.prototype.push = function(chunk, encoding) {
5237 var state = this._readableState;
5238
5239 if (util.isString(chunk) && !state.objectMode) {
5240 encoding = encoding || state.defaultEncoding;
5241 if (encoding !== state.encoding) {
5242 chunk = new Buffer(chunk, encoding);
5243 encoding = '';
ebd8d4e8 5244 }
ebd8d4e8
IC
5245 }
5246
ab78acc6 5247 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5248};
5249
ab78acc6
IC
5250// Unshift should *always* be something directly out of read()
5251Readable.prototype.unshift = function(chunk) {
5252 var state = this._readableState;
5253 return readableAddChunk(this, state, chunk, '', true);
5254};
ebd8d4e8 5255
ab78acc6
IC
5256function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5257 var er = chunkInvalid(state, chunk);
5258 if (er) {
5259 stream.emit('error', er);
5260 } else if (util.isNullOrUndefined(chunk)) {
5261 state.reading = false;
5262 if (!state.ended)
5263 onEofChunk(stream, state);
5264 } else if (state.objectMode || chunk && chunk.length > 0) {
5265 if (state.ended && !addToFront) {
5266 var e = new Error('stream.push() after EOF');
5267 stream.emit('error', e);
5268 } else if (state.endEmitted && addToFront) {
5269 var e = new Error('stream.unshift() after end event');
5270 stream.emit('error', e);
ebd8d4e8 5271 } else {
ab78acc6
IC
5272 if (state.decoder && !addToFront && !encoding)
5273 chunk = state.decoder.write(chunk);
5274
5275 if (!addToFront)
5276 state.reading = false;
5277
5278 // if we want the data now, just emit it.
5279 if (state.flowing && state.length === 0 && !state.sync) {
5280 stream.emit('data', chunk);
5281 stream.read(0);
5282 } else {
5283 // update the buffer info.
5284 state.length += state.objectMode ? 1 : chunk.length;
5285 if (addToFront)
5286 state.buffer.unshift(chunk);
5287 else
5288 state.buffer.push(chunk);
5289
5290 if (state.needReadable)
5291 emitReadable(stream);
5292 }
5293
5294 maybeReadMore(stream, state);
ebd8d4e8 5295 }
ab78acc6
IC
5296 } else if (!addToFront) {
5297 state.reading = false;
ebd8d4e8 5298 }
ebd8d4e8 5299
ab78acc6
IC
5300 return needMoreData(state);
5301}
ebd8d4e8 5302
ab78acc6
IC
5303
5304
5305// if it's past the high water mark, we can push in some more.
5306// Also, if we have no data yet, we can stand some
5307// more bytes. This is to work around cases where hwm=0,
5308// such as the repl. Also, if the push() triggered a
5309// readable event, and the user called read(largeNumber) such that
5310// needReadable was set, then we ought to push more, so that another
5311// 'readable' event will be triggered.
5312function needMoreData(state) {
5313 return !state.ended &&
5314 (state.needReadable ||
5315 state.length < state.highWaterMark ||
5316 state.length === 0);
5317}
5318
5319// backwards compatibility.
5320Readable.prototype.setEncoding = function(enc) {
5321 if (!StringDecoder)
5322 StringDecoder = require('string_decoder/').StringDecoder;
5323 this._readableState.decoder = new StringDecoder(enc);
5324 this._readableState.encoding = enc;
5325 return this;
5326};
5327
5328// Don't raise the hwm > 128MB
5329var MAX_HWM = 0x800000;
5330function roundUpToNextPowerOf2(n) {
5331 if (n >= MAX_HWM) {
5332 n = MAX_HWM;
5333 } else {
5334 // Get the next highest power of 2
5335 n--;
5336 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5337 n++;
ebd8d4e8 5338 }
ab78acc6 5339 return n;
ebd8d4e8 5340}
ebd8d4e8 5341
ab78acc6
IC
5342function howMuchToRead(n, state) {
5343 if (state.length === 0 && state.ended)
5344 return 0;
ebd8d4e8 5345
ab78acc6
IC
5346 if (state.objectMode)
5347 return n === 0 ? 0 : 1;
ebd8d4e8 5348
ab78acc6
IC
5349 if (isNaN(n) || util.isNull(n)) {
5350 // only flow one buffer at a time
5351 if (state.flowing && state.buffer.length)
5352 return state.buffer[0].length;
5353 else
5354 return state.length;
5355 }
ebd8d4e8 5356
ab78acc6
IC
5357 if (n <= 0)
5358 return 0;
ebd8d4e8 5359
ab78acc6
IC
5360 // If we're asking for more than the target buffer level,
5361 // then raise the water mark. Bump up to the next highest
5362 // power of 2, to prevent increasing it excessively in tiny
5363 // amounts.
5364 if (n > state.highWaterMark)
5365 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5366
ab78acc6
IC
5367 // don't have that much. return null, unless we've ended.
5368 if (n > state.length) {
5369 if (!state.ended) {
5370 state.needReadable = true;
5371 return 0;
5372 } else
5373 return state.length;
ebd8d4e8 5374 }
ab78acc6
IC
5375
5376 return n;
ebd8d4e8
IC
5377}
5378
ab78acc6
IC
5379// you can override either this method, or the async _read(n) below.
5380Readable.prototype.read = function(n) {
5381 debug('read', n);
5382 var state = this._readableState;
5383 var nOrig = n;
ebd8d4e8 5384
ab78acc6
IC
5385 if (!util.isNumber(n) || n > 0)
5386 state.emittedReadable = false;
5387
5388 // if we're doing read(0) to trigger a readable event, but we
5389 // already have a bunch of data in the buffer, then just trigger
5390 // the 'readable' event and move on.
5391 if (n === 0 &&
5392 state.needReadable &&
5393 (state.length >= state.highWaterMark || state.ended)) {
5394 debug('read: emitReadable', state.length, state.ended);
5395 if (state.length === 0 && state.ended)
5396 endReadable(this);
5397 else
5398 emitReadable(this);
5399 return null;
5400 }
5401
5402 n = howMuchToRead(n, state);
5403
5404 // if we've ended, and we're now clear, then finish it up.
5405 if (n === 0 && state.ended) {
5406 if (state.length === 0)
5407 endReadable(this);
5408 return null;
5409 }
5410
5411 // All the actual chunk generation logic needs to be
5412 // *below* the call to _read. The reason is that in certain
5413 // synthetic stream cases, such as passthrough streams, _read
5414 // may be a completely synchronous operation which may change
5415 // the state of the read buffer, providing enough data when
5416 // before there was *not* enough.
5417 //
5418 // So, the steps are:
5419 // 1. Figure out what the state of things will be after we do
5420 // a read from the buffer.
5421 //
5422 // 2. If that resulting state will trigger a _read, then call _read.
5423 // Note that this may be asynchronous, or synchronous. Yes, it is
5424 // deeply ugly to write APIs this way, but that still doesn't mean
5425 // that the Readable class should behave improperly, as streams are
5426 // designed to be sync/async agnostic.
5427 // Take note if the _read call is sync or async (ie, if the read call
5428 // has returned yet), so that we know whether or not it's safe to emit
5429 // 'readable' etc.
5430 //
5431 // 3. Actually pull the requested chunks out of the buffer and return.
5432
5433 // if we need a readable event, then we need to do some reading.
5434 var doRead = state.needReadable;
5435 debug('need readable', doRead);
5436
5437 // if we currently have less than the highWaterMark, then also read some
5438 if (state.length === 0 || state.length - n < state.highWaterMark) {
5439 doRead = true;
5440 debug('length less than watermark', doRead);
5441 }
5442
5443 // however, if we've ended, then there's no point, and if we're already
5444 // reading, then it's unnecessary.
5445 if (state.ended || state.reading) {
5446 doRead = false;
5447 debug('reading or ended', doRead);
5448 }
5449
5450 if (doRead) {
5451 debug('do read');
5452 state.reading = true;
5453 state.sync = true;
5454 // if the length is currently zero, then we *need* a readable event.
5455 if (state.length === 0)
5456 state.needReadable = true;
5457 // call internal read method
5458 this._read(state.highWaterMark);
5459 state.sync = false;
5460 }
5461
5462 // If _read pushed data synchronously, then `reading` will be false,
5463 // and we need to re-evaluate how much data we can return to the user.
5464 if (doRead && !state.reading)
5465 n = howMuchToRead(nOrig, state);
5466
5467 var ret;
5468 if (n > 0)
5469 ret = fromList(n, state);
5470 else
5471 ret = null;
ebd8d4e8 5472
ab78acc6
IC
5473 if (util.isNull(ret)) {
5474 state.needReadable = true;
5475 n = 0;
5476 }
ebd8d4e8 5477
ab78acc6 5478 state.length -= n;
ebd8d4e8 5479
ab78acc6
IC
5480 // If we have nothing in the buffer, then we want to know
5481 // as soon as we *do* get something into the buffer.
5482 if (state.length === 0 && !state.ended)
5483 state.needReadable = true;
ebd8d4e8 5484
ab78acc6
IC
5485 // If we tried to read() past the EOF, then emit end on the next tick.
5486 if (nOrig !== n && state.ended && state.length === 0)
5487 endReadable(this);
5488
5489 if (!util.isNull(ret))
5490 this.emit('data', ret);
5491
5492 return ret;
5493};
5494
5495function chunkInvalid(state, chunk) {
5496 var er = null;
5497 if (!util.isBuffer(chunk) &&
5498 !util.isString(chunk) &&
5499 !util.isNullOrUndefined(chunk) &&
5500 !state.objectMode) {
5501 er = new TypeError('Invalid non-string/buffer chunk');
5502 }
5503 return er;
ebd8d4e8
IC
5504}
5505
5506
ab78acc6
IC
5507function onEofChunk(stream, state) {
5508 if (state.decoder && !state.ended) {
5509 var chunk = state.decoder.end();
5510 if (chunk && chunk.length) {
5511 state.buffer.push(chunk);
5512 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5513 }
ebd8d4e8 5514 }
ab78acc6 5515 state.ended = true;
ebd8d4e8 5516
ab78acc6
IC
5517 // emit 'readable' now to make sure it gets picked up.
5518 emitReadable(stream);
5519}
5520
5521// Don't emit readable right away in sync mode, because this can trigger
5522// another read() call => stack overflow. This way, it might trigger
5523// a nextTick recursion warning, but that's not so bad.
5524function emitReadable(stream) {
5525 var state = stream._readableState;
5526 state.needReadable = false;
5527 if (!state.emittedReadable) {
5528 debug('emitReadable', state.flowing);
5529 state.emittedReadable = true;
5530 if (state.sync)
5531 process.nextTick(function() {
5532 emitReadable_(stream);
5533 });
5534 else
5535 emitReadable_(stream);
ebd8d4e8 5536 }
ab78acc6 5537}
ebd8d4e8 5538
ab78acc6
IC
5539function emitReadable_(stream) {
5540 debug('emit readable');
5541 stream.emit('readable');
5542 flow(stream);
5543}
ebd8d4e8 5544
ab78acc6
IC
5545
5546// at this point, the user has presumably seen the 'readable' event,
5547// and called read() to consume some data. that may have triggered
5548// in turn another _read(n) call, in which case reading = true if
5549// it's in progress.
5550// However, if we're not ended, or reading, and the length < hwm,
5551// then go ahead and try to read some more preemptively.
5552function maybeReadMore(stream, state) {
5553 if (!state.readingMore) {
5554 state.readingMore = true;
5555 process.nextTick(function() {
5556 maybeReadMore_(stream, state);
5557 });
ebd8d4e8 5558 }
ab78acc6 5559}
ebd8d4e8 5560
ab78acc6
IC
5561function maybeReadMore_(stream, state) {
5562 var len = state.length;
5563 while (!state.reading && !state.flowing && !state.ended &&
5564 state.length < state.highWaterMark) {
5565 debug('maybeReadMore read 0');
5566 stream.read(0);
5567 if (len === state.length)
5568 // didn't get any data, stop spinning.
5569 break;
5570 else
5571 len = state.length;
ebd8d4e8 5572 }
ab78acc6
IC
5573 state.readingMore = false;
5574}
ebd8d4e8 5575
ab78acc6
IC
5576// abstract method. to be overridden in specific implementation classes.
5577// call cb(er, data) where data is <= n in length.
5578// for virtual (non-string, non-buffer) streams, "length" is somewhat
5579// arbitrary, and perhaps not very meaningful.
5580Readable.prototype._read = function(n) {
5581 this.emit('error', new Error('not implemented'));
5582};
5583
5584Readable.prototype.pipe = function(dest, pipeOpts) {
5585 var src = this;
5586 var state = this._readableState;
5587
5588 switch (state.pipesCount) {
5589 case 0:
5590 state.pipes = dest;
5591 break;
5592 case 1:
5593 state.pipes = [state.pipes, dest];
5594 break;
5595 default:
5596 state.pipes.push(dest);
5597 break;
ebd8d4e8 5598 }
ab78acc6
IC
5599 state.pipesCount += 1;
5600 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5601
ab78acc6
IC
5602 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5603 dest !== process.stdout &&
5604 dest !== process.stderr;
ebd8d4e8 5605
ab78acc6
IC
5606 var endFn = doEnd ? onend : cleanup;
5607 if (state.endEmitted)
5608 process.nextTick(endFn);
5609 else
5610 src.once('end', endFn);
5611
5612 dest.on('unpipe', onunpipe);
5613 function onunpipe(readable) {
5614 debug('onunpipe');
5615 if (readable === src) {
5616 cleanup();
5617 }
5618 }
5619
5620 function onend() {
5621 debug('onend');
5622 dest.end();
5623 }
5624
5625 // when the dest drains, it reduces the awaitDrain counter
5626 // on the source. This would be more elegant with a .once()
5627 // handler in flow(), but adding and removing repeatedly is
5628 // too slow.
5629 var ondrain = pipeOnDrain(src);
5630 dest.on('drain', ondrain);
5631
5632 function cleanup() {
5633 debug('cleanup');
5634 // cleanup event handlers once the pipe is broken
5635 dest.removeListener('close', onclose);
5636 dest.removeListener('finish', onfinish);
5637 dest.removeListener('drain', ondrain);
5638 dest.removeListener('error', onerror);
5639 dest.removeListener('unpipe', onunpipe);
5640 src.removeListener('end', onend);
5641 src.removeListener('end', cleanup);
5642 src.removeListener('data', ondata);
5643
5644 // if the reader is waiting for a drain event from this
5645 // specific writer, then it would cause it to never start
5646 // flowing again.
5647 // So, if this is awaiting a drain, then we just call it now.
5648 // If we don't know, then assume that we are waiting for one.
5649 if (state.awaitDrain &&
5650 (!dest._writableState || dest._writableState.needDrain))
5651 ondrain();
5652 }
5653
5654 src.on('data', ondata);
5655 function ondata(chunk) {
5656 debug('ondata');
5657 var ret = dest.write(chunk);
5658 if (false === ret) {
5659 debug('false write response, pause',
5660 src._readableState.awaitDrain);
5661 src._readableState.awaitDrain++;
5662 src.pause();
5663 }
5664 }
5665
5666 // if the dest has an error, then stop piping into it.
5667 // however, don't suppress the throwing behavior for this.
5668 function onerror(er) {
5669 debug('onerror', er);
5670 unpipe();
5671 dest.removeListener('error', onerror);
5672 if (EE.listenerCount(dest, 'error') === 0)
5673 dest.emit('error', er);
5674 }
5675 // This is a brutally ugly hack to make sure that our error handler
5676 // is attached before any userland ones. NEVER DO THIS.
5677 if (!dest._events || !dest._events.error)
5678 dest.on('error', onerror);
5679 else if (isArray(dest._events.error))
5680 dest._events.error.unshift(onerror);
5681 else
5682 dest._events.error = [onerror, dest._events.error];
5683
5684
5685
5686 // Both close and finish should trigger unpipe, but only once.
5687 function onclose() {
5688 dest.removeListener('finish', onfinish);
5689 unpipe();
ebd8d4e8 5690 }
ab78acc6
IC
5691 dest.once('close', onclose);
5692 function onfinish() {
5693 debug('onfinish');
5694 dest.removeListener('close', onclose);
5695 unpipe();
5696 }
5697 dest.once('finish', onfinish);
ebd8d4e8 5698
ab78acc6
IC
5699 function unpipe() {
5700 debug('unpipe');
5701 src.unpipe(dest);
ebd8d4e8
IC
5702 }
5703
ab78acc6
IC
5704 // tell the dest that it's being piped to
5705 dest.emit('pipe', src);
5706
5707 // start the flow if it hasn't been started already.
5708 if (!state.flowing) {
5709 debug('pipe resume');
5710 src.resume();
ebd8d4e8
IC
5711 }
5712
ab78acc6
IC
5713 return dest;
5714};
5715
5716function pipeOnDrain(src) {
5717 return function() {
5718 var state = src._readableState;
5719 debug('pipeOnDrain', state.awaitDrain);
5720 if (state.awaitDrain)
5721 state.awaitDrain--;
5722 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5723 state.flowing = true;
5724 flow(src);
5725 }
5726 };
5727}
5728
5729
5730Readable.prototype.unpipe = function(dest) {
5731 var state = this._readableState;
5732
5733 // if we're not piping anywhere, then do nothing.
5734 if (state.pipesCount === 0)
5735 return this;
5736
5737 // just one destination. most common case.
5738 if (state.pipesCount === 1) {
5739 // passed in one, but it's not the right one.
5740 if (dest && dest !== state.pipes)
5741 return this;
5742
5743 if (!dest)
5744 dest = state.pipes;
5745
5746 // got a match.
5747 state.pipes = null;
5748 state.pipesCount = 0;
5749 state.flowing = false;
5750 if (dest)
5751 dest.emit('unpipe', this);
5752 return this;
ebd8d4e8
IC
5753 }
5754
ab78acc6
IC
5755 // slow case. multiple pipe destinations.
5756
5757 if (!dest) {
5758 // remove all.
5759 var dests = state.pipes;
5760 var len = state.pipesCount;
5761 state.pipes = null;
5762 state.pipesCount = 0;
5763 state.flowing = false;
5764
5765 for (var i = 0; i < len; i++)
5766 dests[i].emit('unpipe', this);
5767 return this;
ebd8d4e8
IC
5768 }
5769
ab78acc6
IC
5770 // try to find the right one.
5771 var i = indexOf(state.pipes, dest);
5772 if (i === -1)
5773 return this;
5774
5775 state.pipes.splice(i, 1);
5776 state.pipesCount -= 1;
5777 if (state.pipesCount === 1)
5778 state.pipes = state.pipes[0];
5779
5780 dest.emit('unpipe', this);
ebd8d4e8 5781
ab78acc6
IC
5782 return this;
5783};
5784
5785// set up data events if they are asked for
5786// Ensure readable listeners eventually get something
5787Readable.prototype.on = function(ev, fn) {
5788 var res = Stream.prototype.on.call(this, ev, fn);
5789
5790 // If listening to data, and it has not explicitly been paused,
5791 // then call resume to start the flow of data on the next tick.
5792 if (ev === 'data' && false !== this._readableState.flowing) {
5793 this.resume();
5794 }
5795
5796 if (ev === 'readable' && this.readable) {
5797 var state = this._readableState;
5798 if (!state.readableListening) {
5799 state.readableListening = true;
5800 state.emittedReadable = false;
5801 state.needReadable = true;
5802 if (!state.reading) {
5803 var self = this;
5804 process.nextTick(function() {
5805 debug('readable nexttick read 0');
5806 self.read(0);
5807 });
5808 } else if (state.length) {
5809 emitReadable(this, state);
5810 }
ebd8d4e8
IC
5811 }
5812 }
5813
ab78acc6
IC
5814 return res;
5815};
5816Readable.prototype.addListener = Readable.prototype.on;
5817
5818// pause() and resume() are remnants of the legacy readable stream API
5819// If the user uses them, then switch into old mode.
5820Readable.prototype.resume = function() {
5821 var state = this._readableState;
5822 if (!state.flowing) {
5823 debug('resume');
5824 state.flowing = true;
5825 if (!state.reading) {
5826 debug('resume read 0');
5827 this.read(0);
5828 }
5829 resume(this, state);
5830 }
5831 return this;
5832};
ebd8d4e8 5833
ab78acc6
IC
5834function resume(stream, state) {
5835 if (!state.resumeScheduled) {
5836 state.resumeScheduled = true;
5837 process.nextTick(function() {
5838 resume_(stream, state);
ebd8d4e8
IC
5839 });
5840 }
ebd8d4e8
IC
5841}
5842
ab78acc6
IC
5843function resume_(stream, state) {
5844 state.resumeScheduled = false;
5845 stream.emit('resume');
5846 flow(stream);
5847 if (state.flowing && !state.reading)
5848 stream.read(0);
ebd8d4e8
IC
5849}
5850
ab78acc6
IC
5851Readable.prototype.pause = function() {
5852 debug('call pause flowing=%j', this._readableState.flowing);
5853 if (false !== this._readableState.flowing) {
5854 debug('pause');
5855 this._readableState.flowing = false;
5856 this.emit('pause');
5857 }
5858 return this;
5859};
ebd8d4e8 5860
ab78acc6
IC
5861function flow(stream) {
5862 var state = stream._readableState;
5863 debug('flow', state.flowing);
5864 if (state.flowing) {
5865 do {
5866 var chunk = stream.read();
5867 } while (null !== chunk && state.flowing);
5868 }
ebd8d4e8
IC
5869}
5870
ab78acc6
IC
5871// wrap an old-style stream as the async data source.
5872// This is *not* part of the readable stream interface.
5873// It is an ugly unfortunate mess of history.
5874Readable.prototype.wrap = function(stream) {
5875 var state = this._readableState;
5876 var paused = false;
ebd8d4e8 5877
ab78acc6
IC
5878 var self = this;
5879 stream.on('end', function() {
5880 debug('wrapped end');
5881 if (state.decoder && !state.ended) {
5882 var chunk = state.decoder.end();
5883 if (chunk && chunk.length)
5884 self.push(chunk);
ebd8d4e8 5885 }
ab78acc6
IC
5886
5887 self.push(null);
ebd8d4e8 5888 });
ebd8d4e8 5889
ab78acc6
IC
5890 stream.on('data', function(chunk) {
5891 debug('wrapped data');
5892 if (state.decoder)
5893 chunk = state.decoder.write(chunk);
5894 if (!chunk || !state.objectMode && !chunk.length)
5895 return;
ebd8d4e8 5896
ab78acc6
IC
5897 var ret = self.push(chunk);
5898 if (!ret) {
5899 paused = true;
5900 stream.pause();
ebd8d4e8 5901 }
ab78acc6
IC
5902 });
5903
5904 // proxy all the other methods.
5905 // important when wrapping filters and duplexes.
5906 for (var i in stream) {
5907 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5908 this[i] = function(method) { return function() {
5909 return stream[method].apply(stream, arguments);
5910 }}(i);
ebd8d4e8
IC
5911 }
5912 }
ab78acc6
IC
5913
5914 // proxy certain important events.
5915 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5916 forEach(events, function(ev) {
5917 stream.on(ev, self.emit.bind(self, ev));
5918 });
5919
5920 // when we try to consume some more bytes, simply unpause the
5921 // underlying stream.
5922 self._read = function(n) {
5923 debug('wrapped _read', n);
5924 if (paused) {
5925 paused = false;
5926 stream.resume();
ebd8d4e8 5927 }
ab78acc6
IC
5928 };
5929
5930 return self;
5931};
5932
5933
5934
5935// exposed for testing purposes only.
5936Readable._fromList = fromList;
5937
5938// Pluck off n bytes from an array of buffers.
5939// Length is the combined lengths of all the buffers in the list.
5940function fromList(n, state) {
5941 var list = state.buffer;
5942 var length = state.length;
5943 var stringMode = !!state.decoder;
5944 var objectMode = !!state.objectMode;
5945 var ret;
5946
5947 // nothing in the list, definitely empty.
5948 if (list.length === 0)
5949 return null;
5950
5951 if (length === 0)
5952 ret = null;
5953 else if (objectMode)
5954 ret = list.shift();
5955 else if (!n || n >= length) {
5956 // read it all, truncate the array.
5957 if (stringMode)
5958 ret = list.join('');
5959 else
5960 ret = Buffer.concat(list, length);
5961 list.length = 0;
5962 } else {
5963 // read just some of it.
5964 if (n < list[0].length) {
5965 // just take a part of the first list item.
5966 // slice is the same for buffers and strings.
5967 var buf = list[0];
5968 ret = buf.slice(0, n);
5969 list[0] = buf.slice(n);
5970 } else if (n === list[0].length) {
5971 // first list is a perfect match
5972 ret = list.shift();
ebd8d4e8 5973 } else {
ab78acc6
IC
5974 // complex case.
5975 // we have enough to cover it, but it spans past the first buffer.
5976 if (stringMode)
5977 ret = '';
5978 else
5979 ret = new Buffer(n);
ebd8d4e8 5980
ab78acc6
IC
5981 var c = 0;
5982 for (var i = 0, l = list.length; i < l && c < n; i++) {
5983 var buf = list[0];
5984 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5985
ab78acc6
IC
5986 if (stringMode)
5987 ret += buf.slice(0, cpy);
5988 else
5989 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5990
ab78acc6
IC
5991 if (cpy < buf.length)
5992 list[0] = buf.slice(cpy);
5993 else
5994 list.shift();
ebd8d4e8 5995
ab78acc6
IC
5996 c += cpy;
5997 }
5998 }
ebd8d4e8
IC
5999 }
6000
ab78acc6 6001 return ret;
ebd8d4e8
IC
6002}
6003
ab78acc6
IC
6004function endReadable(stream) {
6005 var state = stream._readableState;
ebd8d4e8 6006
ab78acc6
IC
6007 // If we get here before consuming all the bytes, then that is a
6008 // bug in node. Should never happen.
6009 if (state.length > 0)
6010 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 6011
ab78acc6
IC
6012 if (!state.endEmitted) {
6013 state.ended = true;
6014 process.nextTick(function() {
6015 // Check that we didn't get one last unshift.
6016 if (!state.endEmitted && state.length === 0) {
6017 state.endEmitted = true;
6018 stream.readable = false;
6019 stream.emit('end');
6020 }
6021 });
6022 }
ebd8d4e8 6023}
ebd8d4e8 6024
ab78acc6
IC
6025function forEach (xs, f) {
6026 for (var i = 0, l = xs.length; i < l; i++) {
6027 f(xs[i], i);
6028 }
ebd8d4e8 6029}
ebd8d4e8 6030
ab78acc6
IC
6031function indexOf (xs, x) {
6032 for (var i = 0, l = xs.length; i < l; i++) {
6033 if (xs[i] === x) return i;
6034 }
6035 return -1;
ebd8d4e8 6036}
ebd8d4e8 6037
ab78acc6
IC
6038}).call(this,require('_process'))
6039},{"./_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){
6040// Copyright Joyent, Inc. and other Node contributors.
6041//
6042// Permission is hereby granted, free of charge, to any person obtaining a
6043// copy of this software and associated documentation files (the
6044// "Software"), to deal in the Software without restriction, including
6045// without limitation the rights to use, copy, modify, merge, publish,
6046// distribute, sublicense, and/or sell copies of the Software, and to permit
6047// persons to whom the Software is furnished to do so, subject to the
6048// following conditions:
6049//
6050// The above copyright notice and this permission notice shall be included
6051// in all copies or substantial portions of the Software.
6052//
6053// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6054// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6055// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6056// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6057// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6058// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6059// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6060
ebd8d4e8 6061
ab78acc6
IC
6062// a transform stream is a readable/writable stream where you do
6063// something with the data. Sometimes it's called a "filter",
6064// but that's not a great name for it, since that implies a thing where
6065// some bits pass through, and others are simply ignored. (That would
6066// be a valid example of a transform, of course.)
6067//
6068// While the output is causally related to the input, it's not a
6069// necessarily symmetric or synchronous transformation. For example,
6070// a zlib stream might take multiple plain-text writes(), and then
6071// emit a single compressed chunk some time in the future.
6072//
6073// Here's how this works:
6074//
6075// The Transform stream has all the aspects of the readable and writable
6076// stream classes. When you write(chunk), that calls _write(chunk,cb)
6077// internally, and returns false if there's a lot of pending writes
6078// buffered up. When you call read(), that calls _read(n) until
6079// there's enough pending readable data buffered up.
6080//
6081// In a transform stream, the written data is placed in a buffer. When
6082// _read(n) is called, it transforms the queued up data, calling the
6083// buffered _write cb's as it consumes chunks. If consuming a single
6084// written chunk would result in multiple output chunks, then the first
6085// outputted bit calls the readcb, and subsequent chunks just go into
6086// the read buffer, and will cause it to emit 'readable' if necessary.
6087//
6088// This way, back-pressure is actually determined by the reading side,
6089// since _read has to be called to start processing a new chunk. However,
6090// a pathological inflate type of transform can cause excessive buffering
6091// here. For example, imagine a stream where every byte of input is
6092// interpreted as an integer from 0-255, and then results in that many
6093// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6094// 1kb of data being output. In this case, you could write a very small
6095// amount of input, and end up with a very large amount of output. In
6096// such a pathological inflating mechanism, there'd be no way to tell
6097// the system to stop doing the transform. A single 4MB write could
6098// cause the system to run out of memory.
6099//
6100// However, even in such a pathological case, only a single written chunk
6101// would be consumed, and then the rest would wait (un-transformed) until
6102// the results of the previous transformed chunk were consumed.
ebd8d4e8 6103
ab78acc6 6104module.exports = Transform;
ebd8d4e8 6105
ab78acc6 6106var Duplex = require('./_stream_duplex');
ebd8d4e8 6107
ab78acc6
IC
6108/*<replacement>*/
6109var util = require('core-util-is');
6110util.inherits = require('inherits');
6111/*</replacement>*/
6112
6113util.inherits(Transform, Duplex);
6114
6115
6116function TransformState(options, stream) {
6117 this.afterTransform = function(er, data) {
6118 return afterTransform(stream, er, data);
6119 };
6120
6121 this.needTransform = false;
6122 this.transforming = false;
6123 this.writecb = null;
6124 this.writechunk = null;
ebd8d4e8 6125}
ebd8d4e8 6126
ab78acc6
IC
6127function afterTransform(stream, er, data) {
6128 var ts = stream._transformState;
6129 ts.transforming = false;
6130
6131 var cb = ts.writecb;
6132
6133 if (!cb)
6134 return stream.emit('error', new Error('no writecb in Transform class'));
6135
6136 ts.writechunk = null;
6137 ts.writecb = null;
6138
6139 if (!util.isNullOrUndefined(data))
6140 stream.push(data);
6141
6142 if (cb)
6143 cb(er);
6144
6145 var rs = stream._readableState;
6146 rs.reading = false;
6147 if (rs.needReadable || rs.length < rs.highWaterMark) {
6148 stream._read(rs.highWaterMark);
6149 }
ebd8d4e8 6150}
ebd8d4e8 6151
ab78acc6
IC
6152
6153function Transform(options) {
6154 if (!(this instanceof Transform))
6155 return new Transform(options);
6156
6157 Duplex.call(this, options);
6158
6159 this._transformState = new TransformState(options, this);
6160
6161 // when the writable side finishes, then flush out anything remaining.
6162 var stream = this;
6163
6164 // start out asking for a readable event once data is transformed.
6165 this._readableState.needReadable = true;
6166
6167 // we have implemented the _read method, and done the other things
6168 // that Readable wants before the first _read call, so unset the
6169 // sync guard flag.
6170 this._readableState.sync = false;
6171
6172 this.once('prefinish', function() {
6173 if (util.isFunction(this._flush))
6174 this._flush(function(er) {
6175 done(stream, er);
6176 });
6177 else
6178 done(stream);
6179 });
ebd8d4e8 6180}
ebd8d4e8 6181
ab78acc6
IC
6182Transform.prototype.push = function(chunk, encoding) {
6183 this._transformState.needTransform = false;
6184 return Duplex.prototype.push.call(this, chunk, encoding);
6185};
6186
6187// This is the part where you do stuff!
6188// override this function in implementation classes.
6189// 'chunk' is an input chunk.
6190//
6191// Call `push(newChunk)` to pass along transformed output
6192// to the readable side. You may call 'push' zero or more times.
6193//
6194// Call `cb(err)` when you are done with this chunk. If you pass
6195// an error, then that'll put the hurt on the whole operation. If you
6196// never call cb(), then you'll never get another chunk.
6197Transform.prototype._transform = function(chunk, encoding, cb) {
6198 throw new Error('not implemented');
6199};
6200
6201Transform.prototype._write = function(chunk, encoding, cb) {
6202 var ts = this._transformState;
6203 ts.writecb = cb;
6204 ts.writechunk = chunk;
6205 ts.writeencoding = encoding;
6206 if (!ts.transforming) {
6207 var rs = this._readableState;
6208 if (ts.needTransform ||
6209 rs.needReadable ||
6210 rs.length < rs.highWaterMark)
6211 this._read(rs.highWaterMark);
6212 }
6213};
6214
6215// Doesn't matter what the args are here.
6216// _transform does all the work.
6217// That we got here means that the readable side wants more data.
6218Transform.prototype._read = function(n) {
6219 var ts = this._transformState;
ebd8d4e8 6220
ab78acc6
IC
6221 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6222 ts.transforming = true;
6223 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6224 } else {
6225 // mark that we need a transform, so that any data that comes in
6226 // will get processed, now that we've asked for it.
6227 ts.needTransform = true;
6228 }
6229};
ebd8d4e8 6230
ebd8d4e8 6231
ab78acc6
IC
6232function done(stream, er) {
6233 if (er)
6234 return stream.emit('error', er);
ebd8d4e8 6235
ab78acc6
IC
6236 // if there's nothing in the write buffer, then that means
6237 // that nothing more will ever be provided
6238 var ws = stream._writableState;
6239 var ts = stream._transformState;
ebd8d4e8 6240
ab78acc6
IC
6241 if (ws.length)
6242 throw new Error('calling transform done when ws.length != 0');
6243
6244 if (ts.transforming)
6245 throw new Error('calling transform done when still transforming');
6246
6247 return stream.push(null);
ebd8d4e8
IC
6248}
6249
ab78acc6
IC
6250},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6251(function (process){
6252// Copyright Joyent, Inc. and other Node contributors.
6253//
6254// Permission is hereby granted, free of charge, to any person obtaining a
6255// copy of this software and associated documentation files (the
6256// "Software"), to deal in the Software without restriction, including
6257// without limitation the rights to use, copy, modify, merge, publish,
6258// distribute, sublicense, and/or sell copies of the Software, and to permit
6259// persons to whom the Software is furnished to do so, subject to the
6260// following conditions:
6261//
6262// The above copyright notice and this permission notice shall be included
6263// in all copies or substantial portions of the Software.
6264//
6265// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6266// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6267// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6268// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6269// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6270// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6271// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6272
ab78acc6
IC
6273// A bit simpler than readable streams.
6274// Implement an async ._write(chunk, cb), and it'll handle all
6275// the drain event emission and buffering.
ebd8d4e8 6276
ab78acc6 6277module.exports = Writable;
ebd8d4e8 6278
ab78acc6
IC
6279/*<replacement>*/
6280var Buffer = require('buffer').Buffer;
6281/*</replacement>*/
ebd8d4e8 6282
ab78acc6 6283Writable.WritableState = WritableState;
ebd8d4e8
IC
6284
6285
ab78acc6
IC
6286/*<replacement>*/
6287var util = require('core-util-is');
6288util.inherits = require('inherits');
6289/*</replacement>*/
ebd8d4e8 6290
ab78acc6 6291var Stream = require('stream');
ebd8d4e8 6292
ab78acc6 6293util.inherits(Writable, Stream);
ebd8d4e8 6294
ab78acc6
IC
6295function WriteReq(chunk, encoding, cb) {
6296 this.chunk = chunk;
6297 this.encoding = encoding;
6298 this.callback = cb;
ebd8d4e8
IC
6299}
6300
ab78acc6
IC
6301function WritableState(options, stream) {
6302 var Duplex = require('./_stream_duplex');
ebd8d4e8 6303
ab78acc6 6304 options = options || {};
ebd8d4e8 6305
ab78acc6
IC
6306 // the point at which write() starts returning false
6307 // Note: 0 is a valid value, means that we always return false if
6308 // the entire buffer is not flushed immediately on write()
6309 var hwm = options.highWaterMark;
6310 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6311 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6312
ab78acc6
IC
6313 // object stream flag to indicate whether or not this stream
6314 // contains buffers or objects.
6315 this.objectMode = !!options.objectMode;
ebd8d4e8 6316
ab78acc6
IC
6317 if (stream instanceof Duplex)
6318 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6319
ab78acc6
IC
6320 // cast to ints.
6321 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6322
ab78acc6
IC
6323 this.needDrain = false;
6324 // at the start of calling end()
6325 this.ending = false;
6326 // when end() has been called, and returned
6327 this.ended = false;
6328 // when 'finish' is emitted
6329 this.finished = false;
ebd8d4e8 6330
ab78acc6
IC
6331 // should we decode strings into buffers before passing to _write?
6332 // this is here so that some node-core streams can optimize string
6333 // handling at a lower level.
6334 var noDecode = options.decodeStrings === false;
6335 this.decodeStrings = !noDecode;
ebd8d4e8 6336
ab78acc6
IC
6337 // Crypto is kind of old and crusty. Historically, its default string
6338 // encoding is 'binary' so we have to make this configurable.
6339 // Everything else in the universe uses 'utf8', though.
6340 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6341
ab78acc6
IC
6342 // not an actual buffer we keep track of, but a measurement
6343 // of how much we're waiting to get pushed to some underlying
6344 // socket or file.
6345 this.length = 0;
ebd8d4e8 6346
ab78acc6
IC
6347 // a flag to see when we're in the middle of a write.
6348 this.writing = false;
ebd8d4e8 6349
ab78acc6
IC
6350 // when true all writes will be buffered until .uncork() call
6351 this.corked = 0;
ebd8d4e8 6352
ab78acc6
IC
6353 // a flag to be able to tell if the onwrite cb is called immediately,
6354 // or on a later tick. We set this to true at first, because any
6355 // actions that shouldn't happen until "later" should generally also
6356 // not happen before the first write call.
6357 this.sync = true;
ebd8d4e8 6358
ab78acc6
IC
6359 // a flag to know if we're processing previously buffered items, which
6360 // may call the _write() callback in the same tick, so that we don't
6361 // end up in an overlapped onwrite situation.
6362 this.bufferProcessing = false;
ebd8d4e8 6363
ab78acc6
IC
6364 // the callback that's passed to _write(chunk,cb)
6365 this.onwrite = function(er) {
6366 onwrite(stream, er);
6367 };
ebd8d4e8 6368
ab78acc6
IC
6369 // the callback that the user supplies to write(chunk,encoding,cb)
6370 this.writecb = null;
ebd8d4e8 6371
ab78acc6
IC
6372 // the amount that is being written when _write is called.
6373 this.writelen = 0;
ebd8d4e8 6374
ab78acc6 6375 this.buffer = [];
ebd8d4e8 6376
ab78acc6
IC
6377 // number of pending user-supplied write callbacks
6378 // this must be 0 before 'finish' can be emitted
6379 this.pendingcb = 0;
ebd8d4e8 6380
ab78acc6
IC
6381 // emit prefinish if the only thing we're waiting for is _write cbs
6382 // This is relevant for synchronous Transform streams
6383 this.prefinished = false;
ebd8d4e8 6384
ab78acc6
IC
6385 // True if the error was already emitted and should not be thrown again
6386 this.errorEmitted = false;
ebd8d4e8
IC
6387}
6388
ab78acc6
IC
6389function Writable(options) {
6390 var Duplex = require('./_stream_duplex');
ebd8d4e8 6391
ab78acc6
IC
6392 // Writable ctor is applied to Duplexes, though they're not
6393 // instanceof Writable, they're instanceof Readable.
6394 if (!(this instanceof Writable) && !(this instanceof Duplex))
6395 return new Writable(options);
ebd8d4e8 6396
ab78acc6 6397 this._writableState = new WritableState(options, this);
ebd8d4e8 6398
ab78acc6
IC
6399 // legacy.
6400 this.writable = true;
ebd8d4e8 6401
ab78acc6 6402 Stream.call(this);
ebd8d4e8
IC
6403}
6404
ab78acc6
IC
6405// Otherwise people can pipe Writable streams, which is just wrong.
6406Writable.prototype.pipe = function() {
6407 this.emit('error', new Error('Cannot pipe. Not readable.'));
6408};
ebd8d4e8 6409
ebd8d4e8 6410
ab78acc6
IC
6411function writeAfterEnd(stream, state, cb) {
6412 var er = new Error('write after end');
6413 // TODO: defer error events consistently everywhere, not just the cb
6414 stream.emit('error', er);
6415 process.nextTick(function() {
6416 cb(er);
6417 });
ebd8d4e8
IC
6418}
6419
ab78acc6
IC
6420// If we get something that is not a buffer, string, null, or undefined,
6421// and we're not in objectMode, then that's an error.
6422// Otherwise stream chunks are all considered to be of length=1, and the
6423// watermarks determine how many objects to keep in the buffer, rather than
6424// how many bytes or characters.
6425function validChunk(stream, state, chunk, cb) {
6426 var valid = true;
6427 if (!util.isBuffer(chunk) &&
6428 !util.isString(chunk) &&
6429 !util.isNullOrUndefined(chunk) &&
6430 !state.objectMode) {
6431 var er = new TypeError('Invalid non-string/buffer chunk');
6432 stream.emit('error', er);
6433 process.nextTick(function() {
6434 cb(er);
6435 });
6436 valid = false;
6437 }
6438 return valid;
ebd8d4e8
IC
6439}
6440
ab78acc6
IC
6441Writable.prototype.write = function(chunk, encoding, cb) {
6442 var state = this._writableState;
6443 var ret = false;
ebd8d4e8 6444
ab78acc6
IC
6445 if (util.isFunction(encoding)) {
6446 cb = encoding;
6447 encoding = null;
ebd8d4e8 6448 }
ebd8d4e8 6449
ab78acc6
IC
6450 if (util.isBuffer(chunk))
6451 encoding = 'buffer';
6452 else if (!encoding)
6453 encoding = state.defaultEncoding;
6454
6455 if (!util.isFunction(cb))
6456 cb = function() {};
6457
6458 if (state.ended)
6459 writeAfterEnd(this, state, cb);
6460 else if (validChunk(this, state, chunk, cb)) {
6461 state.pendingcb++;
6462 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6463 }
ebd8d4e8 6464
ab78acc6
IC
6465 return ret;
6466};
6467
6468Writable.prototype.cork = function() {
6469 var state = this._writableState;
6470
6471 state.corked++;
6472};
ebd8d4e8 6473
ab78acc6
IC
6474Writable.prototype.uncork = function() {
6475 var state = this._writableState;
ebd8d4e8 6476
ab78acc6
IC
6477 if (state.corked) {
6478 state.corked--;
ebd8d4e8 6479
ab78acc6
IC
6480 if (!state.writing &&
6481 !state.corked &&
6482 !state.finished &&
6483 !state.bufferProcessing &&
6484 state.buffer.length)
6485 clearBuffer(this, state);
ebd8d4e8 6486 }
ab78acc6 6487};
ebd8d4e8 6488
ab78acc6
IC
6489function decodeChunk(state, chunk, encoding) {
6490 if (!state.objectMode &&
6491 state.decodeStrings !== false &&
6492 util.isString(chunk)) {
6493 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6494 }
ab78acc6 6495 return chunk;
ebd8d4e8
IC
6496}
6497
ab78acc6
IC
6498// if we're already writing something, then just put this
6499// in the queue, and wait our turn. Otherwise, call _write
6500// If we return false, then we need a drain event, so set that flag.
6501function writeOrBuffer(stream, state, chunk, encoding, cb) {
6502 chunk = decodeChunk(state, chunk, encoding);
6503 if (util.isBuffer(chunk))
6504 encoding = 'buffer';
6505 var len = state.objectMode ? 1 : chunk.length;
6506
6507 state.length += len;
6508
6509 var ret = state.length < state.highWaterMark;
6510 // we must ensure that previous needDrain will not be reset to false.
6511 if (!ret)
6512 state.needDrain = true;
6513
6514 if (state.writing || state.corked)
6515 state.buffer.push(new WriteReq(chunk, encoding, cb));
6516 else
6517 doWrite(stream, state, false, len, chunk, encoding, cb);
6518
6519 return ret;
ebd8d4e8
IC
6520}
6521
ab78acc6
IC
6522function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6523 state.writelen = len;
6524 state.writecb = cb;
6525 state.writing = true;
6526 state.sync = true;
6527 if (writev)
6528 stream._writev(chunk, state.onwrite);
6529 else
6530 stream._write(chunk, encoding, state.onwrite);
6531 state.sync = false;
ebd8d4e8
IC
6532}
6533
ab78acc6
IC
6534function onwriteError(stream, state, sync, er, cb) {
6535 if (sync)
6536 process.nextTick(function() {
6537 state.pendingcb--;
6538 cb(er);
6539 });
6540 else {
6541 state.pendingcb--;
6542 cb(er);
6543 }
ebd8d4e8 6544
ab78acc6
IC
6545 stream._writableState.errorEmitted = true;
6546 stream.emit('error', er);
6547}
ebd8d4e8 6548
ab78acc6
IC
6549function onwriteStateUpdate(state) {
6550 state.writing = false;
6551 state.writecb = null;
6552 state.length -= state.writelen;
6553 state.writelen = 0;
6554}
ebd8d4e8 6555
ab78acc6
IC
6556function onwrite(stream, er) {
6557 var state = stream._writableState;
6558 var sync = state.sync;
6559 var cb = state.writecb;
ebd8d4e8 6560
ab78acc6 6561 onwriteStateUpdate(state);
ebd8d4e8 6562
ab78acc6
IC
6563 if (er)
6564 onwriteError(stream, state, sync, er, cb);
6565 else {
6566 // Check if we're actually ready to finish, but don't emit yet
6567 var finished = needFinish(stream, state);
ebd8d4e8 6568
ab78acc6
IC
6569 if (!finished &&
6570 !state.corked &&
6571 !state.bufferProcessing &&
6572 state.buffer.length) {
6573 clearBuffer(stream, state);
6574 }
6575
6576 if (sync) {
6577 process.nextTick(function() {
6578 afterWrite(stream, state, finished, cb);
6579 });
6580 } else {
6581 afterWrite(stream, state, finished, cb);
ebd8d4e8 6582 }
ebd8d4e8
IC
6583 }
6584}
6585
ab78acc6
IC
6586function afterWrite(stream, state, finished, cb) {
6587 if (!finished)
6588 onwriteDrain(stream, state);
6589 state.pendingcb--;
6590 cb();
6591 finishMaybe(stream, state);
6592}
6593
6594// Must force callback to be called on nextTick, so that we don't
6595// emit 'drain' before the write() consumer gets the 'false' return
6596// value, and has a chance to attach a 'drain' listener.
6597function onwriteDrain(stream, state) {
6598 if (state.length === 0 && state.needDrain) {
6599 state.needDrain = false;
6600 stream.emit('drain');
ebd8d4e8
IC
6601 }
6602}
6603
ebd8d4e8 6604
ab78acc6
IC
6605// if there's something in the buffer waiting, then process it
6606function clearBuffer(stream, state) {
6607 state.bufferProcessing = true;
6608
6609 if (stream._writev && state.buffer.length > 1) {
6610 // Fast case, write everything using _writev()
6611 var cbs = [];
6612 for (var c = 0; c < state.buffer.length; c++)
6613 cbs.push(state.buffer[c].callback);
6614
6615 // count the one we are adding, as well.
6616 // TODO(isaacs) clean this up
6617 state.pendingcb++;
6618 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6619 for (var i = 0; i < cbs.length; i++) {
6620 state.pendingcb--;
6621 cbs[i](err);
6622 }
6623 });
6624
6625 // Clear buffer
6626 state.buffer = [];
6627 } else {
6628 // Slow case, write chunks one-by-one
6629 for (var c = 0; c < state.buffer.length; c++) {
6630 var entry = state.buffer[c];
6631 var chunk = entry.chunk;
6632 var encoding = entry.encoding;
6633 var cb = entry.callback;
6634 var len = state.objectMode ? 1 : chunk.length;
6635
6636 doWrite(stream, state, false, len, chunk, encoding, cb);
6637
6638 // if we didn't call the onwrite immediately, then
6639 // it means that we need to wait until it does.
6640 // also, that means that the chunk and cb are currently
6641 // being processed, so move the buffer counter past them.
6642 if (state.writing) {
6643 c++;
6644 break;
6645 }
ebd8d4e8 6646 }
ab78acc6
IC
6647
6648 if (c < state.buffer.length)
6649 state.buffer = state.buffer.slice(c);
6650 else
6651 state.buffer.length = 0;
ebd8d4e8
IC
6652 }
6653
ab78acc6 6654 state.bufferProcessing = false;
ebd8d4e8
IC
6655}
6656
ab78acc6
IC
6657Writable.prototype._write = function(chunk, encoding, cb) {
6658 cb(new Error('not implemented'));
ebd8d4e8 6659
ab78acc6 6660};
ebd8d4e8 6661
ab78acc6 6662Writable.prototype._writev = null;
ebd8d4e8 6663
ab78acc6
IC
6664Writable.prototype.end = function(chunk, encoding, cb) {
6665 var state = this._writableState;
ebd8d4e8 6666
ab78acc6
IC
6667 if (util.isFunction(chunk)) {
6668 cb = chunk;
6669 chunk = null;
6670 encoding = null;
6671 } else if (util.isFunction(encoding)) {
6672 cb = encoding;
6673 encoding = null;
6674 }
ebd8d4e8 6675
ab78acc6
IC
6676 if (!util.isNullOrUndefined(chunk))
6677 this.write(chunk, encoding);
6678
6679 // .end() fully uncorks
6680 if (state.corked) {
6681 state.corked = 1;
6682 this.uncork();
ebd8d4e8 6683 }
ab78acc6
IC
6684
6685 // ignore unnecessary end() calls.
6686 if (!state.ending && !state.finished)
6687 endWritable(this, state, cb);
6688};
6689
6690
6691function needFinish(stream, state) {
6692 return (state.ending &&
6693 state.length === 0 &&
6694 !state.finished &&
6695 !state.writing);
ebd8d4e8
IC
6696}
6697
ab78acc6
IC
6698function prefinish(stream, state) {
6699 if (!state.prefinished) {
6700 state.prefinished = true;
6701 stream.emit('prefinish');
ebd8d4e8 6702 }
ebd8d4e8
IC
6703}
6704
ab78acc6
IC
6705function finishMaybe(stream, state) {
6706 var need = needFinish(stream, state);
6707 if (need) {
6708 if (state.pendingcb === 0) {
6709 prefinish(stream, state);
6710 state.finished = true;
6711 stream.emit('finish');
6712 } else
6713 prefinish(stream, state);
6714 }
6715 return need;
6716}
ebd8d4e8 6717
ab78acc6
IC
6718function endWritable(stream, state, cb) {
6719 state.ending = true;
6720 finishMaybe(stream, state);
6721 if (cb) {
6722 if (state.finished)
6723 process.nextTick(cb);
6724 else
6725 stream.once('finish', cb);
ebd8d4e8 6726 }
ab78acc6 6727 state.ended = true;
ebd8d4e8
IC
6728}
6729
ab78acc6
IC
6730}).call(this,require('_process'))
6731},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6732(function (Buffer){
6733// Copyright Joyent, Inc. and other Node contributors.
6734//
6735// Permission is hereby granted, free of charge, to any person obtaining a
6736// copy of this software and associated documentation files (the
6737// "Software"), to deal in the Software without restriction, including
6738// without limitation the rights to use, copy, modify, merge, publish,
6739// distribute, sublicense, and/or sell copies of the Software, and to permit
6740// persons to whom the Software is furnished to do so, subject to the
6741// following conditions:
6742//
6743// The above copyright notice and this permission notice shall be included
6744// in all copies or substantial portions of the Software.
6745//
6746// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6747// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6748// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6749// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6750// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6751// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6752// USE OR OTHER DEALINGS IN THE SOFTWARE.
6753
6754// NOTE: These type checking functions intentionally don't use `instanceof`
6755// because it is fragile and can be easily faked with `Object.create()`.
6756function isArray(ar) {
6757 return Array.isArray(ar);
ebd8d4e8 6758}
ab78acc6 6759exports.isArray = isArray;
ebd8d4e8 6760
ab78acc6
IC
6761function isBoolean(arg) {
6762 return typeof arg === 'boolean';
ebd8d4e8 6763}
ab78acc6 6764exports.isBoolean = isBoolean;
ebd8d4e8 6765
ab78acc6
IC
6766function isNull(arg) {
6767 return arg === null;
6768}
6769exports.isNull = isNull;
ebd8d4e8 6770
ab78acc6
IC
6771function isNullOrUndefined(arg) {
6772 return arg == null;
6773}
6774exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6775
ab78acc6
IC
6776function isNumber(arg) {
6777 return typeof arg === 'number';
ebd8d4e8 6778}
ab78acc6 6779exports.isNumber = isNumber;
ebd8d4e8 6780
ab78acc6
IC
6781function isString(arg) {
6782 return typeof arg === 'string';
6783}
6784exports.isString = isString;
ebd8d4e8 6785
ab78acc6
IC
6786function isSymbol(arg) {
6787 return typeof arg === 'symbol';
6788}
6789exports.isSymbol = isSymbol;
ebd8d4e8 6790
ab78acc6
IC
6791function isUndefined(arg) {
6792 return arg === void 0;
ebd8d4e8 6793}
ab78acc6 6794exports.isUndefined = isUndefined;
ebd8d4e8 6795
ab78acc6
IC
6796function isRegExp(re) {
6797 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6798}
ab78acc6 6799exports.isRegExp = isRegExp;
ebd8d4e8 6800
ab78acc6
IC
6801function isObject(arg) {
6802 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6803}
ab78acc6 6804exports.isObject = isObject;
ebd8d4e8 6805
ab78acc6
IC
6806function isDate(d) {
6807 return isObject(d) && objectToString(d) === '[object Date]';
6808}
6809exports.isDate = isDate;
ebd8d4e8 6810
ab78acc6
IC
6811function isError(e) {
6812 return isObject(e) &&
6813 (objectToString(e) === '[object Error]' || e instanceof Error);
6814}
6815exports.isError = isError;
ebd8d4e8 6816
ab78acc6
IC
6817function isFunction(arg) {
6818 return typeof arg === 'function';
6819}
6820exports.isFunction = isFunction;
6821
6822function isPrimitive(arg) {
6823 return arg === null ||
6824 typeof arg === 'boolean' ||
6825 typeof arg === 'number' ||
6826 typeof arg === 'string' ||
6827 typeof arg === 'symbol' || // ES6 symbol
6828 typeof arg === 'undefined';
ebd8d4e8 6829}
ab78acc6 6830exports.isPrimitive = isPrimitive;
ebd8d4e8 6831
ab78acc6
IC
6832function isBuffer(arg) {
6833 return Buffer.isBuffer(arg);
ebd8d4e8 6834}
ab78acc6 6835exports.isBuffer = isBuffer;
ebd8d4e8 6836
ab78acc6
IC
6837function objectToString(o) {
6838 return Object.prototype.toString.call(o);
ebd8d4e8 6839}
ab78acc6
IC
6840}).call(this,require("buffer").Buffer)
6841},{"buffer":7}],22:[function(require,module,exports){
6842module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6843
ab78acc6
IC
6844},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6845exports = module.exports = require('./lib/_stream_readable.js');
6846exports.Stream = require('stream');
6847exports.Readable = exports;
6848exports.Writable = require('./lib/_stream_writable.js');
6849exports.Duplex = require('./lib/_stream_duplex.js');
6850exports.Transform = require('./lib/_stream_transform.js');
6851exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6852
ab78acc6
IC
6853},{"./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){
6854module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6855
ab78acc6
IC
6856},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6857module.exports = require("./lib/_stream_writable.js")
6858
6859},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6860// Copyright Joyent, Inc. and other Node contributors.
6861//
6862// Permission is hereby granted, free of charge, to any person obtaining a
6863// copy of this software and associated documentation files (the
6864// "Software"), to deal in the Software without restriction, including
6865// without limitation the rights to use, copy, modify, merge, publish,
6866// distribute, sublicense, and/or sell copies of the Software, and to permit
6867// persons to whom the Software is furnished to do so, subject to the
6868// following conditions:
6869//
6870// The above copyright notice and this permission notice shall be included
6871// in all copies or substantial portions of the Software.
6872//
6873// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6874// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6875// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6876// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6877// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6878// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6879// USE OR OTHER DEALINGS IN THE SOFTWARE.
6880
6881module.exports = Stream;
6882
6883var EE = require('events').EventEmitter;
6884var inherits = require('inherits');
6885
6886inherits(Stream, EE);
6887Stream.Readable = require('readable-stream/readable.js');
6888Stream.Writable = require('readable-stream/writable.js');
6889Stream.Duplex = require('readable-stream/duplex.js');
6890Stream.Transform = require('readable-stream/transform.js');
6891Stream.PassThrough = require('readable-stream/passthrough.js');
6892
6893// Backwards-compat with node 0.4.x
6894Stream.Stream = Stream;
6895
6896
6897
6898// old-style streams. Note that the pipe method (the only relevant
6899// part of this class) is overridden in the Readable class.
6900
6901function Stream() {
6902 EE.call(this);
ebd8d4e8
IC
6903}
6904
ab78acc6
IC
6905Stream.prototype.pipe = function(dest, options) {
6906 var source = this;
ebd8d4e8 6907
ab78acc6
IC
6908 function ondata(chunk) {
6909 if (dest.writable) {
6910 if (false === dest.write(chunk) && source.pause) {
6911 source.pause();
6912 }
6913 }
6914 }
ebd8d4e8 6915
ab78acc6 6916 source.on('data', ondata);
ebd8d4e8 6917
ab78acc6
IC
6918 function ondrain() {
6919 if (source.readable && source.resume) {
6920 source.resume();
6921 }
6922 }
ebd8d4e8 6923
ab78acc6 6924 dest.on('drain', ondrain);
ebd8d4e8 6925
ab78acc6
IC
6926 // If the 'end' option is not supplied, dest.end() will be called when
6927 // source gets the 'end' or 'close' events. Only dest.end() once.
6928 if (!dest._isStdio && (!options || options.end !== false)) {
6929 source.on('end', onend);
6930 source.on('close', onclose);
ebd8d4e8
IC
6931 }
6932
ab78acc6
IC
6933 var didOnEnd = false;
6934 function onend() {
6935 if (didOnEnd) return;
6936 didOnEnd = true;
ebd8d4e8 6937
ab78acc6
IC
6938 dest.end();
6939 }
ebd8d4e8 6940
ebd8d4e8 6941
ab78acc6
IC
6942 function onclose() {
6943 if (didOnEnd) return;
6944 didOnEnd = true;
ebd8d4e8 6945
ab78acc6 6946 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6947 }
6948
ab78acc6
IC
6949 // don't leave dangling pipes when there are errors.
6950 function onerror(er) {
6951 cleanup();
6952 if (EE.listenerCount(this, 'error') === 0) {
6953 throw er; // Unhandled stream error in pipe.
6954 }
6955 }
ebd8d4e8 6956
ab78acc6
IC
6957 source.on('error', onerror);
6958 dest.on('error', onerror);
ebd8d4e8 6959
ab78acc6
IC
6960 // remove all the event listeners that were added.
6961 function cleanup() {
6962 source.removeListener('data', ondata);
6963 dest.removeListener('drain', ondrain);
ebd8d4e8 6964
ab78acc6
IC
6965 source.removeListener('end', onend);
6966 source.removeListener('close', onclose);
6967
6968 source.removeListener('error', onerror);
6969 dest.removeListener('error', onerror);
6970
6971 source.removeListener('end', cleanup);
6972 source.removeListener('close', cleanup);
6973
6974 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6975 }
6976
ab78acc6
IC
6977 source.on('end', cleanup);
6978 source.on('close', cleanup);
ebd8d4e8 6979
ab78acc6 6980 dest.on('close', cleanup);
ebd8d4e8 6981
ab78acc6 6982 dest.emit('pipe', source);
ebd8d4e8 6983
ab78acc6
IC
6984 // Allow for unix-like usage: A.pipe(B).pipe(C)
6985 return dest;
6986};
ebd8d4e8 6987
ab78acc6
IC
6988},{"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){
6989// Copyright Joyent, Inc. and other Node contributors.
6990//
6991// Permission is hereby granted, free of charge, to any person obtaining a
6992// copy of this software and associated documentation files (the
6993// "Software"), to deal in the Software without restriction, including
6994// without limitation the rights to use, copy, modify, merge, publish,
6995// distribute, sublicense, and/or sell copies of the Software, and to permit
6996// persons to whom the Software is furnished to do so, subject to the
6997// following conditions:
6998//
6999// The above copyright notice and this permission notice shall be included
7000// in all copies or substantial portions of the Software.
7001//
7002// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7003// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7004// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7005// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7006// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7007// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7008// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7009
ab78acc6 7010var Buffer = require('buffer').Buffer;
ebd8d4e8 7011
ab78acc6
IC
7012var isBufferEncoding = Buffer.isEncoding
7013 || function(encoding) {
7014 switch (encoding && encoding.toLowerCase()) {
7015 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;
7016 default: return false;
7017 }
7018 }
ebd8d4e8 7019
ebd8d4e8 7020
ab78acc6
IC
7021function assertEncoding(encoding) {
7022 if (encoding && !isBufferEncoding(encoding)) {
7023 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 7024 }
ebd8d4e8
IC
7025}
7026
ab78acc6
IC
7027// StringDecoder provides an interface for efficiently splitting a series of
7028// buffers into a series of JS strings without breaking apart multi-byte
7029// characters. CESU-8 is handled as part of the UTF-8 encoding.
7030//
7031// @TODO Handling all encodings inside a single object makes it very difficult
7032// to reason about this code, so it should be split up in the future.
7033// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7034// points as used by CESU-8.
7035var StringDecoder = exports.StringDecoder = function(encoding) {
7036 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7037 assertEncoding(encoding);
7038 switch (this.encoding) {
7039 case 'utf8':
7040 // CESU-8 represents each of Surrogate Pair by 3-bytes
7041 this.surrogateSize = 3;
7042 break;
7043 case 'ucs2':
7044 case 'utf16le':
7045 // UTF-16 represents each of Surrogate Pair by 2-bytes
7046 this.surrogateSize = 2;
7047 this.detectIncompleteChar = utf16DetectIncompleteChar;
7048 break;
7049 case 'base64':
7050 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7051 this.surrogateSize = 3;
7052 this.detectIncompleteChar = base64DetectIncompleteChar;
7053 break;
7054 default:
7055 this.write = passThroughWrite;
7056 return;
7057 }
ebd8d4e8 7058
ab78acc6
IC
7059 // Enough space to store all bytes of a single character. UTF-8 needs 4
7060 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7061 this.charBuffer = new Buffer(6);
7062 // Number of bytes received for the current incomplete multi-byte character.
7063 this.charReceived = 0;
7064 // Number of bytes expected for the current incomplete multi-byte character.
7065 this.charLength = 0;
7066};
ebd8d4e8 7067
ebd8d4e8 7068
ab78acc6
IC
7069// write decodes the given buffer and returns it as JS string that is
7070// guaranteed to not contain any partial multi-byte characters. Any partial
7071// character found at the end of the buffer is buffered up, and will be
7072// returned when calling write again with the remaining bytes.
7073//
7074// Note: Converting a Buffer containing an orphan surrogate to a String
7075// currently works, but converting a String to a Buffer (via `new Buffer`, or
7076// Buffer#write) will replace incomplete surrogates with the unicode
7077// replacement character. See https://codereview.chromium.org/121173009/ .
7078StringDecoder.prototype.write = function(buffer) {
7079 var charStr = '';
7080 // if our last write ended with an incomplete multibyte character
7081 while (this.charLength) {
7082 // determine how many remaining bytes this buffer has to offer for this char
7083 var available = (buffer.length >= this.charLength - this.charReceived) ?
7084 this.charLength - this.charReceived :
7085 buffer.length;
7086
7087 // add the new bytes to the char buffer
7088 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7089 this.charReceived += available;
7090
7091 if (this.charReceived < this.charLength) {
7092 // still not enough chars in this buffer? wait for more ...
7093 return '';
7094 }
7095
7096 // remove bytes belonging to the current character from the buffer
7097 buffer = buffer.slice(available, buffer.length);
7098
7099 // get the character that was split
7100 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7101
7102 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7103 var charCode = charStr.charCodeAt(charStr.length - 1);
7104 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7105 this.charLength += this.surrogateSize;
7106 charStr = '';
7107 continue;
7108 }
7109 this.charReceived = this.charLength = 0;
ebd8d4e8 7110
ab78acc6
IC
7111 // if there are no more bytes in this buffer, just emit our char
7112 if (buffer.length === 0) {
7113 return charStr;
7114 }
7115 break;
ebd8d4e8 7116 }
ebd8d4e8 7117
ab78acc6
IC
7118 // determine and set charLength / charReceived
7119 this.detectIncompleteChar(buffer);
ebd8d4e8 7120
ab78acc6
IC
7121 var end = buffer.length;
7122 if (this.charLength) {
7123 // buffer the incomplete character bytes we got
7124 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7125 end -= this.charReceived;
ebd8d4e8
IC
7126 }
7127
ab78acc6 7128 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7129
ab78acc6
IC
7130 var end = charStr.length - 1;
7131 var charCode = charStr.charCodeAt(end);
7132 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7133 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7134 var size = this.surrogateSize;
7135 this.charLength += size;
7136 this.charReceived += size;
7137 this.charBuffer.copy(this.charBuffer, size, 0, size);
7138 buffer.copy(this.charBuffer, 0, 0, size);
7139 return charStr.substring(0, end);
ebd8d4e8
IC
7140 }
7141
ab78acc6
IC
7142 // or just emit the charStr
7143 return charStr;
7144};
ebd8d4e8 7145
ab78acc6
IC
7146// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7147// the end of the given buffer. If so, it sets this.charLength to the byte
7148// length that character, and sets this.charReceived to the number of bytes
7149// that are available for this character.
7150StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7151 // determine how many bytes we have to check at the end of this buffer
7152 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7153
ab78acc6
IC
7154 // Figure out if one of the last i bytes of our buffer announces an
7155 // incomplete char.
7156 for (; i > 0; i--) {
7157 var c = buffer[buffer.length - i];
ebd8d4e8 7158
ab78acc6 7159 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7160
ab78acc6
IC
7161 // 110XXXXX
7162 if (i == 1 && c >> 5 == 0x06) {
7163 this.charLength = 2;
7164 break;
7165 }
ebd8d4e8 7166
ab78acc6
IC
7167 // 1110XXXX
7168 if (i <= 2 && c >> 4 == 0x0E) {
7169 this.charLength = 3;
7170 break;
7171 }
ebd8d4e8 7172
ab78acc6
IC
7173 // 11110XXX
7174 if (i <= 3 && c >> 3 == 0x1E) {
7175 this.charLength = 4;
7176 break;
7177 }
7178 }
7179 this.charReceived = i;
7180};
ebd8d4e8 7181
ab78acc6
IC
7182StringDecoder.prototype.end = function(buffer) {
7183 var res = '';
7184 if (buffer && buffer.length)
7185 res = this.write(buffer);
ebd8d4e8 7186
ab78acc6
IC
7187 if (this.charReceived) {
7188 var cr = this.charReceived;
7189 var buf = this.charBuffer;
7190 var enc = this.encoding;
7191 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7192 }
7193
ab78acc6
IC
7194 return res;
7195};
ebd8d4e8 7196
ab78acc6
IC
7197function passThroughWrite(buffer) {
7198 return buffer.toString(this.encoding);
ebd8d4e8
IC
7199}
7200
ab78acc6
IC
7201function utf16DetectIncompleteChar(buffer) {
7202 this.charReceived = buffer.length % 2;
7203 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7204}
7205
ab78acc6
IC
7206function base64DetectIncompleteChar(buffer) {
7207 this.charReceived = buffer.length % 3;
7208 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7209}
7210
ab78acc6
IC
7211},{"buffer":7}],28:[function(require,module,exports){
7212module.exports = function isBuffer(arg) {
7213 return arg && typeof arg === 'object'
7214 && typeof arg.copy === 'function'
7215 && typeof arg.fill === 'function'
7216 && typeof arg.readUInt8 === 'function';
7217}
7218},{}],29:[function(require,module,exports){
7219(function (process,global){
7220// Copyright Joyent, Inc. and other Node contributors.
7221//
7222// Permission is hereby granted, free of charge, to any person obtaining a
7223// copy of this software and associated documentation files (the
7224// "Software"), to deal in the Software without restriction, including
7225// without limitation the rights to use, copy, modify, merge, publish,
7226// distribute, sublicense, and/or sell copies of the Software, and to permit
7227// persons to whom the Software is furnished to do so, subject to the
7228// following conditions:
7229//
7230// The above copyright notice and this permission notice shall be included
7231// in all copies or substantial portions of the Software.
7232//
7233// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7234// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7235// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7236// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7237// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7238// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7239// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7240
ab78acc6
IC
7241var formatRegExp = /%[sdj%]/g;
7242exports.format = function(f) {
7243 if (!isString(f)) {
7244 var objects = [];
7245 for (var i = 0; i < arguments.length; i++) {
7246 objects.push(inspect(arguments[i]));
7247 }
7248 return objects.join(' ');
7249 }
ebd8d4e8 7250
ab78acc6
IC
7251 var i = 1;
7252 var args = arguments;
7253 var len = args.length;
7254 var str = String(f).replace(formatRegExp, function(x) {
7255 if (x === '%%') return '%';
7256 if (i >= len) return x;
7257 switch (x) {
7258 case '%s': return String(args[i++]);
7259 case '%d': return Number(args[i++]);
7260 case '%j':
7261 try {
7262 return JSON.stringify(args[i++]);
7263 } catch (_) {
7264 return '[Circular]';
7265 }
7266 default:
7267 return x;
7268 }
7269 });
7270 for (var x = args[i]; i < len; x = args[++i]) {
7271 if (isNull(x) || !isObject(x)) {
7272 str += ' ' + x;
7273 } else {
7274 str += ' ' + inspect(x);
7275 }
7276 }
7277 return str;
7278};
ebd8d4e8 7279
ebd8d4e8 7280
ab78acc6
IC
7281// Mark that a method should not be used.
7282// Returns a modified function which warns once by default.
7283// If --no-deprecation is set, then it is a no-op.
7284exports.deprecate = function(fn, msg) {
7285 // Allow for deprecating things in the process of starting up.
7286 if (isUndefined(global.process)) {
7287 return function() {
7288 return exports.deprecate(fn, msg).apply(this, arguments);
7289 };
7290 }
ebd8d4e8 7291
ab78acc6
IC
7292 if (process.noDeprecation === true) {
7293 return fn;
7294 }
ebd8d4e8 7295
ab78acc6
IC
7296 var warned = false;
7297 function deprecated() {
7298 if (!warned) {
7299 if (process.throwDeprecation) {
7300 throw new Error(msg);
7301 } else if (process.traceDeprecation) {
7302 console.trace(msg);
7303 } else {
7304 console.error(msg);
7305 }
7306 warned = true;
7307 }
7308 return fn.apply(this, arguments);
7309 }
ebd8d4e8 7310
ab78acc6
IC
7311 return deprecated;
7312};
ebd8d4e8 7313
ebd8d4e8 7314
ab78acc6
IC
7315var debugs = {};
7316var debugEnviron;
7317exports.debuglog = function(set) {
7318 if (isUndefined(debugEnviron))
7319 debugEnviron = process.env.NODE_DEBUG || '';
7320 set = set.toUpperCase();
7321 if (!debugs[set]) {
7322 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7323 var pid = process.pid;
7324 debugs[set] = function() {
7325 var msg = exports.format.apply(exports, arguments);
7326 console.error('%s %d: %s', set, pid, msg);
7327 };
7328 } else {
7329 debugs[set] = function() {};
ebd8d4e8
IC
7330 }
7331 }
ab78acc6
IC
7332 return debugs[set];
7333};
ebd8d4e8 7334
ebd8d4e8
IC
7335
7336/**
ab78acc6
IC
7337 * Echos the value of a value. Trys to print the value out
7338 * in the best way possible given the different types.
7339 *
7340 * @param {Object} obj The object to print out.
7341 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7342 */
ab78acc6
IC
7343/* legacy: obj, showHidden, depth, colors*/
7344function inspect(obj, opts) {
7345 // default options
7346 var ctx = {
7347 seen: [],
7348 stylize: stylizeNoColor
7349 };
7350 // legacy...
7351 if (arguments.length >= 3) ctx.depth = arguments[2];
7352 if (arguments.length >= 4) ctx.colors = arguments[3];
7353 if (isBoolean(opts)) {
7354 // legacy...
7355 ctx.showHidden = opts;
7356 } else if (opts) {
7357 // got an "options" object
7358 exports._extend(ctx, opts);
ebd8d4e8 7359 }
ab78acc6
IC
7360 // set default options
7361 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7362 if (isUndefined(ctx.depth)) ctx.depth = 2;
7363 if (isUndefined(ctx.colors)) ctx.colors = false;
7364 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7365 if (ctx.colors) ctx.stylize = stylizeWithColor;
7366 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7367}
ab78acc6 7368exports.inspect = inspect;
ebd8d4e8 7369
ebd8d4e8 7370
ab78acc6
IC
7371// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7372inspect.colors = {
7373 'bold' : [1, 22],
7374 'italic' : [3, 23],
7375 'underline' : [4, 24],
7376 'inverse' : [7, 27],
7377 'white' : [37, 39],
7378 'grey' : [90, 39],
7379 'black' : [30, 39],
7380 'blue' : [34, 39],
7381 'cyan' : [36, 39],
7382 'green' : [32, 39],
7383 'magenta' : [35, 39],
7384 'red' : [31, 39],
7385 'yellow' : [33, 39]
7386};
ebd8d4e8 7387
ab78acc6
IC
7388// Don't use 'blue' not visible on cmd.exe
7389inspect.styles = {
7390 'special': 'cyan',
7391 'number': 'yellow',
7392 'boolean': 'yellow',
7393 'undefined': 'grey',
7394 'null': 'bold',
7395 'string': 'green',
7396 'date': 'magenta',
7397 // "name": intentionally not styling
7398 'regexp': 'red'
7399};
ebd8d4e8 7400
ebd8d4e8 7401
ab78acc6
IC
7402function stylizeWithColor(str, styleType) {
7403 var style = inspect.styles[styleType];
ebd8d4e8 7404
ab78acc6
IC
7405 if (style) {
7406 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7407 '\u001b[' + inspect.colors[style][1] + 'm';
7408 } else {
7409 return str;
ebd8d4e8 7410 }
ebd8d4e8
IC
7411}
7412
ebd8d4e8 7413
ab78acc6
IC
7414function stylizeNoColor(str, styleType) {
7415 return str;
ebd8d4e8
IC
7416}
7417
ebd8d4e8 7418
ab78acc6
IC
7419function arrayToHash(array) {
7420 var hash = {};
ebd8d4e8 7421
ab78acc6
IC
7422 array.forEach(function(val, idx) {
7423 hash[val] = true;
7424 });
ebd8d4e8 7425
ab78acc6 7426 return hash;
ebd8d4e8
IC
7427}
7428
ebd8d4e8 7429
ab78acc6
IC
7430function formatValue(ctx, value, recurseTimes) {
7431 // Provide a hook for user-specified inspect functions.
7432 // Check that value is an object with an inspect function on it
7433 if (ctx.customInspect &&
7434 value &&
7435 isFunction(value.inspect) &&
7436 // Filter out the util module, it's inspect function is special
7437 value.inspect !== exports.inspect &&
7438 // Also filter out any prototype objects using the circular check.
7439 !(value.constructor && value.constructor.prototype === value)) {
7440 var ret = value.inspect(recurseTimes, ctx);
7441 if (!isString(ret)) {
7442 ret = formatValue(ctx, ret, recurseTimes);
7443 }
7444 return ret;
ebd8d4e8 7445 }
ebd8d4e8 7446
ab78acc6
IC
7447 // Primitive types cannot have properties
7448 var primitive = formatPrimitive(ctx, value);
7449 if (primitive) {
7450 return primitive;
ebd8d4e8
IC
7451 }
7452
ab78acc6
IC
7453 // Look up the keys of the object.
7454 var keys = Object.keys(value);
7455 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7456
ab78acc6
IC
7457 if (ctx.showHidden) {
7458 keys = Object.getOwnPropertyNames(value);
7459 }
ebd8d4e8 7460
ab78acc6
IC
7461 // IE doesn't make error fields non-enumerable
7462 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7463 if (isError(value)
7464 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7465 return formatError(value);
ebd8d4e8 7466 }
ebd8d4e8 7467
ab78acc6
IC
7468 // Some type of object without properties can be shortcutted.
7469 if (keys.length === 0) {
7470 if (isFunction(value)) {
7471 var name = value.name ? ': ' + value.name : '';
7472 return ctx.stylize('[Function' + name + ']', 'special');
7473 }
7474 if (isRegExp(value)) {
7475 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7476 }
7477 if (isDate(value)) {
7478 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7479 }
7480 if (isError(value)) {
7481 return formatError(value);
7482 }
ebd8d4e8 7483 }
ebd8d4e8 7484
ab78acc6 7485 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7486
ab78acc6
IC
7487 // Make Array say that they are Array
7488 if (isArray(value)) {
7489 array = true;
7490 braces = ['[', ']'];
7491 }
ebd8d4e8 7492
ab78acc6
IC
7493 // Make functions say that they are functions
7494 if (isFunction(value)) {
7495 var n = value.name ? ': ' + value.name : '';
7496 base = ' [Function' + n + ']';
7497 }
ebd8d4e8 7498
ab78acc6
IC
7499 // Make RegExps say that they are RegExps
7500 if (isRegExp(value)) {
7501 base = ' ' + RegExp.prototype.toString.call(value);
7502 }
ebd8d4e8 7503
ab78acc6
IC
7504 // Make dates with properties first say the date
7505 if (isDate(value)) {
7506 base = ' ' + Date.prototype.toUTCString.call(value);
7507 }
ebd8d4e8 7508
ab78acc6
IC
7509 // Make error with message first say the error
7510 if (isError(value)) {
7511 base = ' ' + formatError(value);
7512 }
ebd8d4e8 7513
ab78acc6
IC
7514 if (keys.length === 0 && (!array || value.length == 0)) {
7515 return braces[0] + base + braces[1];
7516 }
ebd8d4e8 7517
ab78acc6
IC
7518 if (recurseTimes < 0) {
7519 if (isRegExp(value)) {
7520 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7521 } else {
7522 return ctx.stylize('[Object]', 'special');
7523 }
7524 }
ebd8d4e8 7525
ab78acc6 7526 ctx.seen.push(value);
ebd8d4e8 7527
ab78acc6
IC
7528 var output;
7529 if (array) {
7530 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7531 } else {
7532 output = keys.map(function(key) {
7533 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7534 });
7535 }
ebd8d4e8 7536
ab78acc6 7537 ctx.seen.pop();
ebd8d4e8 7538
ab78acc6
IC
7539 return reduceToSingleString(output, base, braces);
7540}
ebd8d4e8 7541
ebd8d4e8 7542
ab78acc6
IC
7543function formatPrimitive(ctx, value) {
7544 if (isUndefined(value))
7545 return ctx.stylize('undefined', 'undefined');
7546 if (isString(value)) {
7547 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7548 .replace(/'/g, "\\'")
7549 .replace(/\\"/g, '"') + '\'';
7550 return ctx.stylize(simple, 'string');
7551 }
7552 if (isNumber(value))
7553 return ctx.stylize('' + value, 'number');
7554 if (isBoolean(value))
7555 return ctx.stylize('' + value, 'boolean');
7556 // For some reason typeof null is "object", so special case here.
7557 if (isNull(value))
7558 return ctx.stylize('null', 'null');
7559}
ebd8d4e8 7560
ebd8d4e8 7561
ab78acc6
IC
7562function formatError(value) {
7563 return '[' + Error.prototype.toString.call(value) + ']';
7564}
ebd8d4e8 7565
ebd8d4e8 7566
ab78acc6
IC
7567function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7568 var output = [];
7569 for (var i = 0, l = value.length; i < l; ++i) {
7570 if (hasOwnProperty(value, String(i))) {
7571 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7572 String(i), true));
7573 } else {
7574 output.push('');
7575 }
7576 }
7577 keys.forEach(function(key) {
7578 if (!key.match(/^\d+$/)) {
7579 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7580 key, true));
7581 }
7582 });
7583 return output;
7584}
ebd8d4e8 7585
ebd8d4e8 7586
ab78acc6
IC
7587function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7588 var name, str, desc;
7589 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7590 if (desc.get) {
7591 if (desc.set) {
7592 str = ctx.stylize('[Getter/Setter]', 'special');
7593 } else {
7594 str = ctx.stylize('[Getter]', 'special');
7595 }
7596 } else {
7597 if (desc.set) {
7598 str = ctx.stylize('[Setter]', 'special');
7599 }
7600 }
7601 if (!hasOwnProperty(visibleKeys, key)) {
7602 name = '[' + key + ']';
7603 }
7604 if (!str) {
7605 if (ctx.seen.indexOf(desc.value) < 0) {
7606 if (isNull(recurseTimes)) {
7607 str = formatValue(ctx, desc.value, null);
7608 } else {
7609 str = formatValue(ctx, desc.value, recurseTimes - 1);
7610 }
7611 if (str.indexOf('\n') > -1) {
7612 if (array) {
7613 str = str.split('\n').map(function(line) {
7614 return ' ' + line;
7615 }).join('\n').substr(2);
7616 } else {
7617 str = '\n' + str.split('\n').map(function(line) {
7618 return ' ' + line;
7619 }).join('\n');
7620 }
7621 }
7622 } else {
7623 str = ctx.stylize('[Circular]', 'special');
7624 }
7625 }
7626 if (isUndefined(name)) {
7627 if (array && key.match(/^\d+$/)) {
7628 return str;
7629 }
7630 name = JSON.stringify('' + key);
7631 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7632 name = name.substr(1, name.length - 2);
7633 name = ctx.stylize(name, 'name');
7634 } else {
7635 name = name.replace(/'/g, "\\'")
7636 .replace(/\\"/g, '"')
7637 .replace(/(^"|"$)/g, "'");
7638 name = ctx.stylize(name, 'string');
7639 }
7640 }
ebd8d4e8 7641
ab78acc6
IC
7642 return name + ': ' + str;
7643}
ebd8d4e8 7644
ebd8d4e8 7645
ab78acc6
IC
7646function reduceToSingleString(output, base, braces) {
7647 var numLinesEst = 0;
7648 var length = output.reduce(function(prev, cur) {
7649 numLinesEst++;
7650 if (cur.indexOf('\n') >= 0) numLinesEst++;
7651 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7652 }, 0);
ebd8d4e8 7653
ab78acc6
IC
7654 if (length > 60) {
7655 return braces[0] +
7656 (base === '' ? '' : base + '\n ') +
7657 ' ' +
7658 output.join(',\n ') +
7659 ' ' +
7660 braces[1];
7661 }
ebd8d4e8 7662
ab78acc6
IC
7663 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7664}
ebd8d4e8 7665
ebd8d4e8 7666
ab78acc6
IC
7667// NOTE: These type checking functions intentionally don't use `instanceof`
7668// because it is fragile and can be easily faked with `Object.create()`.
7669function isArray(ar) {
7670 return Array.isArray(ar);
7671}
7672exports.isArray = isArray;
ebd8d4e8 7673
ab78acc6
IC
7674function isBoolean(arg) {
7675 return typeof arg === 'boolean';
7676}
7677exports.isBoolean = isBoolean;
ebd8d4e8 7678
ab78acc6
IC
7679function isNull(arg) {
7680 return arg === null;
7681}
7682exports.isNull = isNull;
ebd8d4e8 7683
ab78acc6
IC
7684function isNullOrUndefined(arg) {
7685 return arg == null;
7686}
7687exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7688
ab78acc6
IC
7689function isNumber(arg) {
7690 return typeof arg === 'number';
7691}
7692exports.isNumber = isNumber;
ebd8d4e8 7693
ab78acc6
IC
7694function isString(arg) {
7695 return typeof arg === 'string';
7696}
7697exports.isString = isString;
ebd8d4e8 7698
ab78acc6
IC
7699function isSymbol(arg) {
7700 return typeof arg === 'symbol';
7701}
7702exports.isSymbol = isSymbol;
ebd8d4e8 7703
ab78acc6
IC
7704function isUndefined(arg) {
7705 return arg === void 0;
7706}
7707exports.isUndefined = isUndefined;
ebd8d4e8 7708
ab78acc6
IC
7709function isRegExp(re) {
7710 return isObject(re) && objectToString(re) === '[object RegExp]';
7711}
7712exports.isRegExp = isRegExp;
ebd8d4e8 7713
ab78acc6
IC
7714function isObject(arg) {
7715 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7716}
ab78acc6 7717exports.isObject = isObject;
ebd8d4e8 7718
ab78acc6
IC
7719function isDate(d) {
7720 return isObject(d) && objectToString(d) === '[object Date]';
7721}
7722exports.isDate = isDate;
ebd8d4e8 7723
ab78acc6
IC
7724function isError(e) {
7725 return isObject(e) &&
7726 (objectToString(e) === '[object Error]' || e instanceof Error);
7727}
7728exports.isError = isError;
ebd8d4e8 7729
ab78acc6
IC
7730function isFunction(arg) {
7731 return typeof arg === 'function';
7732}
7733exports.isFunction = isFunction;
ebd8d4e8 7734
ab78acc6
IC
7735function isPrimitive(arg) {
7736 return arg === null ||
7737 typeof arg === 'boolean' ||
7738 typeof arg === 'number' ||
7739 typeof arg === 'string' ||
7740 typeof arg === 'symbol' || // ES6 symbol
7741 typeof arg === 'undefined';
7742}
7743exports.isPrimitive = isPrimitive;
ebd8d4e8 7744
ab78acc6 7745exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7746
ab78acc6
IC
7747function objectToString(o) {
7748 return Object.prototype.toString.call(o);
7749}
ebd8d4e8 7750
ebd8d4e8 7751
ab78acc6
IC
7752function pad(n) {
7753 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7754}
ebd8d4e8 7755
ebd8d4e8 7756
ab78acc6
IC
7757var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7758 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7759
ab78acc6
IC
7760// 26 Feb 16:19:34
7761function timestamp() {
7762 var d = new Date();
7763 var time = [pad(d.getHours()),
7764 pad(d.getMinutes()),
7765 pad(d.getSeconds())].join(':');
7766 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7767}
7768
ab78acc6
IC
7769
7770// log is just a thin wrapper to console.log that prepends a timestamp
7771exports.log = function() {
7772 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7773};
7774
ab78acc6
IC
7775
7776/**
7777 * Inherit the prototype methods from one constructor into another.
7778 *
7779 * The Function.prototype.inherits from lang.js rewritten as a standalone
7780 * function (not on Function.prototype). NOTE: If this file is to be loaded
7781 * during bootstrapping this function needs to be rewritten using some native
7782 * functions as prototype setup using normal JavaScript does not work as
7783 * expected during bootstrapping (see mirror.js in r114903).
7784 *
7785 * @param {function} ctor Constructor function which needs to inherit the
7786 * prototype.
7787 * @param {function} superCtor Constructor function to inherit prototype from.
7788 */
7789exports.inherits = require('inherits');
7790
7791exports._extend = function(origin, add) {
7792 // Don't do anything if add isn't an object
7793 if (!add || !isObject(add)) return origin;
7794
7795 var keys = Object.keys(add);
7796 var i = keys.length;
7797 while (i--) {
7798 origin[keys[i]] = add[keys[i]];
7799 }
7800 return origin;
7801};
7802
7803function hasOwnProperty(obj, prop) {
7804 return Object.prototype.hasOwnProperty.call(obj, prop);
7805}
7806
7807}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7808},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7809// Base58 encoding/decoding
7810// Originally written by Mike Hearn for BitcoinJ
7811// Copyright (c) 2011 Google Inc
7812// Ported to JavaScript by Stefan Thomas
7813// Merged Buffer refactorings from base58-native by Stephen Pair
7814// Copyright (c) 2013 BitPay Inc
7815
ebd8d4e8 7816var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7817var ALPHABET_MAP = {}
7818for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7819 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7820}
ab78acc6 7821var BASE = 58
ebd8d4e8
IC
7822
7823function encode(buffer) {
ab78acc6
IC
7824 if (buffer.length === 0) return ''
7825
7826 var i, j, digits = [0]
7827 for (i = 0; i < buffer.length; i++) {
7828 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7829
7830 digits[0] += buffer[i]
ebd8d4e8 7831
ab78acc6
IC
7832 var carry = 0
7833 for (j = 0; j < digits.length; ++j) {
7834 digits[j] += carry
ebd8d4e8 7835
ab78acc6
IC
7836 carry = (digits[j] / BASE) | 0
7837 digits[j] %= BASE
7838 }
7839
7840 while (carry) {
7841 digits.push(carry % BASE)
7842
7843 carry = (carry / BASE) | 0
7844 }
ebd8d4e8
IC
7845 }
7846
7847 // deal with leading zeros
ab78acc6 7848 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7849
ab78acc6
IC
7850 // convert digits to a string
7851 var stringOutput = ""
7852 for (var i = digits.length - 1; i >= 0; i--) {
7853 stringOutput = stringOutput + ALPHABET[digits[i]]
7854 }
7855 return stringOutput
ebd8d4e8
IC
7856}
7857
7858function decode(string) {
ab78acc6 7859 if (string.length === 0) return []
ebd8d4e8 7860
ab78acc6
IC
7861 var i, j, bytes = [0]
7862 for (i = 0; i < string.length; i++) {
7863 var c = string[i]
7864 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7865
ab78acc6
IC
7866 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7867 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7868
ab78acc6
IC
7869 var carry = 0
7870 for (j = 0; j < bytes.length; ++j) {
7871 bytes[j] += carry
ebd8d4e8 7872
ab78acc6
IC
7873 carry = bytes[j] >> 8
7874 bytes[j] &= 0xff
7875 }
ebd8d4e8 7876
ab78acc6
IC
7877 while (carry) {
7878 bytes.push(carry & 0xff)
7879
7880 carry >>= 8
7881 }
ebd8d4e8
IC
7882 }
7883
ab78acc6
IC
7884 // deal with leading zeros
7885 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7886
ab78acc6 7887 return bytes.reverse()
ebd8d4e8
IC
7888}
7889
7890module.exports = {
7891 encode: encode,
7892 decode: decode
7893}
7894
ab78acc6 7895},{}],31:[function(require,module,exports){
ebd8d4e8 7896(function (Buffer){
ab78acc6
IC
7897'use strict'
7898
7899var base58 = require('bs58')
7900var createHash = require('create-hash')
7901
7902// SHA256(SHA256(buffer))
7903function sha256x2 (buffer) {
7904 buffer = createHash('sha256').update(buffer).digest()
7905 return createHash('sha256').update(buffer).digest()
7906}
7907
7908// Encode a buffer as a base58-check encoded string
7909function encode (payload) {
7910 var checksum = sha256x2(payload).slice(0, 4)
7911
7912 return base58.encode(Buffer.concat([
7913 payload,
7914 checksum
7915 ]))
7916}
7917
7918// Decode a base58-check encoded string to a buffer
7919function decode (string) {
7920 var buffer = new Buffer(base58.decode(string))
7921
7922 var payload = buffer.slice(0, -4)
7923 var checksum = buffer.slice(-4)
7924 var newChecksum = sha256x2(payload).slice(0, 4)
7925
7926 for (var i = 0; i < newChecksum.length; ++i) {
7927 if (newChecksum[i] === checksum[i]) continue
7928
7929 throw new Error('Invalid checksum')
ebd8d4e8 7930 }
ab78acc6
IC
7931
7932 return payload
ebd8d4e8
IC
7933}
7934
ab78acc6
IC
7935module.exports = {
7936 encode: encode,
7937 decode: decode
ebd8d4e8
IC
7938}
7939
ab78acc6
IC
7940}).call(this,require("buffer").Buffer)
7941},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7942(function (Buffer){
ab78acc6
IC
7943'use strict';
7944var inherits = require('inherits')
7945var md5 = require('./md5')
7946var rmd160 = require('ripemd160')
7947var sha = require('sha.js')
ebd8d4e8 7948
ab78acc6 7949var Transform = require('stream').Transform
ebd8d4e8 7950
ab78acc6
IC
7951function HashNoConstructor(hash) {
7952 Transform.call(this)
ebd8d4e8 7953
ab78acc6
IC
7954 this._hash = hash
7955 this.buffers = []
7956}
ebd8d4e8 7957
ab78acc6 7958inherits(HashNoConstructor, Transform)
ebd8d4e8 7959
ab78acc6
IC
7960HashNoConstructor.prototype._transform = function (data, _, next) {
7961 this.buffers.push(data)
ebd8d4e8 7962
ab78acc6
IC
7963 next()
7964}
ebd8d4e8 7965
ab78acc6
IC
7966HashNoConstructor.prototype._flush = function (next) {
7967 this.push(this.digest())
7968 next()
7969}
7970
7971HashNoConstructor.prototype.update = function (data, enc) {
7972 if (typeof data === 'string') {
7973 data = new Buffer(data, enc)
ebd8d4e8
IC
7974 }
7975
ab78acc6
IC
7976 this.buffers.push(data)
7977 return this
7978}
7979
7980HashNoConstructor.prototype.digest = function (enc) {
7981 var buf = Buffer.concat(this.buffers)
7982 var r = this._hash(buf)
7983 this.buffers = null
7984
7985 return enc ? r.toString(enc) : r
7986}
7987
7988function Hash(hash) {
7989 Transform.call(this)
7990
7991 this._hash = hash
7992}
7993
7994inherits(Hash, Transform)
7995
7996Hash.prototype._transform = function (data, enc, next) {
7997 if (enc) data = new Buffer(data, enc)
7998
7999 this._hash.update(data)
8000
8001 next()
ebd8d4e8
IC
8002}
8003
ab78acc6
IC
8004Hash.prototype._flush = function (next) {
8005 this.push(this._hash.digest())
8006 this._hash = null
8007
8008 next()
8009}
8010
8011Hash.prototype.update = function (data, enc) {
8012 if (typeof data === 'string') {
8013 data = new Buffer(data, enc)
8014 }
8015
8016 this._hash.update(data)
ebd8d4e8
IC
8017 return this
8018}
8019
ab78acc6
IC
8020Hash.prototype.digest = function (enc) {
8021 var outData = this._hash.digest()
8022
8023 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
8024}
8025
ab78acc6
IC
8026module.exports = function createHash (alg) {
8027 if ('md5' === alg) return new HashNoConstructor(md5)
8028 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8029
8030 return new Hash(sha(alg))
8031}
ebd8d4e8 8032
ab78acc6
IC
8033}).call(this,require("buffer").Buffer)
8034},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 8035(function (Buffer){
ab78acc6 8036'use strict';
ebd8d4e8
IC
8037var intSize = 4;
8038var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8039var chrsz = 8;
8040
8041function toArray(buf, bigEndian) {
8042 if ((buf.length % intSize) !== 0) {
8043 var len = buf.length + (intSize - (buf.length % intSize));
8044 buf = Buffer.concat([buf, zeroBuffer], len);
8045 }
8046
8047 var arr = [];
8048 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8049 for (var i = 0; i < buf.length; i += intSize) {
8050 arr.push(fn.call(buf, i));
8051 }
8052 return arr;
8053}
8054
8055function toBuffer(arr, size, bigEndian) {
8056 var buf = new Buffer(size);
8057 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8058 for (var i = 0; i < arr.length; i++) {
8059 fn.call(buf, arr[i], i * 4, true);
8060 }
8061 return buf;
8062}
8063
8064function hash(buf, fn, hashSize, bigEndian) {
8065 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8066 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8067 return toBuffer(arr, hashSize, bigEndian);
8068}
ab78acc6
IC
8069exports.hash = hash;
8070}).call(this,require("buffer").Buffer)
8071},{"buffer":7}],34:[function(require,module,exports){
8072'use strict';
ebd8d4e8
IC
8073/*
8074 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8075 * Digest Algorithm, as defined in RFC 1321.
8076 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8077 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8078 * Distributed under the BSD License
8079 * See http://pajhome.org.uk/crypt/md5 for more info.
8080 */
8081
ab78acc6 8082var helpers = require('./helpers');
ebd8d4e8
IC
8083
8084/*
8085 * Calculate the MD5 of an array of little-endian words, and a bit length
8086 */
8087function core_md5(x, len)
8088{
8089 /* append padding */
8090 x[len >> 5] |= 0x80 << ((len) % 32);
8091 x[(((len + 64) >>> 9) << 4) + 14] = len;
8092
8093 var a = 1732584193;
8094 var b = -271733879;
8095 var c = -1732584194;
8096 var d = 271733878;
8097
8098 for(var i = 0; i < x.length; i += 16)
8099 {
8100 var olda = a;
8101 var oldb = b;
8102 var oldc = c;
8103 var oldd = d;
8104
8105 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8106 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8107 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8108 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8109 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8110 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8111 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8112 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8113 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8114 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8115 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8116 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8117 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8118 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8119 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8120 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8121
8122 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8123 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8124 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8125 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8126 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8127 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8128 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8129 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8130 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8131 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8132 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8133 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8134 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8135 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8136 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8137 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8138
8139 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8140 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8141 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8142 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8143 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8144 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8145 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8146 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8147 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8148 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8149 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8150 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8151 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8152 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8153 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8154 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8155
8156 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8157 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8158 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8159 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8160 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8161 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8162 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8163 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8164 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8165 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8166 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8167 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8168 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8169 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8170 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8171 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8172
8173 a = safe_add(a, olda);
8174 b = safe_add(b, oldb);
8175 c = safe_add(c, oldc);
8176 d = safe_add(d, oldd);
8177 }
8178 return Array(a, b, c, d);
8179
8180}
8181
8182/*
8183 * These functions implement the four basic operations the algorithm uses.
8184 */
8185function md5_cmn(q, a, b, x, s, t)
8186{
8187 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8188}
8189function md5_ff(a, b, c, d, x, s, t)
8190{
8191 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8192}
8193function md5_gg(a, b, c, d, x, s, t)
8194{
8195 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8196}
8197function md5_hh(a, b, c, d, x, s, t)
8198{
8199 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8200}
8201function md5_ii(a, b, c, d, x, s, t)
8202{
8203 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8204}
8205
8206/*
8207 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8208 * to work around bugs in some JS interpreters.
8209 */
8210function safe_add(x, y)
8211{
8212 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8213 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8214 return (msw << 16) | (lsw & 0xFFFF);
8215}
8216
8217/*
8218 * Bitwise rotate a 32-bit number to the left.
8219 */
8220function bit_rol(num, cnt)
8221{
8222 return (num << cnt) | (num >>> (32 - cnt));
8223}
8224
8225module.exports = function md5(buf) {
8226 return helpers.hash(buf, core_md5, 16);
8227};
ab78acc6
IC
8228},{"./helpers":33}],35:[function(require,module,exports){
8229arguments[4][12][0].apply(exports,arguments)
8230},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8231(function (Buffer){
ebd8d4e8
IC
8232/*
8233CryptoJS v3.1.2
8234code.google.com/p/crypto-js
8235(c) 2009-2013 by Jeff Mott. All rights reserved.
8236code.google.com/p/crypto-js/wiki/License
8237*/
8238/** @preserve
8239(c) 2012 by Cédric Mesnil. All rights reserved.
8240
8241Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8242
8243 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8244 - 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.
8245
8246THIS 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.
8247*/
8248
ab78acc6 8249// constants table
ebd8d4e8 8250var zl = [
ab78acc6
IC
8251 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8252 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8253 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8254 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8255 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8256]
8257
ebd8d4e8 8258var zr = [
ab78acc6
IC
8259 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8260 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8261 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8262 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8263 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8264]
8265
ebd8d4e8 8266var sl = [
ab78acc6
IC
8267 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8268 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8269 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8270 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8271 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8272]
8273
ebd8d4e8 8274var sr = [
ab78acc6
IC
8275 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8276 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8277 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8278 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8279 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8280]
ebd8d4e8 8281
ab78acc6
IC
8282var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8283var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8284
ab78acc6
IC
8285function bytesToWords (bytes) {
8286 var words = []
ebd8d4e8 8287 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8288 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8289 }
ab78acc6
IC
8290 return words
8291}
ebd8d4e8 8292
ab78acc6
IC
8293function wordsToBytes (words) {
8294 var bytes = []
ebd8d4e8 8295 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8296 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8297 }
ab78acc6
IC
8298 return bytes
8299}
ebd8d4e8 8300
ab78acc6
IC
8301function processBlock (H, M, offset) {
8302 // swap endian
ebd8d4e8 8303 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8304 var offset_i = offset + i
8305 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8306
8307 // Swap
8308 M[offset_i] = (
ab78acc6
IC
8309 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8310 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8311 )
ebd8d4e8
IC
8312 }
8313
8314 // Working variables
ab78acc6
IC
8315 var al, bl, cl, dl, el
8316 var ar, br, cr, dr, er
8317
8318 ar = al = H[0]
8319 br = bl = H[1]
8320 cr = cl = H[2]
8321 dr = dl = H[3]
8322 er = el = H[4]
8323
8324 // computation
8325 var t
8326 for (i = 0; i < 80; i += 1) {
8327 t = (al + M[offset + zl[i]]) | 0
8328 if (i < 16) {
8329 t += f1(bl, cl, dl) + hl[0]
8330 } else if (i < 32) {
8331 t += f2(bl, cl, dl) + hl[1]
8332 } else if (i < 48) {
8333 t += f3(bl, cl, dl) + hl[2]
8334 } else if (i < 64) {
8335 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8336 } else {// if (i<80) {
ab78acc6
IC
8337 t += f5(bl, cl, dl) + hl[4]
8338 }
8339 t = t | 0
8340 t = rotl(t, sl[i])
8341 t = (t + el) | 0
8342 al = el
8343 el = dl
8344 dl = rotl(cl, 10)
8345 cl = bl
8346 bl = t
8347
8348 t = (ar + M[offset + zr[i]]) | 0
8349 if (i < 16) {
8350 t += f5(br, cr, dr) + hr[0]
8351 } else if (i < 32) {
8352 t += f4(br, cr, dr) + hr[1]
8353 } else if (i < 48) {
8354 t += f3(br, cr, dr) + hr[2]
8355 } else if (i < 64) {
8356 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8357 } else {// if (i<80) {
ab78acc6 8358 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8359 }
ebd8d4e8 8360
ab78acc6
IC
8361 t = t | 0
8362 t = rotl(t, sr[i])
8363 t = (t + er) | 0
8364 ar = er
8365 er = dr
8366 dr = rotl(cr, 10)
8367 cr = br
8368 br = t
8369 }
8370
8371 // intermediate hash value
8372 t = (H[1] + cl + dr) | 0
8373 H[1] = (H[2] + dl + er) | 0
8374 H[2] = (H[3] + el + ar) | 0
8375 H[3] = (H[4] + al + br) | 0
8376 H[4] = (H[0] + bl + cr) | 0
8377 H[0] = t
ebd8d4e8
IC
8378}
8379
ab78acc6
IC
8380function f1 (x, y, z) {
8381 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8382}
8383
ab78acc6
IC
8384function f2 (x, y, z) {
8385 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8386}
8387
ab78acc6
IC
8388function f3 (x, y, z) {
8389 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8390}
8391
ab78acc6
IC
8392function f4 (x, y, z) {
8393 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8394}
8395
ab78acc6
IC
8396function f5 (x, y, z) {
8397 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8398}
8399
ab78acc6
IC
8400function rotl (x, n) {
8401 return (x << n) | (x >>> (32 - n))
8402}
8403
8404function ripemd160 (message) {
8405 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8406
ab78acc6
IC
8407 if (typeof message === 'string') {
8408 message = new Buffer(message, 'utf8')
8409 }
ebd8d4e8 8410
ab78acc6 8411 var m = bytesToWords(message)
ebd8d4e8 8412
ab78acc6
IC
8413 var nBitsLeft = message.length * 8
8414 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8415
8416 // Add padding
ab78acc6 8417 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8418 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8419 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8420 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8421 )
ebd8d4e8 8422
ab78acc6
IC
8423 for (var i = 0; i < m.length; i += 16) {
8424 processBlock(H, m, i)
ebd8d4e8
IC
8425 }
8426
ab78acc6
IC
8427 // swap endian
8428 for (i = 0; i < 5; i++) {
8429 // shortcut
8430 var H_i = H[i]
ebd8d4e8
IC
8431
8432 // Swap
ab78acc6
IC
8433 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8434 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8435 }
8436
ab78acc6
IC
8437 var digestbytes = wordsToBytes(H)
8438 return new Buffer(digestbytes)
ebd8d4e8
IC
8439}
8440
ab78acc6
IC
8441module.exports = ripemd160
8442
8443}).call(this,require("buffer").Buffer)
8444},{"buffer":7}],37:[function(require,module,exports){
8445(function (Buffer){
8446// prototype class for hash functions
8447function Hash (blockSize, finalSize) {
8448 this._block = new Buffer(blockSize)
8449 this._finalSize = finalSize
8450 this._blockSize = blockSize
8451 this._len = 0
8452 this._s = 0
8453}
ebd8d4e8 8454
ab78acc6
IC
8455Hash.prototype.update = function (data, enc) {
8456 if (typeof data === 'string') {
8457 enc = enc || 'utf8'
8458 data = new Buffer(data, enc)
8459 }
ebd8d4e8 8460
ab78acc6
IC
8461 var l = this._len += data.length
8462 var s = this._s || 0
8463 var f = 0
8464 var buffer = this._block
ebd8d4e8 8465
ab78acc6
IC
8466 while (s < l) {
8467 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8468 var ch = (t - f)
ebd8d4e8 8469
ab78acc6
IC
8470 for (var i = 0; i < ch; i++) {
8471 buffer[(s % this._blockSize) + i] = data[i + f]
8472 }
8473
8474 s += ch
8475 f += ch
ebd8d4e8 8476
ab78acc6
IC
8477 if ((s % this._blockSize) === 0) {
8478 this._update(buffer)
8479 }
ebd8d4e8 8480 }
ab78acc6
IC
8481 this._s = s
8482
8483 return this
8484}
ebd8d4e8 8485
ab78acc6
IC
8486Hash.prototype.digest = function (enc) {
8487 // Suppose the length of the message M, in bits, is l
8488 var l = this._len * 8
8489
8490 // Append the bit 1 to the end of the message
8491 this._block[this._len % this._blockSize] = 0x80
8492
8493 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8494 this._block.fill(0, this._len % this._blockSize + 1)
8495
8496 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8497 this._update(this._block)
8498 this._block.fill(0)
ebd8d4e8
IC
8499 }
8500
ab78acc6
IC
8501 // to this append the block which is equal to the number l written in binary
8502 // TODO: handle case where l is > Math.pow(2, 29)
8503 this._block.writeInt32BE(l, this._blockSize - 4)
8504
8505 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8506
ab78acc6
IC
8507 return enc ? hash.toString(enc) : hash
8508}
ebd8d4e8 8509
ab78acc6
IC
8510Hash.prototype._update = function () {
8511 throw new Error('_update must be implemented by subclass')
8512}
ebd8d4e8 8513
ab78acc6 8514module.exports = Hash
ebd8d4e8 8515
ab78acc6
IC
8516}).call(this,require("buffer").Buffer)
8517},{"buffer":7}],38:[function(require,module,exports){
8518var exports = module.exports = function SHA (algorithm) {
8519 algorithm = algorithm.toLowerCase()
ebd8d4e8 8520
ab78acc6
IC
8521 var Algorithm = exports[algorithm]
8522 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8523
ab78acc6
IC
8524 return new Algorithm()
8525}
8526
8527exports.sha = require('./sha')
8528exports.sha1 = require('./sha1')
8529exports.sha224 = require('./sha224')
8530exports.sha256 = require('./sha256')
8531exports.sha384 = require('./sha384')
8532exports.sha512 = require('./sha512')
8533
8534},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8535(function (Buffer){
8536/*
8537 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8538 * in FIPS PUB 180-1
8539 * This source code is derived from sha1.js of the same repository.
8540 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8541 * operation was added.
8542 */
ebd8d4e8 8543
ab78acc6
IC
8544var inherits = require('inherits')
8545var Hash = require('./hash')
ebd8d4e8 8546
ab78acc6 8547var W = new Array(80)
ebd8d4e8 8548
ab78acc6
IC
8549function Sha () {
8550 this.init()
8551 this._w = W
ebd8d4e8 8552
ab78acc6
IC
8553 Hash.call(this, 64, 56)
8554}
ebd8d4e8 8555
ab78acc6 8556inherits(Sha, Hash)
ebd8d4e8 8557
ab78acc6
IC
8558Sha.prototype.init = function () {
8559 this._a = 0x67452301 | 0
8560 this._b = 0xefcdab89 | 0
8561 this._c = 0x98badcfe | 0
8562 this._d = 0x10325476 | 0
8563 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8564
ab78acc6
IC
8565 return this
8566}
8567
8568/*
8569 * Bitwise rotate a 32-bit number to the left.
8570 */
8571function rol (num, cnt) {
8572 return (num << cnt) | (num >>> (32 - cnt))
8573}
8574
8575Sha.prototype._update = function (M) {
8576 var W = this._w
8577
8578 var a = this._a
8579 var b = this._b
8580 var c = this._c
8581 var d = this._d
8582 var e = this._e
ebd8d4e8 8583
ab78acc6
IC
8584 var j = 0, k
8585
8586 /*
8587 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8588 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8589 */
8590 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8591 function loop (w, f) {
8592 W[j] = w
8593
8594 var t = rol(a, 5) + f + e + w + k
8595
8596 e = d
8597 d = c
8598 c = rol(b, 30)
8599 b = a
8600 a = t
8601 j++
ebd8d4e8
IC
8602 }
8603
ab78acc6
IC
8604 k = 1518500249
8605 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8606 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8607 k = 1859775393
8608 while (j < 40) loop(calcW(), b ^ c ^ d)
8609 k = -1894007588
8610 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8611 k = -899497514
8612 while (j < 80) loop(calcW(), b ^ c ^ d)
8613
8614 this._a = (a + this._a) | 0
8615 this._b = (b + this._b) | 0
8616 this._c = (c + this._c) | 0
8617 this._d = (d + this._d) | 0
8618 this._e = (e + this._e) | 0
ebd8d4e8
IC
8619}
8620
ab78acc6
IC
8621Sha.prototype._hash = function () {
8622 var H = new Buffer(20)
8623
8624 H.writeInt32BE(this._a | 0, 0)
8625 H.writeInt32BE(this._b | 0, 4)
8626 H.writeInt32BE(this._c | 0, 8)
8627 H.writeInt32BE(this._d | 0, 12)
8628 H.writeInt32BE(this._e | 0, 16)
8629
8630 return H
ebd8d4e8
IC
8631}
8632
ab78acc6 8633module.exports = Sha
ebd8d4e8 8634
ebd8d4e8 8635
ab78acc6
IC
8636}).call(this,require("buffer").Buffer)
8637},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8638(function (Buffer){
ebd8d4e8
IC
8639/*
8640 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8641 * in FIPS PUB 180-1
8642 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8643 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8644 * Distributed under the BSD License
8645 * See http://pajhome.org.uk/crypt/md5 for details.
8646 */
ebd8d4e8 8647
ab78acc6
IC
8648var inherits = require('inherits')
8649var Hash = require('./hash')
ebd8d4e8 8650
ab78acc6 8651var W = new Array(80)
ebd8d4e8 8652
ab78acc6
IC
8653function Sha1 () {
8654 this.init()
8655 this._w = W
ebd8d4e8 8656
ab78acc6
IC
8657 Hash.call(this, 64, 56)
8658}
ebd8d4e8 8659
ab78acc6 8660inherits(Sha1, Hash)
ebd8d4e8 8661
ab78acc6
IC
8662Sha1.prototype.init = function () {
8663 this._a = 0x67452301 | 0
8664 this._b = 0xefcdab89 | 0
8665 this._c = 0x98badcfe | 0
8666 this._d = 0x10325476 | 0
8667 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8668
ab78acc6
IC
8669 return this
8670}
ebd8d4e8 8671
ab78acc6
IC
8672/*
8673 * Bitwise rotate a 32-bit number to the left.
8674 */
8675function rol (num, cnt) {
8676 return (num << cnt) | (num >>> (32 - cnt))
8677}
ebd8d4e8 8678
ab78acc6
IC
8679Sha1.prototype._update = function (M) {
8680 var W = this._w
ebd8d4e8 8681
ab78acc6
IC
8682 var a = this._a
8683 var b = this._b
8684 var c = this._c
8685 var d = this._d
8686 var e = this._e
ebd8d4e8 8687
ab78acc6 8688 var j = 0, k
ebd8d4e8 8689
ab78acc6
IC
8690 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8691 function loop (w, f) {
8692 W[j] = w
ebd8d4e8 8693
ab78acc6 8694 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8695
ab78acc6
IC
8696 e = d
8697 d = c
8698 c = rol(b, 30)
8699 b = a
8700 a = t
8701 j++
ebd8d4e8
IC
8702 }
8703
ab78acc6
IC
8704 k = 1518500249
8705 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8706 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8707 k = 1859775393
8708 while (j < 40) loop(calcW(), b ^ c ^ d)
8709 k = -1894007588
8710 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8711 k = -899497514
8712 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8713
ab78acc6
IC
8714 this._a = (a + this._a) | 0
8715 this._b = (b + this._b) | 0
8716 this._c = (c + this._c) | 0
8717 this._d = (d + this._d) | 0
8718 this._e = (e + this._e) | 0
8719}
ebd8d4e8 8720
ab78acc6
IC
8721Sha1.prototype._hash = function () {
8722 var H = new Buffer(20)
ebd8d4e8 8723
ab78acc6
IC
8724 H.writeInt32BE(this._a | 0, 0)
8725 H.writeInt32BE(this._b | 0, 4)
8726 H.writeInt32BE(this._c | 0, 8)
8727 H.writeInt32BE(this._d | 0, 12)
8728 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8729
ab78acc6
IC
8730 return H
8731}
ebd8d4e8 8732
ab78acc6 8733module.exports = Sha1
ebd8d4e8 8734
ab78acc6
IC
8735}).call(this,require("buffer").Buffer)
8736},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8737(function (Buffer){
8738/**
8739 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8740 * in FIPS 180-2
8741 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8742 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8743 *
8744 */
ebd8d4e8 8745
ab78acc6
IC
8746var inherits = require('inherits')
8747var Sha256 = require('./sha256')
8748var Hash = require('./hash')
ebd8d4e8 8749
ab78acc6 8750var W = new Array(64)
ebd8d4e8 8751
ab78acc6
IC
8752function Sha224 () {
8753 this.init()
ebd8d4e8 8754
ab78acc6 8755 this._w = W // new Array(64)
ebd8d4e8 8756
ab78acc6
IC
8757 Hash.call(this, 64, 56)
8758}
ebd8d4e8 8759
ab78acc6 8760inherits(Sha224, Sha256)
ebd8d4e8 8761
ab78acc6
IC
8762Sha224.prototype.init = function () {
8763 this._a = 0xc1059ed8 | 0
8764 this._b = 0x367cd507 | 0
8765 this._c = 0x3070dd17 | 0
8766 this._d = 0xf70e5939 | 0
8767 this._e = 0xffc00b31 | 0
8768 this._f = 0x68581511 | 0
8769 this._g = 0x64f98fa7 | 0
8770 this._h = 0xbefa4fa4 | 0
8771
8772 return this
8773}
8774
8775Sha224.prototype._hash = function () {
8776 var H = new Buffer(28)
8777
8778 H.writeInt32BE(this._a, 0)
8779 H.writeInt32BE(this._b, 4)
8780 H.writeInt32BE(this._c, 8)
8781 H.writeInt32BE(this._d, 12)
8782 H.writeInt32BE(this._e, 16)
8783 H.writeInt32BE(this._f, 20)
8784 H.writeInt32BE(this._g, 24)
8785
8786 return H
ebd8d4e8
IC
8787}
8788
ab78acc6 8789module.exports = Sha224
ebd8d4e8 8790
ab78acc6
IC
8791}).call(this,require("buffer").Buffer)
8792},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8793(function (Buffer){
ebd8d4e8
IC
8794/**
8795 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8796 * in FIPS 180-2
8797 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8798 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8799 *
8800 */
8801
ab78acc6
IC
8802var inherits = require('inherits')
8803var Hash = require('./hash')
8804
8805var K = [
8806 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8807 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8808 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8809 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8810 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8811 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8812 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8813 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8814 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8815 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8816 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8817 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8818 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8819 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8820 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8821 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8822]
8823
8824var W = new Array(64)
8825
8826function Sha256 () {
8827 this.init()
8828
8829 this._w = W // new Array(64)
8830
8831 Hash.call(this, 64, 56)
8832}
8833
8834inherits(Sha256, Hash)
8835
8836Sha256.prototype.init = function () {
8837 this._a = 0x6a09e667 | 0
8838 this._b = 0xbb67ae85 | 0
8839 this._c = 0x3c6ef372 | 0
8840 this._d = 0xa54ff53a | 0
8841 this._e = 0x510e527f | 0
8842 this._f = 0x9b05688c | 0
8843 this._g = 0x1f83d9ab | 0
8844 this._h = 0x5be0cd19 | 0
ebd8d4e8 8845
ab78acc6
IC
8846 return this
8847}
ebd8d4e8 8848
ab78acc6
IC
8849function S (X, n) {
8850 return (X >>> n) | (X << (32 - n))
8851}
ebd8d4e8 8852
ab78acc6
IC
8853function R (X, n) {
8854 return (X >>> n)
8855}
ebd8d4e8 8856
ab78acc6
IC
8857function Ch (x, y, z) {
8858 return ((x & y) ^ ((~x) & z))
8859}
ebd8d4e8 8860
ab78acc6
IC
8861function Maj (x, y, z) {
8862 return ((x & y) ^ (x & z) ^ (y & z))
8863}
ebd8d4e8 8864
ab78acc6
IC
8865function Sigma0256 (x) {
8866 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8867}
ebd8d4e8 8868
ab78acc6
IC
8869function Sigma1256 (x) {
8870 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8871}
ebd8d4e8 8872
ab78acc6
IC
8873function Gamma0256 (x) {
8874 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8875}
ebd8d4e8 8876
ab78acc6
IC
8877function Gamma1256 (x) {
8878 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8879}
ebd8d4e8 8880
ab78acc6
IC
8881Sha256.prototype._update = function (M) {
8882 var W = this._w
ebd8d4e8 8883
ab78acc6
IC
8884 var a = this._a | 0
8885 var b = this._b | 0
8886 var c = this._c | 0
8887 var d = this._d | 0
8888 var e = this._e | 0
8889 var f = this._f | 0
8890 var g = this._g | 0
8891 var h = this._h | 0
ebd8d4e8 8892
ab78acc6 8893 var j = 0
ebd8d4e8 8894
ab78acc6
IC
8895 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8896 function loop (w) {
8897 W[j] = w
ebd8d4e8 8898
ab78acc6
IC
8899 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8900 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8901
ab78acc6
IC
8902 h = g
8903 g = f
8904 f = e
8905 e = d + T1
8906 d = c
8907 c = b
8908 b = a
8909 a = T1 + T2
ebd8d4e8 8910
ab78acc6 8911 j++
ebd8d4e8
IC
8912 }
8913
ab78acc6
IC
8914 while (j < 16) loop(M.readInt32BE(j * 4))
8915 while (j < 64) loop(calcW())
ebd8d4e8 8916
ab78acc6
IC
8917 this._a = (a + this._a) | 0
8918 this._b = (b + this._b) | 0
8919 this._c = (c + this._c) | 0
8920 this._d = (d + this._d) | 0
8921 this._e = (e + this._e) | 0
8922 this._f = (f + this._f) | 0
8923 this._g = (g + this._g) | 0
8924 this._h = (h + this._h) | 0
8925}
ebd8d4e8 8926
ab78acc6
IC
8927Sha256.prototype._hash = function () {
8928 var H = new Buffer(32)
ebd8d4e8 8929
ab78acc6
IC
8930 H.writeInt32BE(this._a, 0)
8931 H.writeInt32BE(this._b, 4)
8932 H.writeInt32BE(this._c, 8)
8933 H.writeInt32BE(this._d, 12)
8934 H.writeInt32BE(this._e, 16)
8935 H.writeInt32BE(this._f, 20)
8936 H.writeInt32BE(this._g, 24)
8937 H.writeInt32BE(this._h, 28)
ebd8d4e8 8938
ab78acc6
IC
8939 return H
8940}
ebd8d4e8 8941
ab78acc6 8942module.exports = Sha256
ebd8d4e8 8943
ab78acc6
IC
8944}).call(this,require("buffer").Buffer)
8945},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8946(function (Buffer){
8947var inherits = require('inherits')
8948var SHA512 = require('./sha512')
8949var Hash = require('./hash')
ebd8d4e8 8950
ab78acc6 8951var W = new Array(160)
ebd8d4e8 8952
ab78acc6
IC
8953function Sha384 () {
8954 this.init()
8955 this._w = W
ebd8d4e8 8956
ab78acc6
IC
8957 Hash.call(this, 128, 112)
8958}
ebd8d4e8 8959
ab78acc6 8960inherits(Sha384, SHA512)
ebd8d4e8 8961
ab78acc6
IC
8962Sha384.prototype.init = function () {
8963 this._a = 0xcbbb9d5d | 0
8964 this._b = 0x629a292a | 0
8965 this._c = 0x9159015a | 0
8966 this._d = 0x152fecd8 | 0
8967 this._e = 0x67332667 | 0
8968 this._f = 0x8eb44a87 | 0
8969 this._g = 0xdb0c2e0d | 0
8970 this._h = 0x47b5481d | 0
ebd8d4e8 8971
ab78acc6
IC
8972 this._al = 0xc1059ed8 | 0
8973 this._bl = 0x367cd507 | 0
8974 this._cl = 0x3070dd17 | 0
8975 this._dl = 0xf70e5939 | 0
8976 this._el = 0xffc00b31 | 0
8977 this._fl = 0x68581511 | 0
8978 this._gl = 0x64f98fa7 | 0
8979 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8980
ab78acc6 8981 return this
ebd8d4e8
IC
8982}
8983
ab78acc6
IC
8984Sha384.prototype._hash = function () {
8985 var H = new Buffer(48)
ebd8d4e8 8986
ab78acc6
IC
8987 function writeInt64BE (h, l, offset) {
8988 H.writeInt32BE(h, offset)
8989 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8990 }
ebd8d4e8 8991
ab78acc6
IC
8992 writeInt64BE(this._a, this._al, 0)
8993 writeInt64BE(this._b, this._bl, 8)
8994 writeInt64BE(this._c, this._cl, 16)
8995 writeInt64BE(this._d, this._dl, 24)
8996 writeInt64BE(this._e, this._el, 32)
8997 writeInt64BE(this._f, this._fl, 40)
8998
8999 return H
ebd8d4e8
IC
9000}
9001
ab78acc6 9002module.exports = Sha384
ebd8d4e8 9003
ab78acc6
IC
9004}).call(this,require("buffer").Buffer)
9005},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 9006(function (Buffer){
ab78acc6
IC
9007var inherits = require('inherits')
9008var Hash = require('./hash')
9009
9010var K = [
9011 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9012 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9013 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9014 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9015 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9016 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9017 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9018 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9019 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9020 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9021 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9022 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9023 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9024 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9025 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9026 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9027 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9028 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9029 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9030 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9031 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9032 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9033 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9034 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9035 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9036 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9037 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9038 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9039 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9040 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9041 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9042 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9043 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9044 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9045 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9046 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9047 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9048 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9049 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9050 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9051]
9052
9053var W = new Array(160)
9054
9055function Sha512 () {
9056 this.init()
9057 this._w = W
9058
9059 Hash.call(this, 128, 112)
9060}
9061
9062inherits(Sha512, Hash)
9063
9064Sha512.prototype.init = function () {
9065 this._a = 0x6a09e667 | 0
9066 this._b = 0xbb67ae85 | 0
9067 this._c = 0x3c6ef372 | 0
9068 this._d = 0xa54ff53a | 0
9069 this._e = 0x510e527f | 0
9070 this._f = 0x9b05688c | 0
9071 this._g = 0x1f83d9ab | 0
9072 this._h = 0x5be0cd19 | 0
9073
9074 this._al = 0xf3bcc908 | 0
9075 this._bl = 0x84caa73b | 0
9076 this._cl = 0xfe94f82b | 0
9077 this._dl = 0x5f1d36f1 | 0
9078 this._el = 0xade682d1 | 0
9079 this._fl = 0x2b3e6c1f | 0
9080 this._gl = 0xfb41bd6b | 0
9081 this._hl = 0x137e2179 | 0
ebd8d4e8 9082
ab78acc6 9083 return this
ebd8d4e8
IC
9084}
9085
ab78acc6
IC
9086function S (X, Xl, n) {
9087 return (X >>> n) | (Xl << (32 - n))
9088}
9089
9090function Ch (x, y, z) {
9091 return ((x & y) ^ ((~x) & z))
9092}
9093
9094function Maj (x, y, z) {
9095 return ((x & y) ^ (x & z) ^ (y & z))
9096}
9097
9098Sha512.prototype._update = function (M) {
9099 var W = this._w
9100
9101 var a = this._a | 0
9102 var b = this._b | 0
9103 var c = this._c | 0
9104 var d = this._d | 0
9105 var e = this._e | 0
9106 var f = this._f | 0
9107 var g = this._g | 0
9108 var h = this._h | 0
9109
9110 var al = this._al | 0
9111 var bl = this._bl | 0
9112 var cl = this._cl | 0
9113 var dl = this._dl | 0
9114 var el = this._el | 0
9115 var fl = this._fl | 0
9116 var gl = this._gl | 0
9117 var hl = this._hl | 0
9118
9119 var i = 0, j = 0
9120 var Wi, Wil
9121 function calcW () {
9122 var x = W[j - 15 * 2]
9123 var xl = W[j - 15 * 2 + 1]
9124 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9125 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9126
9127 x = W[j - 2 * 2]
9128 xl = W[j - 2 * 2 + 1]
9129 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9130 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9131
9132 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9133 var Wi7 = W[j - 7 * 2]
9134 var Wi7l = W[j - 7 * 2 + 1]
9135
9136 var Wi16 = W[j - 16 * 2]
9137 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9138
ab78acc6
IC
9139 Wil = gamma0l + Wi7l
9140 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9141 Wil = Wil + gamma1l
9142 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9143 Wil = Wil + Wi16l
9144 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9145 }
9146
9147 function loop () {
9148 W[j] = Wi
9149 W[j + 1] = Wil
ebd8d4e8 9150
ab78acc6
IC
9151 var maj = Maj(a, b, c)
9152 var majl = Maj(al, bl, cl)
ebd8d4e8 9153
ab78acc6
IC
9154 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9155 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9156 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9157 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9158
ab78acc6
IC
9159 // t1 = h + sigma1 + ch + K[i] + W[i]
9160 var Ki = K[j]
9161 var Kil = K[j + 1]
ebd8d4e8 9162
ab78acc6
IC
9163 var ch = Ch(e, f, g)
9164 var chl = Ch(el, fl, gl)
ebd8d4e8 9165
ab78acc6
IC
9166 var t1l = hl + sigma1l
9167 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9168 t1l = t1l + chl
9169 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9170 t1l = t1l + Kil
9171 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9172 t1l = t1l + Wil
9173 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9174
ab78acc6
IC
9175 // t2 = sigma0 + maj
9176 var t2l = sigma0l + majl
9177 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9178
ab78acc6
IC
9179 h = g
9180 hl = gl
9181 g = f
9182 gl = fl
9183 f = e
9184 fl = el
9185 el = (dl + t1l) | 0
9186 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9187 d = c
9188 dl = cl
9189 c = b
9190 cl = bl
9191 b = a
9192 bl = al
9193 al = (t1l + t2l) | 0
9194 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9195
9196 i++
9197 j += 2
9198 }
9199
9200 while (i < 16) {
9201 Wi = M.readInt32BE(j * 4)
9202 Wil = M.readInt32BE(j * 4 + 4)
9203
9204 loop()
9205 }
9206
9207 while (i < 80) {
9208 calcW()
9209 loop()
9210 }
9211
9212 this._al = (this._al + al) | 0
9213 this._bl = (this._bl + bl) | 0
9214 this._cl = (this._cl + cl) | 0
9215 this._dl = (this._dl + dl) | 0
9216 this._el = (this._el + el) | 0
9217 this._fl = (this._fl + fl) | 0
9218 this._gl = (this._gl + gl) | 0
9219 this._hl = (this._hl + hl) | 0
9220
9221 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9222 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9223 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9224 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9225 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9226 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9227 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9228 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9229}
9230
9231Sha512.prototype._hash = function () {
9232 var H = new Buffer(64)
9233
9234 function writeInt64BE (h, l, offset) {
9235 H.writeInt32BE(h, offset)
9236 H.writeInt32BE(l, offset + 4)
9237 }
9238
9239 writeInt64BE(this._a, this._al, 0)
9240 writeInt64BE(this._b, this._bl, 8)
9241 writeInt64BE(this._c, this._cl, 16)
9242 writeInt64BE(this._d, this._dl, 24)
9243 writeInt64BE(this._e, this._el, 32)
9244 writeInt64BE(this._f, this._fl, 40)
9245 writeInt64BE(this._g, this._gl, 48)
9246 writeInt64BE(this._h, this._hl, 56)
9247
9248 return H
9249}
9250
9251module.exports = Sha512
9252
9253}).call(this,require("buffer").Buffer)
9254},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9255(function (Buffer){
9256'use strict';
9257var createHash = require('create-hash/browser');
9258var inherits = require('inherits')
ebd8d4e8 9259
ab78acc6 9260var Transform = require('stream').Transform
ebd8d4e8 9261
ab78acc6
IC
9262var ZEROS = new Buffer(128)
9263ZEROS.fill(0)
ebd8d4e8 9264
ab78acc6
IC
9265function Hmac(alg, key) {
9266 Transform.call(this)
ebd8d4e8 9267
ab78acc6
IC
9268 if (typeof key === 'string') {
9269 key = new Buffer(key)
9270 }
ebd8d4e8 9271
ab78acc6 9272 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9273
ab78acc6
IC
9274 this._alg = alg
9275 this._key = key
ebd8d4e8 9276
ab78acc6
IC
9277 if (key.length > blocksize) {
9278 key = createHash(alg).update(key).digest()
ebd8d4e8 9279
ab78acc6
IC
9280 } else if (key.length < blocksize) {
9281 key = Buffer.concat([key, ZEROS], blocksize)
9282 }
ebd8d4e8 9283
ab78acc6
IC
9284 var ipad = this._ipad = new Buffer(blocksize)
9285 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9286
ab78acc6
IC
9287 for (var i = 0; i < blocksize; i++) {
9288 ipad[i] = key[i] ^ 0x36
9289 opad[i] = key[i] ^ 0x5C
9290 }
ebd8d4e8 9291
ab78acc6
IC
9292 this._hash = createHash(alg).update(ipad)
9293}
ebd8d4e8 9294
ab78acc6 9295inherits(Hmac, Transform)
ebd8d4e8 9296
ab78acc6
IC
9297Hmac.prototype.update = function (data, enc) {
9298 this._hash.update(data, enc)
ebd8d4e8 9299
ab78acc6
IC
9300 return this
9301}
ebd8d4e8 9302
ab78acc6
IC
9303Hmac.prototype._transform = function (data, _, next) {
9304 this._hash.update(data)
ebd8d4e8 9305
ab78acc6
IC
9306 next()
9307}
ebd8d4e8 9308
ab78acc6
IC
9309Hmac.prototype._flush = function (next) {
9310 this.push(this.digest())
ebd8d4e8 9311
ab78acc6
IC
9312 next()
9313}
ebd8d4e8 9314
ab78acc6
IC
9315Hmac.prototype.digest = function (enc) {
9316 var h = this._hash.digest()
ebd8d4e8 9317
ab78acc6
IC
9318 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9319}
ebd8d4e8 9320
ab78acc6
IC
9321module.exports = function createHmac(alg, key) {
9322 return new Hmac(alg, key)
9323}
ebd8d4e8 9324
ab78acc6
IC
9325}).call(this,require("buffer").Buffer)
9326},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9327arguments[4][12][0].apply(exports,arguments)
9328},{"dup":12}],47:[function(require,module,exports){
9329var assert = require('assert')
9330var BigInteger = require('bigi')
ebd8d4e8 9331
ab78acc6 9332var Point = require('./point')
ebd8d4e8
IC
9333
9334function Curve(p, a, b, Gx, Gy, n, h) {
9335 this.p = p
9336 this.a = a
9337 this.b = b
9338 this.G = Point.fromAffine(this, Gx, Gy)
9339 this.n = n
9340 this.h = h
9341
9342 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9343
9344 // result caching
9345 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9346}
9347
9348Curve.prototype.pointFromX = function(isOdd, x) {
9349 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9350 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9351
9352 var y = beta
9353 if (beta.isEven() ^ !isOdd) {
9354 y = this.p.subtract(y) // -y % p
9355 }
9356
9357 return Point.fromAffine(this, x, y)
9358}
9359
9360Curve.prototype.isInfinity = function(Q) {
9361 if (Q === this.infinity) return true
9362
9363 return Q.z.signum() === 0 && Q.y.signum() !== 0
9364}
9365
9366Curve.prototype.isOnCurve = function(Q) {
9367 if (this.isInfinity(Q)) return true
9368
9369 var x = Q.affineX
9370 var y = Q.affineY
9371 var a = this.a
9372 var b = this.b
9373 var p = this.p
9374
9375 // Check that xQ and yQ are integers in the interval [0, p - 1]
9376 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9377 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9378
9379 // and check that y^2 = x^3 + ax + b (mod p)
9380 var lhs = y.square().mod(p)
9381 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9382 return lhs.equals(rhs)
9383}
9384
9385/**
9386 * Validate an elliptic curve point.
9387 *
9388 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9389 */
9390Curve.prototype.validate = function(Q) {
9391 // Check Q != O
9392 assert(!this.isInfinity(Q), 'Point is at infinity')
9393 assert(this.isOnCurve(Q), 'Point is not on the curve')
9394
9395 // Check nQ = O (where Q is a scalar multiple of G)
9396 var nQ = Q.multiply(this.n)
9397 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9398
9399 return true
9400}
9401
9402module.exports = Curve
9403
ab78acc6 9404},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9405module.exports={
9406 "secp128r1": {
9407 "p": "fffffffdffffffffffffffffffffffff",
9408 "a": "fffffffdfffffffffffffffffffffffc",
9409 "b": "e87579c11079f43dd824993c2cee5ed3",
9410 "n": "fffffffe0000000075a30d1b9038a115",
9411 "h": "01",
9412 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9413 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9414 },
9415 "secp160k1": {
9416 "p": "fffffffffffffffffffffffffffffffeffffac73",
9417 "a": "00",
9418 "b": "07",
9419 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9420 "h": "01",
9421 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9422 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9423 },
9424 "secp160r1": {
9425 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9426 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9427 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9428 "n": "0100000000000000000001f4c8f927aed3ca752257",
9429 "h": "01",
9430 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9431 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9432 },
9433 "secp192k1": {
9434 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9435 "a": "00",
9436 "b": "03",
9437 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9438 "h": "01",
9439 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9440 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9441 },
9442 "secp192r1": {
9443 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9444 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9445 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9446 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9447 "h": "01",
9448 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9449 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9450 },
ebd8d4e8
IC
9451 "secp256k1": {
9452 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9453 "a": "00",
9454 "b": "07",
9455 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9456 "h": "01",
9457 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9458 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9459 },
9460 "secp256r1": {
9461 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9462 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9463 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9464 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9465 "h": "01",
9466 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9467 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9468 }
9469}
9470
ab78acc6
IC
9471},{}],49:[function(require,module,exports){
9472var Point = require('./point')
9473var Curve = require('./curve')
ebd8d4e8 9474
ab78acc6 9475var getCurveByName = require('./names')
ebd8d4e8
IC
9476
9477module.exports = {
9478 Curve: Curve,
9479 Point: Point,
9480 getCurveByName: getCurveByName
9481}
9482
ab78acc6
IC
9483},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9484var BigInteger = require('bigi')
ebd8d4e8 9485
ab78acc6
IC
9486var curves = require('./curves')
9487var Curve = require('./curve')
ebd8d4e8
IC
9488
9489function getCurveByName(name) {
9490 var curve = curves[name]
9491 if (!curve) return null
9492
9493 var p = new BigInteger(curve.p, 16)
9494 var a = new BigInteger(curve.a, 16)
9495 var b = new BigInteger(curve.b, 16)
9496 var n = new BigInteger(curve.n, 16)
9497 var h = new BigInteger(curve.h, 16)
9498 var Gx = new BigInteger(curve.Gx, 16)
9499 var Gy = new BigInteger(curve.Gy, 16)
9500
9501 return new Curve(p, a, b, Gx, Gy, n, h)
9502}
9503
9504module.exports = getCurveByName
9505
ab78acc6 9506},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9507(function (Buffer){
ab78acc6
IC
9508var assert = require('assert')
9509var BigInteger = require('bigi')
ebd8d4e8
IC
9510
9511var THREE = BigInteger.valueOf(3)
9512
9513function Point(curve, x, y, z) {
9514 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9515
9516 this.curve = curve
9517 this.x = x
9518 this.y = y
9519 this.z = z
9520 this._zInv = null
9521
9522 this.compressed = true
9523}
9524
9525Object.defineProperty(Point.prototype, 'zInv', {
9526 get: function() {
9527 if (this._zInv === null) {
9528 this._zInv = this.z.modInverse(this.curve.p)
9529 }
9530
9531 return this._zInv
9532 }
9533})
9534
9535Object.defineProperty(Point.prototype, 'affineX', {
9536 get: function() {
9537 return this.x.multiply(this.zInv).mod(this.curve.p)
9538 }
9539})
9540
9541Object.defineProperty(Point.prototype, 'affineY', {
9542 get: function() {
9543 return this.y.multiply(this.zInv).mod(this.curve.p)
9544 }
9545})
9546
9547Point.fromAffine = function(curve, x, y) {
9548 return new Point(curve, x, y, BigInteger.ONE)
9549}
9550
9551Point.prototype.equals = function(other) {
9552 if (other === this) return true
9553 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9554 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9555
9556 // u = Y2 * Z1 - Y1 * Z2
9557 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9558
9559 if (u.signum() !== 0) return false
9560
9561 // v = X2 * Z1 - X1 * Z2
9562 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9563
9564 return v.signum() === 0
9565}
9566
9567Point.prototype.negate = function() {
9568 var y = this.curve.p.subtract(this.y)
9569
9570 return new Point(this.curve, this.x, y, this.z)
9571}
9572
9573Point.prototype.add = function(b) {
9574 if (this.curve.isInfinity(this)) return b
9575 if (this.curve.isInfinity(b)) return this
9576
9577 var x1 = this.x
9578 var y1 = this.y
9579 var x2 = b.x
9580 var y2 = b.y
9581
9582 // u = Y2 * Z1 - Y1 * Z2
9583 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9584 // v = X2 * Z1 - X1 * Z2
9585 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9586
9587 if (v.signum() === 0) {
9588 if (u.signum() === 0) {
9589 return this.twice() // this == b, so double
9590 }
9591
9592 return this.curve.infinity // this = -b, so infinity
9593 }
9594
9595 var v2 = v.square()
9596 var v3 = v2.multiply(v)
9597 var x1v2 = x1.multiply(v2)
9598 var zu2 = u.square().multiply(this.z)
9599
9600 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9601 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9602 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9603 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)
9604 // z3 = v^3 * z1 * z2
9605 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9606
9607 return new Point(this.curve, x3, y3, z3)
9608}
9609
9610Point.prototype.twice = function() {
9611 if (this.curve.isInfinity(this)) return this
9612 if (this.y.signum() === 0) return this.curve.infinity
9613
9614 var x1 = this.x
9615 var y1 = this.y
9616
9617 var y1z1 = y1.multiply(this.z)
9618 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9619 var a = this.curve.a
9620
9621 // w = 3 * x1^2 + a * z1^2
9622 var w = x1.square().multiply(THREE)
9623
9624 if (a.signum() !== 0) {
9625 w = w.add(this.z.square().multiply(a))
9626 }
9627
9628 w = w.mod(this.curve.p)
9629 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9630 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9631 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9632 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9633 // z3 = 8 * (y1 * z1)^3
9634 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9635
9636 return new Point(this.curve, x3, y3, z3)
9637}
9638
9639// Simple NAF (Non-Adjacent Form) multiplication algorithm
9640// TODO: modularize the multiplication algorithm
9641Point.prototype.multiply = function(k) {
9642 if (this.curve.isInfinity(this)) return this
9643 if (k.signum() === 0) return this.curve.infinity
9644
9645 var e = k
9646 var h = e.multiply(THREE)
9647
9648 var neg = this.negate()
9649 var R = this
9650
9651 for (var i = h.bitLength() - 2; i > 0; --i) {
9652 R = R.twice()
9653
9654 var hBit = h.testBit(i)
9655 var eBit = e.testBit(i)
9656
9657 if (hBit != eBit) {
9658 R = R.add(hBit ? this : neg)
9659 }
9660 }
9661
9662 return R
9663}
9664
9665// Compute this*j + x*k (simultaneous multiplication)
9666Point.prototype.multiplyTwo = function(j, x, k) {
9667 var i
9668
9669 if (j.bitLength() > k.bitLength())
9670 i = j.bitLength() - 1
9671 else
9672 i = k.bitLength() - 1
9673
9674 var R = this.curve.infinity
9675 var both = this.add(x)
9676
9677 while (i >= 0) {
9678 R = R.twice()
9679
9680 var jBit = j.testBit(i)
9681 var kBit = k.testBit(i)
9682
9683 if (jBit) {
9684 if (kBit) {
9685 R = R.add(both)
9686
9687 } else {
9688 R = R.add(this)
9689 }
9690
9691 } else {
9692 if (kBit) {
9693 R = R.add(x)
9694 }
9695 }
9696 --i
9697 }
9698
9699 return R
9700}
9701
9702Point.prototype.getEncoded = function(compressed) {
9703 if (compressed == undefined) compressed = this.compressed
9704 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9705
9706 var x = this.affineX
9707 var y = this.affineY
9708
9709 var buffer
9710
9711 // Determine size of q in bytes
9712 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9713
9714 // 0x02/0x03 | X
9715 if (compressed) {
9716 buffer = new Buffer(1 + byteLength)
9717 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9718
9719 // 0x04 | X | Y
9720 } else {
9721 buffer = new Buffer(1 + byteLength + byteLength)
9722 buffer.writeUInt8(0x04, 0)
9723
9724 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9725 }
9726
9727 x.toBuffer(byteLength).copy(buffer, 1)
9728
9729 return buffer
9730}
9731
9732Point.decodeFrom = function(curve, buffer) {
9733 var type = buffer.readUInt8(0)
9734 var compressed = (type !== 4)
9735
ebd8d4e8 9736 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9737 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9738
9739 var Q
9740 if (compressed) {
9741 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9742 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9743
9744 var isOdd = (type === 0x03)
9745 Q = curve.pointFromX(isOdd, x)
9746
9747 } else {
9748 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9749
9750 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9751 Q = Point.fromAffine(curve, x, y)
9752 }
9753
9754 Q.compressed = compressed
9755 return Q
9756}
9757
9758Point.prototype.toString = function () {
9759 if (this.curve.isInfinity(this)) return '(INFINITY)'
9760
9761 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9762}
9763
9764module.exports = Point
9765
ab78acc6
IC
9766}).call(this,require("buffer").Buffer)
9767},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9768(function (process,global,Buffer){
9769'use strict';
ebd8d4e8 9770
ab78acc6
IC
9771var crypto = global.crypto || global.msCrypto
9772if(crypto && crypto.getRandomValues) {
9773 module.exports = randomBytes;
9774} else {
9775 module.exports = oldBrowser;
9776}
9777function randomBytes(size, cb) {
9778 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9779 /* This will not work in older browsers.
9780 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9781 */
9782
9783 crypto.getRandomValues(bytes);
9784 if (typeof cb === 'function') {
9785 return process.nextTick(function () {
9786 cb(null, bytes);
9787 });
ebd8d4e8 9788 }
ab78acc6
IC
9789 return bytes;
9790}
9791function oldBrowser() {
9792 throw new Error(
9793 'secure random number generation not supported by this browser\n'+
9794 'use chrome, FireFox or Internet Explorer 11'
9795 )
ebd8d4e8
IC
9796}
9797
ab78acc6
IC
9798}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9799},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9800(function (Buffer){
9801'use strict';
ebd8d4e8 9802
ab78acc6
IC
9803function getFunctionName(fn) {
9804 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9805}
9806
9807function getTypeTypeName(type) {
9808 if (nativeTypes.Function(type)) {
9809 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9810 }
ab78acc6
IC
9811 if (nativeTypes.Object(type)) return JSON.stringify(type);
9812
9813 return type;
ebd8d4e8
IC
9814}
9815
ab78acc6
IC
9816function getValueTypeName(value) {
9817 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9818
ab78acc6
IC
9819 return getFunctionName(value.constructor);
9820}
9821
9822function tfErrorString(type, value) {
9823 var typeTypeName = getTypeTypeName(type);
9824 var valueTypeName = getValueTypeName(value);
9825
9826 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9827}
9828
9829function tfPropertyErrorString(type, name, value) {
9830 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9831}
9832
9833var nativeTypes = {
9834 Array: (function (_Array) {
9835 function Array(_x) {
9836 return _Array.apply(this, arguments);
9837 }
9838
9839 Array.toString = function () {
9840 return _Array.toString();
9841 };
9842
9843 return Array;
9844 })(function (value) {
9845 return value !== null && value !== undefined && value.constructor === Array;
9846 }),
9847 Boolean: function Boolean(value) {
9848 return typeof value === 'boolean';
9849 },
9850 Buffer: (function (_Buffer) {
9851 function Buffer(_x2) {
9852 return _Buffer.apply(this, arguments);
9853 }
9854
9855 Buffer.toString = function () {
9856 return _Buffer.toString();
9857 };
9858
9859 return Buffer;
9860 })(function (value) {
9861 return Buffer.isBuffer(value);
9862 }),
9863 Function: function Function(value) {
9864 return typeof value === 'function';
9865 },
9866 Null: function Null(value) {
9867 return value === undefined || value === null;
9868 },
9869 Number: function Number(value) {
9870 return typeof value === 'number';
9871 },
9872 Object: function Object(value) {
9873 return typeof value === 'object';
9874 },
9875 String: function String(value) {
9876 return typeof value === 'string';
9877 },
9878 '': function _() {
9879 return true;
ebd8d4e8 9880 }
ab78acc6
IC
9881};
9882
9883function tJSON(type) {
9884 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9885}
9886
ab78acc6
IC
9887function sJSON(type) {
9888 var json = tJSON(type);
9889 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9890}
9891
ab78acc6
IC
9892var otherTypes = {
9893 arrayOf: function arrayOf(type) {
9894 function arrayOf(value, strict) {
9895 try {
9896 return nativeTypes.Array(value) && value.every(function (x) {
9897 return typeforce(type, x, strict);
9898 });
9899 } catch (e) {
9900 return false;
9901 }
9902 }
9903 arrayOf.toJSON = function () {
9904 return [tJSON(type)];
9905 };
9906
9907 return arrayOf;
9908 },
9909
9910 maybe: function maybe(type) {
9911 function maybe(value, strict) {
9912 return nativeTypes.Null(value) || typeforce(type, value, strict);
9913 }
9914 maybe.toJSON = function () {
9915 return '?' + sJSON(type);
9916 };
9917
9918 return maybe;
9919 },
9920
9921 object: function object(type) {
9922 function object(value, strict) {
9923 typeforce(nativeTypes.Object, value, strict);
9924
9925 var propertyName, propertyType, propertyValue;
9926
9927 try {
9928 for (propertyName in type) {
9929 propertyType = type[propertyName];
9930 propertyValue = value[propertyName];
9931
9932 typeforce(propertyType, propertyValue, strict);
9933 }
9934 } catch (e) {
9935 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9936 }
9937
9938 if (strict) {
9939 for (propertyName in value) {
9940 if (type[propertyName]) continue;
9941
9942 throw new TypeError('Unexpected property "' + propertyName + '"');
9943 }
9944 }
9945
9946 return true;
9947 }
9948 object.toJSON = function () {
9949 return type;
9950 };
9951
9952 return object;
9953 },
9954
9955 oneOf: function oneOf() {
9956 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9957 types[_key] = arguments[_key];
9958 }
9959
9960 function oneOf(value, strict) {
9961 return types.some(function (type) {
9962 try {
9963 return typeforce(type, value, strict);
9964 } catch (e) {
9965 return false;
9966 }
9967 });
9968 }
9969 oneOf.toJSON = function () {
9970 return types.map(sJSON).join('|');
9971 };
9972
9973 return oneOf;
9974 },
9975
9976 quacksLike: function quacksLike(type) {
9977 function quacksLike(value, strict) {
9978 return type === getValueTypeName(value);
9979 }
9980 quacksLike.toJSON = function () {
9981 return type;
9982 };
9983
9984 return quacksLike;
9985 },
9986
9987 tuple: function tuple() {
9988 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9989 types[_key2] = arguments[_key2];
9990 }
9991
9992 function tuple(value, strict) {
9993 return types.every(function (type, i) {
9994 return typeforce(type, value[i], strict);
9995 });
9996 }
9997 tuple.toJSON = function () {
9998 return '(' + types.map(sJSON).join(', ') + ')';
9999 };
10000
10001 return tuple;
10002 },
10003
10004 value: function value(expected) {
10005 function value(actual) {
10006 return actual === expected;
10007 }
10008 value.toJSON = function () {
10009 return expected;
10010 };
10011
10012 return value;
10013 }
10014};
10015
10016function compile(type) {
10017 if (nativeTypes.String(type)) {
10018 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10019
10020 return nativeTypes[type] || otherTypes.quacksLike(type);
10021 } else if (type && nativeTypes.Object(type)) {
10022 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10023
10024 var compiled = {};
10025
10026 for (var propertyName in type) {
10027 compiled[propertyName] = compile(type[propertyName]);
10028 }
10029
10030 return otherTypes.object(compiled);
10031 } else if (nativeTypes.Function(type)) {
10032 return type;
10033 }
10034
10035 return otherTypes.value(type);
ebd8d4e8
IC
10036}
10037
ab78acc6
IC
10038function typeforce(_x3, _x4, _x5) {
10039 var _again = true;
10040
10041 _function: while (_again) {
10042 var type = _x3,
10043 value = _x4,
10044 strict = _x5;
10045 _again = false;
10046
10047 if (nativeTypes.Function(type)) {
10048 if (type(value, strict)) return true;
10049
10050 throw new TypeError(tfErrorString(type, value));
10051 }
10052
10053 // JIT
10054 _x3 = compile(type);
10055 _x4 = value;
10056 _x5 = strict;
10057 _again = true;
10058 continue _function;
10059 }
ebd8d4e8
IC
10060}
10061
ab78acc6
IC
10062// assign all types to typeforce function
10063var typeName;
10064Object.keys(nativeTypes).forEach(function (typeName) {
10065 var nativeType = nativeTypes[typeName];
10066 nativeType.toJSON = function () {
10067 return typeName;
10068 };
10069
10070 typeforce[typeName] = nativeType;
10071});
ebd8d4e8 10072
ab78acc6
IC
10073for (typeName in otherTypes) {
10074 typeforce[typeName] = otherTypes[typeName];
10075}
ebd8d4e8 10076
ab78acc6
IC
10077module.exports = typeforce;
10078module.exports.compile = compile;
10079}).call(this,require("buffer").Buffer)
10080},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10081(function (Buffer){
ab78acc6
IC
10082var assert = require('assert')
10083var base58check = require('bs58check')
10084var typeForce = require('typeforce')
10085var networks = require('./networks')
10086var scripts = require('./scripts')
ebd8d4e8 10087
ab78acc6 10088function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10089 for (var networkName in networks) {
10090 var network = networks[networkName]
10091
10092 if (version === network.pubKeyHash) return 'pubkeyhash'
10093 if (version === network.scriptHash) return 'scripthash'
10094 }
10095}
10096
ab78acc6
IC
10097function Address (hash, version) {
10098 typeForce('Buffer', hash)
10099
ebd8d4e8
IC
10100 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10101 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10102
10103 this.hash = hash
10104 this.version = version
10105}
10106
ab78acc6 10107Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10108 var payload = base58check.decode(string)
10109 var version = payload.readUInt8(0)
10110 var hash = payload.slice(1)
10111
10112 return new Address(hash, version)
10113}
10114
ab78acc6 10115Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10116 network = network || networks.bitcoin
10117
ab78acc6
IC
10118 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10119 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10120
ab78acc6 10121 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10122}
10123
ebd8d4e8
IC
10124Address.prototype.toBase58Check = function () {
10125 var payload = new Buffer(21)
10126 payload.writeUInt8(this.version, 0)
10127 this.hash.copy(payload, 1)
10128
10129 return base58check.encode(payload)
10130}
10131
ab78acc6 10132Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10133 var scriptType = findScriptTypeByVersion(this.version)
10134
10135 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10136 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10137
ab78acc6
IC
10138 assert(false, this.toString() + ' has no matching Script')
10139}
10140
10141Address.prototype.toString = Address.prototype.toBase58Check
10142
10143module.exports = Address
10144
10145}).call(this,require("buffer").Buffer)
10146},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10147var bs58check = require('bs58check')
10148
10149function decode () {
10150 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10151
10152 return bs58check.decode.apply(undefined, arguments)
10153}
10154
10155function encode () {
10156 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10157
10158 return bs58check.encode.apply(undefined, arguments)
10159}
10160
10161module.exports = {
10162 decode: decode,
10163 encode: encode
10164}
10165
10166},{"bs58check":31}],56:[function(require,module,exports){
10167(function (Buffer){
10168var assert = require('assert')
10169var bufferutils = require('./bufferutils')
10170var crypto = require('./crypto')
10171
10172var Transaction = require('./transaction')
10173
10174function Block () {
10175 this.version = 1
10176 this.prevHash = null
10177 this.merkleRoot = null
10178 this.timestamp = 0
10179 this.bits = 0
10180 this.nonce = 0
10181}
10182
10183Block.fromBuffer = function (buffer) {
10184 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10185
10186 var offset = 0
10187 function readSlice (n) {
10188 offset += n
10189 return buffer.slice(offset - n, offset)
10190 }
10191
10192 function readUInt32 () {
10193 var i = buffer.readUInt32LE(offset)
10194 offset += 4
10195 return i
10196 }
10197
10198 var block = new Block()
10199 block.version = readUInt32()
10200 block.prevHash = readSlice(32)
10201 block.merkleRoot = readSlice(32)
10202 block.timestamp = readUInt32()
10203 block.bits = readUInt32()
10204 block.nonce = readUInt32()
10205
10206 if (buffer.length === 80) return block
10207
10208 function readVarInt () {
10209 var vi = bufferutils.readVarInt(buffer, offset)
10210 offset += vi.size
10211 return vi.number
10212 }
10213
10214 // FIXME: poor performance
10215 function readTransaction () {
10216 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10217
10218 offset += tx.toBuffer().length
10219 return tx
10220 }
10221
10222 var nTransactions = readVarInt()
10223 block.transactions = []
10224
10225 for (var i = 0; i < nTransactions; ++i) {
10226 var tx = readTransaction()
10227 block.transactions.push(tx)
10228 }
10229
10230 return block
10231}
10232
10233Block.fromHex = function (hex) {
10234 return Block.fromBuffer(new Buffer(hex, 'hex'))
10235}
10236
10237Block.prototype.getHash = function () {
10238 return crypto.hash256(this.toBuffer(true))
10239}
10240
10241Block.prototype.getId = function () {
10242 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10243}
10244
ab78acc6
IC
10245Block.prototype.getUTCDate = function () {
10246 var date = new Date(0) // epoch
10247 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10248
ab78acc6
IC
10249 return date
10250}
ebd8d4e8 10251
ab78acc6
IC
10252Block.prototype.toBuffer = function (headersOnly) {
10253 var buffer = new Buffer(80)
ebd8d4e8 10254
ab78acc6
IC
10255 var offset = 0
10256 function writeSlice (slice) {
10257 slice.copy(buffer, offset)
10258 offset += slice.length
10259 }
ebd8d4e8 10260
ab78acc6
IC
10261 function writeUInt32 (i) {
10262 buffer.writeUInt32LE(i, offset)
10263 offset += 4
10264 }
ebd8d4e8 10265
ab78acc6
IC
10266 writeUInt32(this.version)
10267 writeSlice(this.prevHash)
10268 writeSlice(this.merkleRoot)
10269 writeUInt32(this.timestamp)
10270 writeUInt32(this.bits)
10271 writeUInt32(this.nonce)
ebd8d4e8 10272
ab78acc6 10273 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10274
ab78acc6
IC
10275 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10276 var txBuffers = this.transactions.map(function (tx) {
10277 return tx.toBuffer()
10278 })
ebd8d4e8 10279
ab78acc6 10280 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10281}
10282
ab78acc6
IC
10283Block.prototype.toHex = function (headersOnly) {
10284 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10285}
10286
ab78acc6
IC
10287module.exports = Block
10288
10289}).call(this,require("buffer").Buffer)
10290},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10291(function (Buffer){
10292var assert = require('assert')
10293var opcodes = require('./opcodes')
ebd8d4e8
IC
10294
10295// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10296function verifuint (value, max) {
ebd8d4e8
IC
10297 assert(typeof value === 'number', 'cannot write a non-number as a number')
10298 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10299 assert(value <= max, 'value is larger than maximum value for type')
10300 assert(Math.floor(value) === value, 'value has a fractional component')
10301}
10302
ab78acc6 10303function pushDataSize (i) {
ebd8d4e8 10304 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10305 : i < 0xff ? 2
10306 : i < 0xffff ? 3
10307 : 5
ebd8d4e8
IC
10308}
10309
ab78acc6 10310function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10311 var opcode = buffer.readUInt8(offset)
10312 var number, size
10313
10314 // ~6 bit
10315 if (opcode < opcodes.OP_PUSHDATA1) {
10316 number = opcode
10317 size = 1
10318
10319 // 8 bit
10320 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10321 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10322 number = buffer.readUInt8(offset + 1)
10323 size = 2
10324
10325 // 16 bit
10326 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10327 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10328 number = buffer.readUInt16LE(offset + 1)
10329 size = 3
10330
10331 // 32 bit
10332 } else {
ab78acc6 10333 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10334 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10335
10336 number = buffer.readUInt32LE(offset + 1)
10337 size = 5
ebd8d4e8
IC
10338 }
10339
10340 return {
10341 opcode: opcode,
10342 number: number,
10343 size: size
10344 }
10345}
10346
ab78acc6 10347function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10348 var a = buffer.readUInt32LE(offset)
10349 var b = buffer.readUInt32LE(offset + 4)
10350 b *= 0x100000000
10351
10352 verifuint(b + a, 0x001fffffffffffff)
10353
10354 return b + a
10355}
10356
ab78acc6 10357function readVarInt (buffer, offset) {
ebd8d4e8
IC
10358 var t = buffer.readUInt8(offset)
10359 var number, size
10360
10361 // 8 bit
10362 if (t < 253) {
10363 number = t
10364 size = 1
10365
10366 // 16 bit
10367 } else if (t < 254) {
10368 number = buffer.readUInt16LE(offset + 1)
10369 size = 3
10370
10371 // 32 bit
10372 } else if (t < 255) {
10373 number = buffer.readUInt32LE(offset + 1)
10374 size = 5
10375
10376 // 64 bit
10377 } else {
10378 number = readUInt64LE(buffer, offset + 1)
10379 size = 9
10380 }
10381
10382 return {
10383 number: number,
10384 size: size
10385 }
10386}
10387
ab78acc6 10388function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10389 var size = pushDataSize(number)
10390
10391 // ~6 bit
10392 if (size === 1) {
10393 buffer.writeUInt8(number, offset)
10394
10395 // 8 bit
10396 } else if (size === 2) {
10397 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10398 buffer.writeUInt8(number, offset + 1)
10399
10400 // 16 bit
10401 } else if (size === 3) {
10402 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10403 buffer.writeUInt16LE(number, offset + 1)
10404
10405 // 32 bit
10406 } else {
10407 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10408 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10409 }
10410
10411 return size
10412}
10413
ab78acc6 10414function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10415 verifuint(value, 0x001fffffffffffff)
10416
10417 buffer.writeInt32LE(value & -1, offset)
10418 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10419}
10420
ab78acc6
IC
10421function varIntSize (i) {
10422 return i < 253 ? 1
10423 : i < 0x10000 ? 3
10424 : i < 0x100000000 ? 5
10425 : 9
ebd8d4e8
IC
10426}
10427
ab78acc6 10428function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10429 var size = varIntSize(number)
10430
10431 // 8 bit
10432 if (size === 1) {
10433 buffer.writeUInt8(number, offset)
10434
10435 // 16 bit
10436 } else if (size === 3) {
10437 buffer.writeUInt8(253, offset)
10438 buffer.writeUInt16LE(number, offset + 1)
10439
10440 // 32 bit
10441 } else if (size === 5) {
10442 buffer.writeUInt8(254, offset)
10443 buffer.writeUInt32LE(number, offset + 1)
10444
10445 // 64 bit
10446 } else {
10447 buffer.writeUInt8(255, offset)
10448 writeUInt64LE(buffer, number, offset + 1)
10449 }
10450
10451 return size
10452}
10453
ab78acc6
IC
10454function varIntBuffer (i) {
10455 var size = varIntSize(i)
10456 var buffer = new Buffer(size)
10457 writeVarInt(buffer, i, 0)
10458
10459 return buffer
10460}
10461
10462function reverse (buffer) {
10463 var buffer2 = new Buffer(buffer)
10464 Array.prototype.reverse.call(buffer2)
10465 return buffer2
10466}
10467
ebd8d4e8
IC
10468module.exports = {
10469 pushDataSize: pushDataSize,
10470 readPushDataInt: readPushDataInt,
10471 readUInt64LE: readUInt64LE,
10472 readVarInt: readVarInt,
ab78acc6
IC
10473 reverse: reverse,
10474 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10475 varIntSize: varIntSize,
10476 writePushDataInt: writePushDataInt,
10477 writeUInt64LE: writeUInt64LE,
10478 writeVarInt: writeVarInt
10479}
10480
ab78acc6
IC
10481}).call(this,require("buffer").Buffer)
10482},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10483var createHash = require('create-hash')
ebd8d4e8 10484
ab78acc6 10485function hash160 (buffer) {
ebd8d4e8
IC
10486 return ripemd160(sha256(buffer))
10487}
10488
ab78acc6 10489function hash256 (buffer) {
ebd8d4e8
IC
10490 return sha256(sha256(buffer))
10491}
10492
ab78acc6
IC
10493function ripemd160 (buffer) {
10494 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10495}
10496
ab78acc6
IC
10497function sha1 (buffer) {
10498 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10499}
10500
ab78acc6
IC
10501function sha256 (buffer) {
10502 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10503}
10504
10505// FIXME: Name not consistent with others
ab78acc6 10506var createHmac = require('create-hmac')
ebd8d4e8 10507
ab78acc6
IC
10508function HmacSHA256 (buffer, secret) {
10509 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10510 return createHmac('sha256', secret).update(buffer).digest()
10511}
ebd8d4e8 10512
ab78acc6
IC
10513function HmacSHA512 (buffer, secret) {
10514 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10515 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10516}
10517
10518module.exports = {
10519 ripemd160: ripemd160,
10520 sha1: sha1,
10521 sha256: sha256,
10522 hash160: hash160,
10523 hash256: hash256,
10524 HmacSHA256: HmacSHA256,
10525 HmacSHA512: HmacSHA512
10526}
10527
ab78acc6 10528},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10529(function (Buffer){
ab78acc6
IC
10530var assert = require('assert')
10531var createHmac = require('create-hmac')
10532var typeForce = require('typeforce')
ebd8d4e8 10533
ab78acc6
IC
10534var BigInteger = require('bigi')
10535var ECSignature = require('./ecsignature')
10536
10537var ZERO = new Buffer([0])
10538var ONE = new Buffer([1])
ebd8d4e8
IC
10539
10540// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10541function deterministicGenerateK (curve, hash, d, checkSig) {
10542 typeForce('Buffer', hash)
10543 typeForce('BigInteger', d)
10544
10545 // FIXME: remove/uncomment for 2.0.0
10546 // typeForce('Function', checkSig)
10547
10548 if (typeof checkSig !== 'function') {
10549 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10550
10551 checkSig = function (k) {
10552 var G = curve.G
10553 var n = curve.n
10554 var e = BigInteger.fromBuffer(hash)
10555
10556 var Q = G.multiply(k)
10557
10558 if (curve.isInfinity(Q))
10559 return false
10560
10561 var r = Q.affineX.mod(n)
10562 if (r.signum() === 0)
10563 return false
10564
10565 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10566 if (s.signum() === 0)
10567 return false
10568
10569 return true
10570 }
10571 }
10572
10573 // sanity check
ebd8d4e8 10574 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10575
10576 var x = d.toBuffer(32)
10577 var k = new Buffer(32)
10578 var v = new Buffer(32)
10579
ab78acc6 10580 // Step A, ignored as hash already provided
ebd8d4e8
IC
10581 // Step B
10582 v.fill(1)
10583
10584 // Step C
10585 k.fill(0)
10586
10587 // Step D
ab78acc6
IC
10588 k = createHmac('sha256', k)
10589 .update(v)
10590 .update(ZERO)
10591 .update(x)
10592 .update(hash)
10593 .digest()
ebd8d4e8
IC
10594
10595 // Step E
ab78acc6 10596 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10597
10598 // Step F
ab78acc6
IC
10599 k = createHmac('sha256', k)
10600 .update(v)
10601 .update(ONE)
10602 .update(x)
10603 .update(hash)
10604 .digest()
ebd8d4e8
IC
10605
10606 // Step G
ab78acc6 10607 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10608
10609 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10610 // Step H2b
ab78acc6 10611 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10612
10613 var T = BigInteger.fromBuffer(v)
10614
ab78acc6
IC
10615 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10616 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10617 k = createHmac('sha256', k)
10618 .update(v)
10619 .update(ZERO)
10620 .digest()
10621
10622 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10623
ab78acc6
IC
10624 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10625 // Step H2b again
10626 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10627 T = BigInteger.fromBuffer(v)
10628 }
10629
10630 return T
10631}
10632
ab78acc6
IC
10633function sign (curve, hash, d) {
10634 var r, s
ebd8d4e8 10635
ab78acc6 10636 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10637 var n = curve.n
10638 var G = curve.G
ebd8d4e8 10639
ab78acc6
IC
10640 deterministicGenerateK(curve, hash, d, function (k) {
10641 var Q = G.multiply(k)
10642
10643 if (curve.isInfinity(Q))
10644 return false
10645
10646 r = Q.affineX.mod(n)
10647 if (r.signum() === 0)
10648 return false
10649
10650 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10651 if (s.signum() === 0)
10652 return false
ebd8d4e8 10653
ab78acc6
IC
10654 return true
10655 })
ebd8d4e8
IC
10656
10657 var N_OVER_TWO = n.shiftRight(1)
10658
10659 // enforce low S values, see bip62: 'low s values in signatures'
10660 if (s.compareTo(N_OVER_TWO) > 0) {
10661 s = n.subtract(s)
10662 }
10663
10664 return new ECSignature(r, s)
10665}
10666
ab78acc6 10667function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10668 var n = curve.n
10669 var G = curve.G
10670
10671 var r = signature.r
10672 var s = signature.s
10673
ab78acc6
IC
10674 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10675 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10676 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10677
ab78acc6 10678 // c = s^-1 mod n
ebd8d4e8
IC
10679 var c = s.modInverse(n)
10680
ab78acc6
IC
10681 // 1.4.4 Compute u1 = es^−1 mod n
10682 // u2 = rs^−1 mod n
ebd8d4e8
IC
10683 var u1 = e.multiply(c).mod(n)
10684 var u2 = r.multiply(c).mod(n)
10685
ab78acc6
IC
10686 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10687 var R = G.multiplyTwo(u1, Q, u2)
10688 var v = R.affineX.mod(n)
ebd8d4e8 10689
ab78acc6
IC
10690 // 1.4.5 (cont.) Enforce R is not at infinity
10691 if (curve.isInfinity(R)) return false
10692
10693 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10694 return v.equals(r)
10695}
10696
ab78acc6
IC
10697function verify (curve, hash, signature, Q) {
10698 // 1.4.2 H = Hash(M), already done by the user
10699 // 1.4.3 e = H
10700 var e = BigInteger.fromBuffer(hash)
10701
10702 return verifyRaw(curve, e, signature, Q)
10703}
10704
ebd8d4e8
IC
10705/**
10706 * Recover a public key from a signature.
10707 *
10708 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10709 * Key Recovery Operation".
10710 *
10711 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10712 */
ab78acc6 10713function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10714 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10715
ab78acc6
IC
10716 var n = curve.n
10717 var G = curve.G
10718
ebd8d4e8
IC
10719 var r = signature.r
10720 var s = signature.s
10721
ab78acc6
IC
10722 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10723 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10724
ebd8d4e8
IC
10725 // A set LSB signifies that the y-coordinate is odd
10726 var isYOdd = i & 1
10727
10728 // The more significant bit specifies whether we should use the
10729 // first or second candidate key.
10730 var isSecondKey = i >> 1
10731
ebd8d4e8
IC
10732 // 1.1 Let x = r + jn
10733 var x = isSecondKey ? r.add(n) : r
10734 var R = curve.pointFromX(isYOdd, x)
10735
10736 // 1.4 Check that nR is at infinity
10737 var nR = R.multiply(n)
10738 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10739
10740 // Compute -e from e
10741 var eNeg = e.negate().mod(n)
10742
10743 // 1.6.1 Compute Q = r^-1 (sR - eG)
10744 // Q = r^-1 (sR + -eG)
10745 var rInv = r.modInverse(n)
10746
10747 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10748 curve.validate(Q)
10749
10750 return Q
10751}
10752
10753/**
10754 * Calculate pubkey extraction parameter.
10755 *
10756 * When extracting a pubkey from a signature, we have to
10757 * distinguish four different cases. Rather than putting this
10758 * burden on the verifier, Bitcoin includes a 2-bit value with the
10759 * signature.
10760 *
10761 * This function simply tries all four cases and returns the value
10762 * that resulted in a successful pubkey recovery.
10763 */
ab78acc6 10764function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10765 for (var i = 0; i < 4; i++) {
10766 var Qprime = recoverPubKey(curve, e, signature, i)
10767
10768 // 1.6.2 Verify Q
10769 if (Qprime.equals(Q)) {
10770 return i
10771 }
10772 }
10773
10774 throw new Error('Unable to find valid recovery factor')
10775}
10776
10777module.exports = {
10778 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10779 deterministicGenerateK: deterministicGenerateK,
10780 recoverPubKey: recoverPubKey,
10781 sign: sign,
10782 verify: verify,
10783 verifyRaw: verifyRaw
10784}
10785
ab78acc6
IC
10786}).call(this,require("buffer").Buffer)
10787},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10788(function (Buffer){
ab78acc6
IC
10789var assert = require('assert')
10790var base58check = require('bs58check')
10791var ecdsa = require('./ecdsa')
10792var networks = require('./networks')
10793var randomBytes = require('randombytes')
10794var typeForce = require('typeforce')
ebd8d4e8 10795
ab78acc6
IC
10796var BigInteger = require('bigi')
10797var ECPubKey = require('./ecpubkey')
ebd8d4e8 10798
ab78acc6
IC
10799var ecurve = require('ecurve')
10800var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10801
ab78acc6 10802function ECKey (d, compressed) {
ebd8d4e8 10803 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10804 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10805
ab78acc6 10806 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10807
10808 this.d = d
10809 this.pub = new ECPubKey(Q, compressed)
10810}
10811
ab78acc6
IC
10812// Constants
10813ECKey.curve = secp256k1
10814
ebd8d4e8 10815// Static constructors
ab78acc6 10816ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10817 var payload = base58check.decode(string)
10818 var compressed = false
10819
10820 // Ignore the version byte
10821 payload = payload.slice(1)
10822
10823 if (payload.length === 33) {
10824 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10825
10826 // Truncate the compression flag
10827 payload = payload.slice(0, -1)
10828 compressed = true
10829 }
10830
10831 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10832
10833 var d = BigInteger.fromBuffer(payload)
10834 return new ECKey(d, compressed)
10835}
10836
ab78acc6
IC
10837ECKey.makeRandom = function (compressed, rng) {
10838 rng = rng || randomBytes
ebd8d4e8
IC
10839
10840 var buffer = rng(32)
ab78acc6
IC
10841 typeForce('Buffer', buffer)
10842 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10843
10844 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10845 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10846
10847 return new ECKey(d, compressed)
10848}
10849
10850// Export functions
ab78acc6 10851ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10852 network = network || networks.bitcoin
10853
10854 var bufferLen = this.pub.compressed ? 34 : 33
10855 var buffer = new Buffer(bufferLen)
10856
10857 buffer.writeUInt8(network.wif, 0)
10858 this.d.toBuffer(32).copy(buffer, 1)
10859
10860 if (this.pub.compressed) {
10861 buffer.writeUInt8(0x01, 33)
10862 }
10863
10864 return base58check.encode(buffer)
10865}
10866
10867// Operations
ab78acc6
IC
10868ECKey.prototype.sign = function (hash) {
10869 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10870}
10871
10872module.exports = ECKey
10873
ab78acc6
IC
10874}).call(this,require("buffer").Buffer)
10875},{"./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){
ebd8d4e8 10876(function (Buffer){
ab78acc6
IC
10877var crypto = require('./crypto')
10878var ecdsa = require('./ecdsa')
10879var typeForce = require('typeforce')
10880var networks = require('./networks')
ebd8d4e8 10881
ab78acc6 10882var Address = require('./address')
ebd8d4e8 10883
ab78acc6
IC
10884var ecurve = require('ecurve')
10885var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10886
ab78acc6
IC
10887function ECPubKey (Q, compressed) {
10888 if (compressed === undefined) {
10889 compressed = true
10890 }
ebd8d4e8 10891
ab78acc6
IC
10892 typeForce('Point', Q)
10893 typeForce('Boolean', compressed)
ebd8d4e8
IC
10894
10895 this.compressed = compressed
10896 this.Q = Q
10897}
10898
ab78acc6
IC
10899// Constants
10900ECPubKey.curve = secp256k1
10901
ebd8d4e8 10902// Static constructors
ab78acc6
IC
10903ECPubKey.fromBuffer = function (buffer) {
10904 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10905 return new ECPubKey(Q, Q.compressed)
10906}
10907
ab78acc6 10908ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10909 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10910}
10911
10912// Operations
ab78acc6 10913ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10914 network = network || networks.bitcoin
10915
10916 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10917}
10918
ab78acc6
IC
10919ECPubKey.prototype.verify = function (hash, signature) {
10920 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10921}
10922
10923// Export functions
ab78acc6 10924ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10925 return this.Q.getEncoded(this.compressed)
10926}
10927
ab78acc6 10928ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10929 return this.toBuffer().toString('hex')
10930}
10931
10932module.exports = ECPubKey
10933
ab78acc6
IC
10934}).call(this,require("buffer").Buffer)
10935},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10936(function (Buffer){
ab78acc6
IC
10937var assert = require('assert')
10938var typeForce = require('typeforce')
10939
10940var BigInteger = require('bigi')
10941
10942function ECSignature (r, s) {
10943 typeForce('BigInteger', r)
10944 typeForce('BigInteger', s)
ebd8d4e8 10945
ebd8d4e8
IC
10946 this.r = r
10947 this.s = s
10948}
10949
ab78acc6 10950ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10951 assert.equal(buffer.length, 65, 'Invalid signature length')
10952 var i = buffer.readUInt8(0) - 27
10953
10954 // At most 3 bits
10955 assert.equal(i, i & 7, 'Invalid signature parameter')
10956 var compressed = !!(i & 4)
10957
10958 // Recovery param only
10959 i = i & 3
10960
10961 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10962 var s = BigInteger.fromBuffer(buffer.slice(33))
10963
10964 return {
10965 compressed: compressed,
10966 i: i,
10967 signature: new ECSignature(r, s)
10968 }
10969}
10970
ab78acc6 10971ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10972 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10973 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10974 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10975
10976 var rLen = buffer.readUInt8(3)
10977 assert(rLen > 0, 'R length is zero')
10978
10979 var offset = 4 + rLen
10980 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10981
10982 var sLen = buffer.readUInt8(offset + 1)
10983 assert(sLen > 0, 'S length is zero')
10984
10985 var rB = buffer.slice(4, offset)
10986 var sB = buffer.slice(offset + 2)
10987 offset += 2 + sLen
10988
10989 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10990 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10991 }
10992
10993 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10994 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10995 }
10996
10997 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10998 var r = BigInteger.fromDERInteger(rB)
10999 var s = BigInteger.fromDERInteger(sB)
11000
11001 assert(r.signum() >= 0, 'R value is negative')
11002 assert(s.signum() >= 0, 'S value is negative')
11003
11004 return new ECSignature(r, s)
11005}
11006
ab78acc6
IC
11007// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11008ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
11009 var hashType = buffer.readUInt8(buffer.length - 1)
11010 var hashTypeMod = hashType & ~0x80
11011
ab78acc6 11012 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
11013
11014 return {
11015 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11016 hashType: hashType
11017 }
11018}
11019
ab78acc6
IC
11020ECSignature.prototype.toCompact = function (i, compressed) {
11021 if (compressed) {
11022 i += 4
11023 }
11024
ebd8d4e8
IC
11025 i += 27
11026
11027 var buffer = new Buffer(65)
11028 buffer.writeUInt8(i, 0)
11029
11030 this.r.toBuffer(32).copy(buffer, 1)
11031 this.s.toBuffer(32).copy(buffer, 33)
11032
11033 return buffer
11034}
11035
ab78acc6 11036ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
11037 var rBa = this.r.toDERInteger()
11038 var sBa = this.s.toDERInteger()
11039
11040 var sequence = []
ab78acc6
IC
11041
11042 // INTEGER
11043 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
11044 sequence = sequence.concat(rBa)
11045
ab78acc6
IC
11046 // INTEGER
11047 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
11048 sequence = sequence.concat(sBa)
11049
ab78acc6
IC
11050 // SEQUENCE
11051 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
11052
11053 return new Buffer(sequence)
11054}
11055
ab78acc6
IC
11056ECSignature.prototype.toScriptSignature = function (hashType) {
11057 var hashTypeMod = hashType & ~0x80
11058 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11059
ebd8d4e8
IC
11060 var hashTypeBuffer = new Buffer(1)
11061 hashTypeBuffer.writeUInt8(hashType, 0)
11062
11063 return Buffer.concat([this.toDER(), hashTypeBuffer])
11064}
11065
11066module.exports = ECSignature
11067
ab78acc6
IC
11068}).call(this,require("buffer").Buffer)
11069},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11070(function (Buffer){
ab78acc6
IC
11071var assert = require('assert')
11072var base58check = require('bs58check')
11073var bcrypto = require('./crypto')
11074var createHmac = require('create-hmac')
11075var typeForce = require('typeforce')
11076var networks = require('./networks')
11077
11078var BigInteger = require('bigi')
11079var ECKey = require('./eckey')
11080var ECPubKey = require('./ecpubkey')
11081
11082var ecurve = require('ecurve')
ebd8d4e8
IC
11083var curve = ecurve.getCurveByName('secp256k1')
11084
ab78acc6 11085function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11086 for (var name in networks) {
11087 var network = networks[name]
11088
ab78acc6
IC
11089 if (version === network.bip32.private || version === network.bip32.public) {
11090 return network
ebd8d4e8
IC
11091 }
11092 }
11093
ab78acc6 11094 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11095}
11096
ab78acc6 11097function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11098 network = network || networks.bitcoin
11099
ab78acc6
IC
11100 typeForce('Buffer', chainCode)
11101
11102 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11103 assert(network.bip32, 'Unknown BIP32 constants for network')
11104
11105 this.chainCode = chainCode
11106 this.depth = 0
11107 this.index = 0
ab78acc6 11108 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11109 this.network = network
11110
11111 if (K instanceof BigInteger) {
11112 this.privKey = new ECKey(K, true)
11113 this.pubKey = this.privKey.pub
ab78acc6
IC
11114 } else if (K instanceof ECKey) {
11115 assert(K.pub.compressed, 'ECKey must be compressed')
11116 this.privKey = K
11117 this.pubKey = K.pub
11118 } else if (K instanceof ECPubKey) {
11119 assert(K.compressed, 'ECPubKey must be compressed')
11120 this.pubKey = K
ebd8d4e8
IC
11121 } else {
11122 this.pubKey = new ECPubKey(K, true)
11123 }
11124}
11125
11126HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11127HDNode.HIGHEST_BIT = 0x80000000
11128HDNode.LENGTH = 78
11129
ab78acc6
IC
11130HDNode.fromSeedBuffer = function (seed, network) {
11131 typeForce('Buffer', seed)
11132
11133 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11134 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11135
11136 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11137 var IL = I.slice(0, 32)
11138 var IR = I.slice(32)
11139
11140 // In case IL is 0 or >= n, the master key is invalid
11141 // This is handled by `new ECKey` in the HDNode constructor
11142 var pIL = BigInteger.fromBuffer(IL)
11143
11144 return new HDNode(pIL, IR, network)
11145}
11146
ab78acc6 11147HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11148 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11149}
11150
ab78acc6
IC
11151HDNode.fromBase58 = function (string, network) {
11152 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11153}
11154
ab78acc6
IC
11155// FIXME: remove in 2.x.y
11156HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11157 if (!__ignoreDeprecation) {
11158 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11159 }
11160
ebd8d4e8
IC
11161 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11162
11163 // 4 byte: version bytes
11164 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11165
11166 if (network) {
11167 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11168
11169 // auto-detect
11170 } else {
11171 network = findBIP32NetworkByVersion(version)
11172 }
ebd8d4e8
IC
11173
11174 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11175 var depth = buffer.readUInt8(4)
11176
11177 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11178 var parentFingerprint = buffer.readUInt32BE(5)
11179 if (depth === 0) {
11180 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11181 }
11182
11183 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11184 // This is encoded in MSB order. (0x00000000 if master key)
11185 var index = buffer.readUInt32BE(9)
11186 assert(depth > 0 || index === 0, 'Invalid index')
11187
11188 // 32 bytes: the chain code
11189 var chainCode = buffer.slice(13, 45)
ab78acc6 11190 var data, hd
ebd8d4e8
IC
11191
11192 // 33 bytes: private key data (0x00 + k)
ab78acc6 11193 if (version === network.bip32.private) {
ebd8d4e8 11194 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11195 data = buffer.slice(46, 78)
ebd8d4e8 11196 var d = BigInteger.fromBuffer(data)
ab78acc6 11197 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11198
11199 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11200 } else {
ab78acc6 11201 data = buffer.slice(45, 78)
ebd8d4e8
IC
11202 var Q = ecurve.Point.decodeFrom(curve, data)
11203 assert.equal(Q.compressed, true, 'Invalid public key')
11204
11205 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11206 // If not, the extended public key is invalid.
11207 curve.validate(Q)
11208
ab78acc6 11209 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11210 }
11211
11212 hd.depth = depth
11213 hd.index = index
11214 hd.parentFingerprint = parentFingerprint
11215
11216 return hd
11217}
11218
ab78acc6
IC
11219// FIXME: remove in 2.x.y
11220HDNode.fromHex = function (hex, network) {
11221 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11222}
11223
ab78acc6
IC
11224HDNode.prototype.getIdentifier = function () {
11225 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11226}
11227
ab78acc6 11228HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11229 return this.getIdentifier().slice(0, 4)
11230}
11231
ab78acc6 11232HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11233 return this.pubKey.getAddress(this.network)
11234}
11235
ab78acc6
IC
11236HDNode.prototype.neutered = function () {
11237 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11238 neutered.depth = this.depth
11239 neutered.index = this.index
11240 neutered.parentFingerprint = this.parentFingerprint
11241
11242 return neutered
11243}
11244
11245HDNode.prototype.toBase58 = function (isPrivate) {
11246 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11247}
11248
ab78acc6
IC
11249// FIXME: remove in 2.x.y
11250HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11251 if (isPrivate === undefined) {
11252 isPrivate = !!this.privKey
11253
11254 // FIXME: remove in 2.x.y
11255 } else {
11256 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11257 }
11258
11259 if (!__ignoreDeprecation) {
11260 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11261 }
ebd8d4e8
IC
11262
11263 // Version
11264 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11265 var buffer = new Buffer(HDNode.LENGTH)
11266
11267 // 4 bytes: version bytes
11268 buffer.writeUInt32BE(version, 0)
11269
11270 // Depth
11271 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11272 buffer.writeUInt8(this.depth, 4)
11273
11274 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11275 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11276
11277 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11278 // This is encoded in Big endian. (0x00000000 if master key)
11279 buffer.writeUInt32BE(this.index, 9)
11280
11281 // 32 bytes: the chain code
11282 this.chainCode.copy(buffer, 13)
11283
11284 // 33 bytes: the public key or private key data
11285 if (isPrivate) {
ab78acc6 11286 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11287 assert(this.privKey, 'Missing private key')
11288
11289 // 0x00 + k for private keys
11290 buffer.writeUInt8(0, 45)
11291 this.privKey.d.toBuffer(32).copy(buffer, 46)
11292 } else {
ebd8d4e8
IC
11293 // X9.62 encoding for public keys
11294 this.pubKey.toBuffer().copy(buffer, 45)
11295 }
11296
11297 return buffer
11298}
11299
ab78acc6
IC
11300// FIXME: remove in 2.x.y
11301HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11302 return this.toBuffer(isPrivate).toString('hex')
11303}
11304
11305// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11306HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11307 var isHardened = index >= HDNode.HIGHEST_BIT
11308 var indexBuffer = new Buffer(4)
11309 indexBuffer.writeUInt32BE(index, 0)
11310
11311 var data
11312
11313 // Hardened child
11314 if (isHardened) {
11315 assert(this.privKey, 'Could not derive hardened child key')
11316
11317 // data = 0x00 || ser256(kpar) || ser32(index)
11318 data = Buffer.concat([
11319 this.privKey.d.toBuffer(33),
11320 indexBuffer
11321 ])
11322
11323 // Normal child
11324 } else {
11325 // data = serP(point(kpar)) || ser32(index)
11326 // = serP(Kpar) || ser32(index)
11327 data = Buffer.concat([
11328 this.pubKey.toBuffer(),
11329 indexBuffer
11330 ])
11331 }
11332
ab78acc6 11333 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11334 var IL = I.slice(0, 32)
11335 var IR = I.slice(32)
11336
11337 var pIL = BigInteger.fromBuffer(IL)
11338
11339 // In case parse256(IL) >= n, proceed with the next value for i
11340 if (pIL.compareTo(curve.n) >= 0) {
11341 return this.derive(index + 1)
11342 }
11343
11344 // Private parent key -> private child key
11345 var hd
11346 if (this.privKey) {
11347 // ki = parse256(IL) + kpar (mod n)
11348 var ki = pIL.add(this.privKey.d).mod(curve.n)
11349
11350 // In case ki == 0, proceed with the next value for i
11351 if (ki.signum() === 0) {
11352 return this.derive(index + 1)
11353 }
11354
11355 hd = new HDNode(ki, IR, this.network)
11356
11357 // Public parent key -> public child key
11358 } else {
11359 // Ki = point(parse256(IL)) + Kpar
11360 // = G*IL + Kpar
11361 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11362
11363 // In case Ki is the point at infinity, proceed with the next value for i
11364 if (curve.isInfinity(Ki)) {
11365 return this.derive(index + 1)
11366 }
11367
11368 hd = new HDNode(Ki, IR, this.network)
11369 }
11370
11371 hd.depth = this.depth + 1
11372 hd.index = index
11373 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11374
11375 return hd
11376}
11377
ab78acc6 11378HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11379 // Only derives hardened private keys by default
11380 return this.derive(index + HDNode.HIGHEST_BIT)
11381}
11382
11383HDNode.prototype.toString = HDNode.prototype.toBase58
11384
11385module.exports = HDNode
11386
ab78acc6
IC
11387}).call(this,require("buffer").Buffer)
11388},{"./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){
ebd8d4e8 11389module.exports = {
ab78acc6
IC
11390 Address: require('./address'),
11391 base58check: require('./base58check'),
11392 Block: require('./block'),
11393 bufferutils: require('./bufferutils'),
11394 crypto: require('./crypto'),
11395 ecdsa: require('./ecdsa'),
11396 ECKey: require('./eckey'),
11397 ECPubKey: require('./ecpubkey'),
11398 ECSignature: require('./ecsignature'),
11399 Message: require('./message'),
11400 opcodes: require('./opcodes'),
11401 HDNode: require('./hdnode'),
11402 Script: require('./script'),
11403 scripts: require('./scripts'),
11404 Transaction: require('./transaction'),
11405 TransactionBuilder: require('./transaction_builder'),
11406 networks: require('./networks'),
11407 Wallet: require('./wallet')
11408}
11409
11410},{"./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){
ebd8d4e8 11411(function (Buffer){
ab78acc6
IC
11412var bufferutils = require('./bufferutils')
11413var crypto = require('./crypto')
11414var ecdsa = require('./ecdsa')
11415var networks = require('./networks')
11416
11417var BigInteger = require('bigi')
11418var ECPubKey = require('./ecpubkey')
11419var ECSignature = require('./ecsignature')
11420
11421var ecurve = require('ecurve')
ebd8d4e8
IC
11422var ecparams = ecurve.getCurveByName('secp256k1')
11423
ab78acc6 11424function magicHash (message, network) {
ebd8d4e8
IC
11425 var magicPrefix = new Buffer(network.magicPrefix)
11426 var messageBuffer = new Buffer(message)
ab78acc6 11427 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11428
11429 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11430 return crypto.hash256(buffer)
11431}
11432
ab78acc6 11433function sign (privKey, message, network) {
ebd8d4e8
IC
11434 network = network || networks.bitcoin
11435
11436 var hash = magicHash(message, network)
11437 var signature = privKey.sign(hash)
11438 var e = BigInteger.fromBuffer(hash)
11439 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11440
11441 return signature.toCompact(i, privKey.pub.compressed)
11442}
11443
11444// TODO: network could be implied from address
ab78acc6
IC
11445function verify (address, signature, message, network) {
11446 if (!Buffer.isBuffer(signature)) {
11447 signature = new Buffer(signature, 'base64')
ebd8d4e8 11448 }
ab78acc6 11449
ebd8d4e8
IC
11450 network = network || networks.bitcoin
11451
11452 var hash = magicHash(message, network)
ab78acc6 11453 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11454 var e = BigInteger.fromBuffer(hash)
11455 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11456
11457 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11458 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11459}
11460
11461module.exports = {
11462 magicHash: magicHash,
11463 sign: sign,
11464 verify: verify
11465}
11466
ab78acc6
IC
11467}).call(this,require("buffer").Buffer)
11468},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
ebd8d4e8
IC
11469// https://en.bitcoin.it/wiki/List_of_address_prefixes
11470// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11471
11472var networks = {
11473 bitcoin: {
11474 magicPrefix: '\x18Bitcoin Signed Message:\n',
11475 bip32: {
11476 public: 0x0488b21e,
11477 private: 0x0488ade4
11478 },
11479 pubKeyHash: 0x00,
11480 scriptHash: 0x05,
11481 wif: 0x80,
11482 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11483 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11484 estimateFee: estimateFee('bitcoin')
a9385c1b 11485 },
ab78acc6
IC
11486 testnet: {
11487 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11488 bip32: {
ab78acc6
IC
11489 public: 0x043587cf,
11490 private: 0x04358394
a9385c1b 11491 },
ab78acc6
IC
11492 pubKeyHash: 0x6f,
11493 scriptHash: 0xc4,
11494 wif: 0xef,
11495 dustThreshold: 546,
cb325c58 11496 feePerKb: 10000,
ab78acc6 11497 estimateFee: estimateFee('testnet')
a9385c1b 11498 },
ab78acc6
IC
11499 litecoin: {
11500 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11501 bip32: {
ab78acc6
IC
11502 public: 0x019da462,
11503 private: 0x019d9cfe
a9385c1b 11504 },
ab78acc6
IC
11505 pubKeyHash: 0x30,
11506 scriptHash: 0x05,
11507 wif: 0xb0,
11508 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11509 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11510 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11511 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11512 },
11513 dogecoin: {
11514 magicPrefix: '\x19Dogecoin Signed Message:\n',
11515 bip32: {
11516 public: 0x02facafd,
11517 private: 0x02fac398
11518 },
11519 pubKeyHash: 0x1e,
11520 scriptHash: 0x16,
11521 wif: 0x9e,
11522 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11523 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11524 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11525 estimateFee: estimateFee('dogecoin')
11526 },
ab78acc6
IC
11527 viacoin: {
11528 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11529 bip32: {
ab78acc6
IC
11530 public: 0x0488b21e,
11531 private: 0x0488ade4
ebd8d4e8 11532 },
ab78acc6
IC
11533 pubKeyHash: 0x47,
11534 scriptHash: 0x21,
11535 wif: 0xc7,
11536 dustThreshold: 560,
11537 dustSoftThreshold: 100000,
11538 feePerKb: 100000, //
11539 estimateFee: estimateFee('viacoin')
ebd8d4e8 11540 },
ab78acc6
IC
11541 viacointestnet: {
11542 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11543 bip32: {
11544 public: 0x043587cf,
11545 private: 0x04358394
11546 },
ab78acc6 11547 pubKeyHash: 0x7f,
ebd8d4e8 11548 scriptHash: 0xc4,
ab78acc6
IC
11549 wif: 0xff,
11550 dustThreshold: 560,
11551 dustSoftThreshold: 100000,
11552 feePerKb: 100000,
11553 estimateFee: estimateFee('viacointestnet')
11554 },
11555 gamerscoin: {
11556 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11557 bip32: {
11558 public: 0x019da462,
11559 private: 0x019d9cfe
11560 },
11561 pubKeyHash: 0x26,
11562 scriptHash: 0x05,
11563 wif: 0xA6,
11564 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11565 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11566 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11567 estimateFee: estimateFee('gamerscoin')
11568 },
11569 jumbucks: {
11570 magicPrefix: '\x19Jumbucks Signed Message:\n',
11571 bip32: {
11572 public: 0x037a689a,
11573 private: 0x037a6460
11574 },
11575 pubKeyHash: 0x2b,
11576 scriptHash: 0x05,
11577 wif: 0xab,
11578 dustThreshold: 0,
11579 dustSoftThreshold: 10000,
ebd8d4e8 11580 feePerKb: 10000,
ab78acc6
IC
11581 estimateFee: estimateFee('jumbucks')
11582 },
11583 zetacoin: {
11584 magicPrefix: '\x18Zetacoin Signed Message:\n',
11585 bip32: {
11586 public: 0x0488b21e,
11587 private: 0x0488ade4
11588 },
11589 pubKeyHash: 0x50,
11590 scriptHash: 0x09,
11591 wif: 0xe0,
11592 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11593 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11594 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11595 }
11596}
11597
ab78acc6
IC
11598function estimateFee (type) {
11599 return function (tx) {
ebd8d4e8
IC
11600 var network = networks[type]
11601 var baseFee = network.feePerKb
11602 var byteSize = tx.toBuffer().length
11603
11604 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11605 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11606
ab78acc6 11607 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11608 if (e.value < network.dustSoftThreshold) {
11609 fee += baseFee
11610 }
11611 })
11612
11613 return fee
11614 }
11615}
11616
11617module.exports = networks
11618
ab78acc6 11619},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11620module.exports = {
11621 // push value
ab78acc6
IC
11622 OP_FALSE: 0,
11623 OP_0: 0,
11624 OP_PUSHDATA1: 76,
11625 OP_PUSHDATA2: 77,
11626 OP_PUSHDATA4: 78,
11627 OP_1NEGATE: 79,
11628 OP_RESERVED: 80,
11629 OP_1: 81,
11630 OP_TRUE: 81,
11631 OP_2: 82,
11632 OP_3: 83,
11633 OP_4: 84,
11634 OP_5: 85,
11635 OP_6: 86,
11636 OP_7: 87,
11637 OP_8: 88,
11638 OP_9: 89,
11639 OP_10: 90,
11640 OP_11: 91,
11641 OP_12: 92,
11642 OP_13: 93,
11643 OP_14: 94,
11644 OP_15: 95,
11645 OP_16: 96,
ebd8d4e8
IC
11646
11647 // control
ab78acc6
IC
11648 OP_NOP: 97,
11649 OP_VER: 98,
11650 OP_IF: 99,
11651 OP_NOTIF: 100,
11652 OP_VERIF: 101,
11653 OP_VERNOTIF: 102,
11654 OP_ELSE: 103,
11655 OP_ENDIF: 104,
11656 OP_VERIFY: 105,
11657 OP_RETURN: 106,
ebd8d4e8
IC
11658
11659 // stack ops
ab78acc6
IC
11660 OP_TOALTSTACK: 107,
11661 OP_FROMALTSTACK: 108,
11662 OP_2DROP: 109,
11663 OP_2DUP: 110,
11664 OP_3DUP: 111,
11665 OP_2OVER: 112,
11666 OP_2ROT: 113,
11667 OP_2SWAP: 114,
11668 OP_IFDUP: 115,
11669 OP_DEPTH: 116,
11670 OP_DROP: 117,
11671 OP_DUP: 118,
11672 OP_NIP: 119,
11673 OP_OVER: 120,
11674 OP_PICK: 121,
11675 OP_ROLL: 122,
11676 OP_ROT: 123,
11677 OP_SWAP: 124,
11678 OP_TUCK: 125,
ebd8d4e8
IC
11679
11680 // splice ops
ab78acc6
IC
11681 OP_CAT: 126,
11682 OP_SUBSTR: 127,
11683 OP_LEFT: 128,
11684 OP_RIGHT: 129,
11685 OP_SIZE: 130,
ebd8d4e8
IC
11686
11687 // bit logic
ab78acc6
IC
11688 OP_INVERT: 131,
11689 OP_AND: 132,
11690 OP_OR: 133,
11691 OP_XOR: 134,
11692 OP_EQUAL: 135,
11693 OP_EQUALVERIFY: 136,
11694 OP_RESERVED1: 137,
11695 OP_RESERVED2: 138,
ebd8d4e8
IC
11696
11697 // numeric
ab78acc6
IC
11698 OP_1ADD: 139,
11699 OP_1SUB: 140,
11700 OP_2MUL: 141,
11701 OP_2DIV: 142,
11702 OP_NEGATE: 143,
11703 OP_ABS: 144,
11704 OP_NOT: 145,
11705 OP_0NOTEQUAL: 146,
11706
11707 OP_ADD: 147,
11708 OP_SUB: 148,
11709 OP_MUL: 149,
11710 OP_DIV: 150,
11711 OP_MOD: 151,
11712 OP_LSHIFT: 152,
11713 OP_RSHIFT: 153,
11714
11715 OP_BOOLAND: 154,
11716 OP_BOOLOR: 155,
11717 OP_NUMEQUAL: 156,
11718 OP_NUMEQUALVERIFY: 157,
11719 OP_NUMNOTEQUAL: 158,
11720 OP_LESSTHAN: 159,
11721 OP_GREATERTHAN: 160,
11722 OP_LESSTHANOREQUAL: 161,
11723 OP_GREATERTHANOREQUAL: 162,
11724 OP_MIN: 163,
11725 OP_MAX: 164,
11726
11727 OP_WITHIN: 165,
ebd8d4e8
IC
11728
11729 // crypto
ab78acc6
IC
11730 OP_RIPEMD160: 166,
11731 OP_SHA1: 167,
11732 OP_SHA256: 168,
11733 OP_HASH160: 169,
11734 OP_HASH256: 170,
11735 OP_CODESEPARATOR: 171,
11736 OP_CHECKSIG: 172,
11737 OP_CHECKSIGVERIFY: 173,
11738 OP_CHECKMULTISIG: 174,
11739 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11740
11741 // expansion
ab78acc6
IC
11742 OP_NOP1: 176,
11743 OP_NOP2: 177,
11744 OP_NOP3: 178,
11745 OP_NOP4: 179,
11746 OP_NOP5: 180,
11747 OP_NOP6: 181,
11748 OP_NOP7: 182,
11749 OP_NOP8: 183,
11750 OP_NOP9: 184,
11751 OP_NOP10: 185,
ebd8d4e8
IC
11752
11753 // template matching params
ab78acc6
IC
11754 OP_PUBKEYHASH: 253,
11755 OP_PUBKEY: 254,
11756 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11757}
11758
ab78acc6 11759},{}],68:[function(require,module,exports){
ebd8d4e8 11760(function (Buffer){
ab78acc6
IC
11761var assert = require('assert')
11762var bufferutils = require('./bufferutils')
11763var crypto = require('./crypto')
11764var typeForce = require('typeforce')
11765var opcodes = require('./opcodes')
ebd8d4e8 11766
ab78acc6
IC
11767function Script (buffer, chunks) {
11768 typeForce('Buffer', buffer)
11769 typeForce('Array', chunks)
ebd8d4e8
IC
11770
11771 this.buffer = buffer
11772 this.chunks = chunks
11773}
11774
ab78acc6 11775Script.fromASM = function (asm) {
ebd8d4e8 11776 var strChunks = asm.split(' ')
ab78acc6
IC
11777 var chunks = strChunks.map(function (strChunk) {
11778 // opcode
ebd8d4e8
IC
11779 if (strChunk in opcodes) {
11780 return opcodes[strChunk]
11781
ab78acc6 11782 // data chunk
ebd8d4e8
IC
11783 } else {
11784 return new Buffer(strChunk, 'hex')
11785 }
11786 })
11787
11788 return Script.fromChunks(chunks)
11789}
11790
ab78acc6 11791Script.fromBuffer = function (buffer) {
ebd8d4e8 11792 var chunks = []
ebd8d4e8
IC
11793 var i = 0
11794
11795 while (i < buffer.length) {
11796 var opcode = buffer.readUInt8(i)
11797
ab78acc6 11798 // data chunk
ebd8d4e8
IC
11799 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11800 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11801
11802 // did reading a pushDataInt fail? return non-chunked script
11803 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11804 i += d.size
11805
ab78acc6
IC
11806 // attempt to read too much data?
11807 if (i + d.number > buffer.length) return new Script(buffer, [])
11808
ebd8d4e8
IC
11809 var data = buffer.slice(i, i + d.number)
11810 i += d.number
11811
11812 chunks.push(data)
11813
ab78acc6 11814 // opcode
ebd8d4e8
IC
11815 } else {
11816 chunks.push(opcode)
11817
11818 i += 1
11819 }
11820 }
11821
11822 return new Script(buffer, chunks)
11823}
11824
ab78acc6
IC
11825Script.fromChunks = function (chunks) {
11826 typeForce('Array', chunks)
ebd8d4e8 11827
ab78acc6
IC
11828 var bufferSize = chunks.reduce(function (accum, chunk) {
11829 // data chunk
ebd8d4e8
IC
11830 if (Buffer.isBuffer(chunk)) {
11831 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11832 }
11833
ab78acc6 11834 // opcode
ebd8d4e8
IC
11835 return accum + 1
11836 }, 0.0)
11837
11838 var buffer = new Buffer(bufferSize)
11839 var offset = 0
11840
ab78acc6
IC
11841 chunks.forEach(function (chunk) {
11842 // data chunk
ebd8d4e8
IC
11843 if (Buffer.isBuffer(chunk)) {
11844 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11845
11846 chunk.copy(buffer, offset)
11847 offset += chunk.length
11848
ab78acc6 11849 // opcode
ebd8d4e8
IC
11850 } else {
11851 buffer.writeUInt8(chunk, offset)
11852 offset += 1
11853 }
11854 })
11855
11856 assert.equal(offset, buffer.length, 'Could not decode chunks')
11857 return new Script(buffer, chunks)
11858}
11859
ab78acc6 11860Script.fromHex = function (hex) {
ebd8d4e8
IC
11861 return Script.fromBuffer(new Buffer(hex, 'hex'))
11862}
11863
ebd8d4e8
IC
11864Script.EMPTY = Script.fromChunks([])
11865
ab78acc6 11866Script.prototype.getHash = function () {
ebd8d4e8
IC
11867 return crypto.hash160(this.buffer)
11868}
11869
11870// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11871Script.prototype.without = function (needle) {
11872 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11873 return op !== needle
11874 }))
11875}
11876
ebd8d4e8
IC
11877var reverseOps = []
11878for (var op in opcodes) {
11879 var code = opcodes[op]
11880 reverseOps[code] = op
11881}
11882
ab78acc6
IC
11883Script.prototype.toASM = function () {
11884 return this.chunks.map(function (chunk) {
11885 // data chunk
ebd8d4e8
IC
11886 if (Buffer.isBuffer(chunk)) {
11887 return chunk.toString('hex')
11888
ab78acc6 11889 // opcode
ebd8d4e8
IC
11890 } else {
11891 return reverseOps[chunk]
11892 }
11893 }).join(' ')
11894}
11895
ab78acc6 11896Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11897 return this.buffer
11898}
11899
ab78acc6 11900Script.prototype.toHex = function () {
ebd8d4e8
IC
11901 return this.toBuffer().toString('hex')
11902}
11903
11904module.exports = Script
11905
ab78acc6
IC
11906}).call(this,require("buffer").Buffer)
11907},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11908(function (Buffer){
ab78acc6
IC
11909var assert = require('assert')
11910var ops = require('./opcodes')
11911var typeForce = require('typeforce')
ebd8d4e8 11912
ab78acc6 11913var ecurve = require('ecurve')
ebd8d4e8
IC
11914var curve = ecurve.getCurveByName('secp256k1')
11915
ab78acc6
IC
11916var ECSignature = require('./ecsignature')
11917var Script = require('./script')
ebd8d4e8 11918
ab78acc6 11919function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11920 if (!Buffer.isBuffer(buffer)) return false
11921
11922 try {
ebd8d4e8
IC
11923 ecurve.Point.decodeFrom(curve, buffer)
11924 } catch (e) {
ab78acc6
IC
11925 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11926 throw e
ebd8d4e8
IC
11927
11928 return false
11929 }
11930
11931 return true
11932}
11933
ab78acc6 11934function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11935 if (!Buffer.isBuffer(buffer)) return false
11936
11937 try {
11938 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11939 } catch (e) {
11940 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/))) {
11941 throw e
11942 }
ebd8d4e8
IC
11943
11944 return false
11945 }
11946
11947 return true
11948}
11949
ab78acc6
IC
11950function isPubKeyHashInput (script) {
11951 return script.chunks.length === 2 &&
11952 isCanonicalSignature(script.chunks[0]) &&
11953 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11954}
11955
ab78acc6
IC
11956function isPubKeyHashOutput (script) {
11957 return script.chunks.length === 5 &&
11958 script.chunks[0] === ops.OP_DUP &&
11959 script.chunks[1] === ops.OP_HASH160 &&
11960 Buffer.isBuffer(script.chunks[2]) &&
11961 script.chunks[2].length === 20 &&
11962 script.chunks[3] === ops.OP_EQUALVERIFY &&
11963 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11964}
11965
ab78acc6
IC
11966function isPubKeyInput (script) {
11967 return script.chunks.length === 1 &&
11968 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11969}
11970
ab78acc6
IC
11971function isPubKeyOutput (script) {
11972 return script.chunks.length === 2 &&
11973 isCanonicalPubKey(script.chunks[0]) &&
11974 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11975}
11976
ab78acc6
IC
11977function isScriptHashInput (script, allowIncomplete) {
11978 if (script.chunks.length < 2) return false
ebd8d4e8 11979
ab78acc6 11980 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11981 if (!Buffer.isBuffer(lastChunk)) return false
11982
ab78acc6
IC
11983 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11984 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11985
ab78acc6
IC
11986 // is redeemScript a valid script?
11987 if (redeemScript.chunks.length === 0) return false
11988
11989 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11990}
11991
ab78acc6
IC
11992function isScriptHashOutput (script) {
11993 return script.chunks.length === 3 &&
11994 script.chunks[0] === ops.OP_HASH160 &&
11995 Buffer.isBuffer(script.chunks[1]) &&
11996 script.chunks[1].length === 20 &&
11997 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11998}
11999
ab78acc6
IC
12000// allowIncomplete is to account for combining signatures
12001// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
12002function isMultisigInput (script, allowIncomplete) {
12003 if (script.chunks.length < 2) return false
12004 if (script.chunks[0] !== ops.OP_0) return false
12005
12006 if (allowIncomplete) {
12007 return script.chunks.slice(1).every(function (chunk) {
12008 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12009 })
12010 }
12011
12012 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
12013}
12014
ab78acc6
IC
12015function isMultisigOutput (script) {
12016 if (script.chunks.length < 4) return false
12017 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 12018
ab78acc6
IC
12019 var mOp = script.chunks[0]
12020 if (mOp === ops.OP_0) return false
12021 if (mOp < ops.OP_1) return false
12022 if (mOp > ops.OP_16) return false
ebd8d4e8 12023
ab78acc6
IC
12024 var nOp = script.chunks[script.chunks.length - 2]
12025 if (nOp === ops.OP_0) return false
12026 if (nOp < ops.OP_1) return false
12027 if (nOp > ops.OP_16) return false
ebd8d4e8 12028
ab78acc6
IC
12029 var m = mOp - (ops.OP_1 - 1)
12030 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
12031 if (n < m) return false
12032
ab78acc6 12033 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
12034 if (n < pubKeys.length) return false
12035
12036 return pubKeys.every(isCanonicalPubKey)
12037}
12038
ab78acc6
IC
12039function isNullDataOutput (script) {
12040 return script.chunks[0] === ops.OP_RETURN
12041}
12042
12043function classifyOutput (script) {
12044 typeForce('Script', script)
12045
12046 if (isPubKeyHashOutput(script)) {
12047 return 'pubkeyhash'
12048 } else if (isScriptHashOutput(script)) {
12049 return 'scripthash'
12050 } else if (isMultisigOutput(script)) {
12051 return 'multisig'
12052 } else if (isPubKeyOutput(script)) {
12053 return 'pubkey'
12054 } else if (isNullDataOutput(script)) {
12055 return 'nulldata'
12056 }
12057
12058 return 'nonstandard'
12059}
12060
12061function classifyInput (script, allowIncomplete) {
12062 typeForce('Script', script)
12063
12064 if (isPubKeyHashInput(script)) {
12065 return 'pubkeyhash'
12066 } else if (isMultisigInput(script, allowIncomplete)) {
12067 return 'multisig'
12068 } else if (isScriptHashInput(script, allowIncomplete)) {
12069 return 'scripthash'
12070 } else if (isPubKeyInput(script)) {
12071 return 'pubkey'
12072 }
12073
12074 return 'nonstandard'
ebd8d4e8
IC
12075}
12076
12077// Standard Script Templates
12078// {pubKey} OP_CHECKSIG
ab78acc6 12079function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12080 return Script.fromChunks([
12081 pubKey.toBuffer(),
ab78acc6 12082 ops.OP_CHECKSIG
ebd8d4e8
IC
12083 ])
12084}
12085
12086// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12087function pubKeyHashOutput (hash) {
12088 typeForce('Buffer', hash)
ebd8d4e8
IC
12089
12090 return Script.fromChunks([
ab78acc6
IC
12091 ops.OP_DUP,
12092 ops.OP_HASH160,
ebd8d4e8 12093 hash,
ab78acc6
IC
12094 ops.OP_EQUALVERIFY,
12095 ops.OP_CHECKSIG
ebd8d4e8
IC
12096 ])
12097}
12098
12099// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12100function scriptHashOutput (hash) {
12101 typeForce('Buffer', hash)
ebd8d4e8
IC
12102
12103 return Script.fromChunks([
ab78acc6 12104 ops.OP_HASH160,
ebd8d4e8 12105 hash,
ab78acc6 12106 ops.OP_EQUAL
ebd8d4e8
IC
12107 ])
12108}
12109
12110// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12111function multisigOutput (m, pubKeys) {
12112 typeForce(['ECPubKey'], pubKeys)
12113
ebd8d4e8
IC
12114 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12115
ab78acc6 12116 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12117 return pubKey.toBuffer()
12118 })
12119 var n = pubKeys.length
12120
12121 return Script.fromChunks([].concat(
ab78acc6 12122 (ops.OP_1 - 1) + m,
ebd8d4e8 12123 pubKeyBuffers,
ab78acc6
IC
12124 (ops.OP_1 - 1) + n,
12125 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12126 ))
12127}
12128
12129// {signature}
ab78acc6
IC
12130function pubKeyInput (signature) {
12131 typeForce('Buffer', signature)
ebd8d4e8
IC
12132
12133 return Script.fromChunks([signature])
12134}
12135
12136// {signature} {pubKey}
ab78acc6
IC
12137function pubKeyHashInput (signature, pubKey) {
12138 typeForce('Buffer', signature)
ebd8d4e8
IC
12139
12140 return Script.fromChunks([signature, pubKey.toBuffer()])
12141}
12142
12143// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12144function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12145 return Script.fromChunks([].concat(
12146 scriptSig.chunks,
12147 scriptPubKey.toBuffer()
12148 ))
12149}
12150
12151// OP_0 [signatures ...]
ab78acc6 12152function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12153 if (scriptPubKey) {
ab78acc6
IC
12154 assert(isMultisigOutput(scriptPubKey))
12155
12156 var mOp = scriptPubKey.chunks[0]
12157 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12158 var m = mOp - (ops.OP_1 - 1)
12159 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12160
ab78acc6
IC
12161 assert(signatures.length >= m, 'Not enough signatures provided')
12162 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12163 }
12164
ab78acc6
IC
12165 return Script.fromChunks([].concat(ops.OP_0, signatures))
12166}
12167
12168function nullDataOutput (data) {
12169 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12170}
12171
12172module.exports = {
ab78acc6
IC
12173 isCanonicalPubKey: isCanonicalPubKey,
12174 isCanonicalSignature: isCanonicalSignature,
12175 isPubKeyHashInput: isPubKeyHashInput,
12176 isPubKeyHashOutput: isPubKeyHashOutput,
12177 isPubKeyInput: isPubKeyInput,
12178 isPubKeyOutput: isPubKeyOutput,
12179 isScriptHashInput: isScriptHashInput,
12180 isScriptHashOutput: isScriptHashOutput,
12181 isMultisigInput: isMultisigInput,
12182 isMultisigOutput: isMultisigOutput,
12183 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12184 classifyOutput: classifyOutput,
ab78acc6
IC
12185 classifyInput: classifyInput,
12186 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12187 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12188 scriptHashOutput: scriptHashOutput,
12189 multisigOutput: multisigOutput,
ebd8d4e8 12190 pubKeyInput: pubKeyInput,
ab78acc6 12191 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12192 scriptHashInput: scriptHashInput,
ab78acc6
IC
12193 multisigInput: multisigInput,
12194 dataOutput: function (data) {
12195 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12196 return nullDataOutput(data)
12197 },
12198 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12199}
12200
ab78acc6
IC
12201}).call(this,require("buffer").Buffer)
12202},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12203(function (Buffer){
ab78acc6
IC
12204var assert = require('assert')
12205var bufferutils = require('./bufferutils')
12206var crypto = require('./crypto')
12207var typeForce = require('typeforce')
12208var opcodes = require('./opcodes')
12209var scripts = require('./scripts')
12210
12211var Address = require('./address')
12212var ECSignature = require('./ecsignature')
12213var Script = require('./script')
12214
12215function Transaction () {
12216 this.version = 1
12217 this.locktime = 0
12218 this.ins = []
12219 this.outs = []
12220}
ebd8d4e8
IC
12221
12222Transaction.DEFAULT_SEQUENCE = 0xffffffff
12223Transaction.SIGHASH_ALL = 0x01
12224Transaction.SIGHASH_NONE = 0x02
12225Transaction.SIGHASH_SINGLE = 0x03
12226Transaction.SIGHASH_ANYONECANPAY = 0x80
12227
ab78acc6
IC
12228Transaction.fromBuffer = function (buffer, __disableAssert) {
12229 var offset = 0
12230 function readSlice (n) {
12231 offset += n
12232 return buffer.slice(offset - n, offset)
12233 }
12234
12235 function readUInt32 () {
12236 var i = buffer.readUInt32LE(offset)
12237 offset += 4
12238 return i
12239 }
12240
12241 function readUInt64 () {
12242 var i = bufferutils.readUInt64LE(buffer, offset)
12243 offset += 8
12244 return i
12245 }
12246
12247 function readVarInt () {
12248 var vi = bufferutils.readVarInt(buffer, offset)
12249 offset += vi.size
12250 return vi.number
12251 }
12252
12253 function readScript () {
12254 return Script.fromBuffer(readSlice(readVarInt()))
12255 }
12256
12257 function readGenerationScript () {
12258 return new Script(readSlice(readVarInt()), [])
12259 }
12260
12261 var tx = new Transaction()
12262 tx.version = readUInt32()
12263
12264 var vinLen = readVarInt()
12265 for (var i = 0; i < vinLen; ++i) {
12266 var hash = readSlice(32)
12267
12268 if (Transaction.isCoinbaseHash(hash)) {
12269 tx.ins.push({
12270 hash: hash,
12271 index: readUInt32(),
12272 script: readGenerationScript(),
12273 sequence: readUInt32()
12274 })
12275 } else {
12276 tx.ins.push({
12277 hash: hash,
12278 index: readUInt32(),
12279 script: readScript(),
12280 sequence: readUInt32()
12281 })
12282 }
12283 }
12284
12285 var voutLen = readVarInt()
12286 for (i = 0; i < voutLen; ++i) {
12287 tx.outs.push({
12288 value: readUInt64(),
12289 script: readScript()
12290 })
12291 }
12292
12293 tx.locktime = readUInt32()
12294
12295 if (!__disableAssert) {
12296 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12297 }
12298
12299 return tx
12300}
12301
12302Transaction.fromHex = function (hex) {
12303 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12304}
12305
12306Transaction.isCoinbaseHash = function (buffer) {
12307 return Array.prototype.every.call(buffer, function (x) {
12308 return x === 0
12309 })
ebd8d4e8
IC
12310}
12311
12312/**
ab78acc6 12313 * Create a new txIn.
ebd8d4e8
IC
12314 *
12315 * Can be called with any of:
12316 *
12317 * - A transaction and an index
12318 * - A transaction hash and an index
12319 *
12320 * Note that this method does not sign the created input.
12321 */
ab78acc6
IC
12322Transaction.prototype.addInput = function (hash, index, sequence, script) {
12323 if (sequence === undefined || sequence === null) {
12324 sequence = Transaction.DEFAULT_SEQUENCE
12325 }
ebd8d4e8 12326
ab78acc6 12327 script = script || Script.EMPTY
ebd8d4e8 12328
ab78acc6 12329 if (typeof hash === 'string') {
ebd8d4e8 12330 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12331 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12332 } else if (hash instanceof Transaction) {
12333 hash = hash.getHash()
ebd8d4e8
IC
12334 }
12335
ab78acc6
IC
12336 typeForce('Buffer', hash)
12337 typeForce('Number', index)
12338 typeForce('Number', sequence)
12339 typeForce('Script', script)
12340
ebd8d4e8 12341 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12342
ab78acc6 12343 // Add the input and return the input's index
ebd8d4e8
IC
12344 return (this.ins.push({
12345 hash: hash,
12346 index: index,
ab78acc6 12347 script: script,
ebd8d4e8
IC
12348 sequence: sequence
12349 }) - 1)
12350}
12351
12352/**
ab78acc6 12353 * Create a new txOut.
ebd8d4e8
IC
12354 *
12355 * Can be called with:
12356 *
12357 * - A base58 address string and a value
12358 * - An Address object and a value
12359 * - A scriptPubKey Script and a value
12360 */
ab78acc6 12361Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12362 // Attempt to get a valid address if it's a base58 address string
12363 if (typeof scriptPubKey === 'string') {
12364 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12365 }
12366
12367 // Attempt to get a valid script if it's an Address object
12368 if (scriptPubKey instanceof Address) {
ab78acc6 12369 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12370 }
12371
ab78acc6
IC
12372 typeForce('Script', scriptPubKey)
12373 typeForce('Number', value)
12374
12375 // Add the output and return the output's index
ebd8d4e8
IC
12376 return (this.outs.push({
12377 script: scriptPubKey,
ab78acc6 12378 value: value
ebd8d4e8
IC
12379 }) - 1)
12380}
12381
ab78acc6
IC
12382Transaction.prototype.clone = function () {
12383 var newTx = new Transaction()
12384 newTx.version = this.version
12385 newTx.locktime = this.locktime
12386
12387 newTx.ins = this.ins.map(function (txIn) {
12388 return {
12389 hash: txIn.hash,
12390 index: txIn.index,
12391 script: txIn.script,
12392 sequence: txIn.sequence
12393 }
12394 })
12395
12396 newTx.outs = this.outs.map(function (txOut) {
12397 return {
12398 script: txOut.script,
12399 value: txOut.value
12400 }
12401 })
12402
12403 return newTx
12404}
12405
12406/**
12407 * Hash transaction for signing a specific input.
12408 *
12409 * Bitcoin uses a different hash for each signed transaction input. This
12410 * method copies the transaction, makes the necessary changes based on the
12411 * hashType, serializes and finally hashes the result. This hash can then be
12412 * used to sign the transaction input in question.
12413 */
12414Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12415 // FIXME: remove in 2.x.y
12416 if (arguments[0] instanceof Script) {
12417 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12418
12419 // swap the arguments (must be stored in tmp, arguments is special)
12420 var tmp = arguments[0]
12421 inIndex = arguments[1]
12422 prevOutScript = tmp
12423 }
12424
12425 typeForce('Number', inIndex)
12426 typeForce('Script', prevOutScript)
12427 typeForce('Number', hashType)
12428
12429 assert(inIndex >= 0, 'Invalid vin index')
12430 assert(inIndex < this.ins.length, 'Invalid vin index')
12431
12432 var txTmp = this.clone()
12433 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12434
12435 // Blank out other inputs' signatures
12436 txTmp.ins.forEach(function (txIn) {
12437 txIn.script = Script.EMPTY
12438 })
12439 txTmp.ins[inIndex].script = hashScript
12440
12441 var hashTypeModifier = hashType & 0x1f
12442
12443 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12444 assert(false, 'SIGHASH_NONE not yet supported')
12445 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12446 assert(false, 'SIGHASH_SINGLE not yet supported')
12447 }
12448
12449 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12450 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12451 }
12452
12453 var hashTypeBuffer = new Buffer(4)
12454 hashTypeBuffer.writeInt32LE(hashType, 0)
12455
12456 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12457 return crypto.hash256(buffer)
12458}
12459
12460Transaction.prototype.getHash = function () {
12461 return crypto.hash256(this.toBuffer())
12462}
12463
12464Transaction.prototype.getId = function () {
12465 // TxHash is little-endian, we need big-endian
12466 return bufferutils.reverse(this.getHash()).toString('hex')
12467}
12468
ebd8d4e8 12469Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12470 function scriptSize (script) {
12471 var length = script.buffer.length
ebd8d4e8 12472
ab78acc6
IC
12473 return bufferutils.varIntSize(length) + length
12474 }
ebd8d4e8
IC
12475
12476 var buffer = new Buffer(
12477 8 +
12478 bufferutils.varIntSize(this.ins.length) +
12479 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12480 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12481 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12482 )
12483
12484 var offset = 0
ab78acc6 12485 function writeSlice (slice) {
ebd8d4e8
IC
12486 slice.copy(buffer, offset)
12487 offset += slice.length
12488 }
ab78acc6
IC
12489
12490 function writeUInt32 (i) {
ebd8d4e8
IC
12491 buffer.writeUInt32LE(i, offset)
12492 offset += 4
12493 }
ab78acc6
IC
12494
12495 function writeUInt64 (i) {
ebd8d4e8
IC
12496 bufferutils.writeUInt64LE(buffer, i, offset)
12497 offset += 8
12498 }
ab78acc6
IC
12499
12500 function writeVarInt (i) {
ebd8d4e8
IC
12501 var n = bufferutils.writeVarInt(buffer, i, offset)
12502 offset += n
12503 }
12504
12505 writeUInt32(this.version)
12506 writeVarInt(this.ins.length)
12507
ab78acc6
IC
12508 this.ins.forEach(function (txIn) {
12509 writeSlice(txIn.hash)
12510 writeUInt32(txIn.index)
12511 writeVarInt(txIn.script.buffer.length)
12512 writeSlice(txIn.script.buffer)
12513 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12514 })
12515
12516 writeVarInt(this.outs.length)
ab78acc6
IC
12517 this.outs.forEach(function (txOut) {
12518 writeUInt64(txOut.value)
12519 writeVarInt(txOut.script.buffer.length)
12520 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12521 })
12522
12523 writeUInt32(this.locktime)
12524
12525 return buffer
12526}
12527
ab78acc6 12528Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12529 return this.toBuffer().toString('hex')
12530}
12531
ab78acc6
IC
12532Transaction.prototype.setInputScript = function (index, script) {
12533 typeForce('Number', index)
12534 typeForce('Script', script)
12535
12536 this.ins[index].script = script
12537}
12538
12539// FIXME: remove in 2.x.y
12540Transaction.prototype.sign = function (index, privKey, hashType) {
12541 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12542
12543 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12544 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12545
12546 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12547 this.setInputScript(index, scriptSig)
12548}
12549
12550// FIXME: remove in 2.x.y
12551Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12552 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12553
12554 hashType = hashType || Transaction.SIGHASH_ALL
12555
12556 var hash = this.hashForSignature(index, prevOutScript, hashType)
12557 var signature = privKey.sign(hash)
12558
12559 return signature.toScriptSignature(hashType)
12560}
12561
12562// FIXME: remove in 2.x.y
12563Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12564 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12565
12566 var parsed = ECSignature.parseScriptSignature(buffer)
12567 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12568
12569 return pubKey.verify(hash, parsed.signature)
12570}
12571
12572module.exports = Transaction
12573
12574}).call(this,require("buffer").Buffer)
12575},{"./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){
12576(function (Buffer){
12577var assert = require('assert')
12578var ops = require('./opcodes')
12579var scripts = require('./scripts')
12580
12581var ECPubKey = require('./ecpubkey')
12582var ECSignature = require('./ecsignature')
12583var Script = require('./script')
12584var Transaction = require('./transaction')
12585
12586function extractInput (txIn) {
12587 var redeemScript
12588 var scriptSig = txIn.script
12589 var prevOutScript
12590 var prevOutType = scripts.classifyInput(scriptSig, true)
12591 var scriptType
12592
12593 // Re-classify if scriptHash
12594 if (prevOutType === 'scripthash') {
12595 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12596 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12597
12598 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12599 scriptType = scripts.classifyInput(scriptSig, true)
12600 } else {
12601 scriptType = prevOutType
12602 }
12603
12604 // Extract hashType, pubKeys and signatures
12605 var hashType, parsed, pubKeys, signatures
12606
12607 switch (scriptType) {
12608 case 'pubkeyhash': {
12609 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12610 hashType = parsed.hashType
12611 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12612 signatures = [parsed.signature]
12613 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12614
12615 break
12616 }
12617
12618 case 'pubkey': {
12619 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12620 hashType = parsed.hashType
12621 signatures = [parsed.signature]
12622
12623 if (redeemScript) {
12624 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12625 }
12626
12627 break
12628 }
12629
12630 case 'multisig': {
12631 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12632 if (chunk === ops.OP_0) return chunk
12633
12634 var parsed = ECSignature.parseScriptSignature(chunk)
12635 hashType = parsed.hashType
12636
12637 return parsed.signature
12638 })
12639
12640 if (redeemScript) {
12641 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12642 }
12643
12644 break
12645 }
12646 }
12647
12648 return {
12649 hashType: hashType,
12650 prevOutScript: prevOutScript,
12651 prevOutType: prevOutType,
12652 pubKeys: pubKeys,
12653 redeemScript: redeemScript,
12654 scriptType: scriptType,
12655 signatures: signatures
12656 }
12657}
12658
12659function TransactionBuilder () {
12660 this.prevTxMap = {}
12661 this.prevOutScripts = {}
12662 this.prevOutTypes = {}
12663
12664 this.inputs = []
12665 this.tx = new Transaction()
12666}
12667
12668TransactionBuilder.fromTransaction = function (transaction) {
12669 var txb = new TransactionBuilder()
12670
12671 // Copy other transaction fields
12672 txb.tx.version = transaction.version
12673 txb.tx.locktime = transaction.locktime
12674
12675 // Extract/add inputs
12676 transaction.ins.forEach(function (txIn) {
12677 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12678 })
12679
12680 // Extract/add outputs
12681 transaction.outs.forEach(function (txOut) {
12682 txb.addOutput(txOut.script, txOut.value)
12683 })
12684
12685 // Extract/add signatures
12686 txb.inputs = transaction.ins.map(function (txIn) {
12687 // TODO: remove me after testcase added
12688 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12689
12690 // Ignore empty scripts
12691 if (txIn.script.buffer.length === 0) return {}
12692
12693 return extractInput(txIn)
12694 })
12695
12696 return txb
12697}
12698
12699TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12700 var prevOutHash
12701
12702 // txId
12703 if (typeof prevTx === 'string') {
12704 prevOutHash = new Buffer(prevTx, 'hex')
12705
12706 // TxId hex is big-endian, we want little-endian hash
12707 Array.prototype.reverse.call(prevOutHash)
12708
12709 // Transaction
12710 } else if (prevTx instanceof Transaction) {
12711 prevOutHash = prevTx.getHash()
12712 prevOutScript = prevTx.outs[index].script
12713
12714 // txHash
12715 } else {
12716 prevOutHash = prevTx
12717 }
12718
12719 var input = {}
12720 if (prevOutScript) {
12721 var prevOutType = scripts.classifyOutput(prevOutScript)
12722
12723 // if we can, extract pubKey information
12724 switch (prevOutType) {
12725 case 'multisig': {
12726 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12727 break
12728 }
12729
12730 case 'pubkey': {
12731 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12732 break
12733 }
12734 }
12735
12736 if (prevOutType !== 'scripthash') {
12737 input.scriptType = prevOutType
12738 }
12739
12740 input.prevOutScript = prevOutScript
12741 input.prevOutType = prevOutType
12742 }
12743
12744 assert(this.inputs.every(function (input2) {
12745 if (input2.hashType === undefined) return true
12746
12747 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12748 }), 'No, this would invalidate signatures')
12749
12750 var prevOut = prevOutHash.toString('hex') + ':' + index
12751 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12752
12753 var vin = this.tx.addInput(prevOutHash, index, sequence)
12754 this.inputs[vin] = input
12755 this.prevTxMap[prevOut] = vin
12756
12757 return vin
12758}
12759
12760TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12761 assert(this.inputs.every(function (input) {
12762 if (input.hashType === undefined) return true
ebd8d4e8 12763
ab78acc6
IC
12764 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12765 }), 'No, this would invalidate signatures')
ebd8d4e8 12766
ab78acc6
IC
12767 return this.tx.addOutput(scriptPubKey, value)
12768}
ebd8d4e8 12769
ab78acc6
IC
12770TransactionBuilder.prototype.build = function () {
12771 return this.__build(false)
12772}
12773TransactionBuilder.prototype.buildIncomplete = function () {
12774 return this.__build(true)
12775}
ebd8d4e8 12776
ab78acc6
IC
12777var canSignTypes = {
12778 'pubkeyhash': true,
12779 'multisig': true,
12780 'pubkey': true
12781}
ebd8d4e8 12782
ab78acc6
IC
12783TransactionBuilder.prototype.__build = function (allowIncomplete) {
12784 if (!allowIncomplete) {
12785 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12786 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12787 }
12788
ab78acc6 12789 var tx = this.tx.clone()
ebd8d4e8 12790
ab78acc6
IC
12791 // Create script signatures from signature meta-data
12792 this.inputs.forEach(function (input, index) {
12793 var scriptType = input.scriptType
12794 var scriptSig
ebd8d4e8 12795
ab78acc6
IC
12796 if (!allowIncomplete) {
12797 assert(!!scriptType, 'Transaction is not complete')
12798 assert(scriptType in canSignTypes, scriptType + ' not supported')
12799 assert(input.signatures, 'Transaction is missing signatures')
12800 }
ebd8d4e8 12801
ab78acc6
IC
12802 if (input.signatures) {
12803 switch (scriptType) {
12804 case 'pubkeyhash': {
12805 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12806 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12807 break
12808 }
ebd8d4e8 12809
ab78acc6
IC
12810 case 'multisig': {
12811 // Array.prototype.map is sparse-compatible
12812 var msSignatures = input.signatures.map(function (signature) {
12813 return signature && signature.toScriptSignature(input.hashType)
12814 })
ebd8d4e8 12815
ab78acc6
IC
12816 // fill in blanks with OP_0
12817 if (allowIncomplete) {
12818 for (var i = 0; i < msSignatures.length; ++i) {
12819 if (msSignatures[i]) continue
ebd8d4e8 12820
ab78acc6
IC
12821 msSignatures[i] = ops.OP_0
12822 }
12823 } else {
12824 // Array.prototype.filter returns non-sparse array
12825 msSignatures = msSignatures.filter(function (x) { return x })
12826 }
ebd8d4e8 12827
ab78acc6
IC
12828 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12829 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12830 break
12831 }
ebd8d4e8 12832
ab78acc6
IC
12833 case 'pubkey': {
12834 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12835 scriptSig = scripts.pubKeyInput(pkSignature)
12836 break
12837 }
12838 }
ebd8d4e8 12839 }
ebd8d4e8 12840
ab78acc6
IC
12841 // did we build a scriptSig?
12842 if (scriptSig) {
12843 // wrap as scriptHash if necessary
12844 if (input.prevOutType === 'scripthash') {
12845 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12846 }
12847
12848 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12849 }
12850 })
12851
ab78acc6 12852 return tx
ebd8d4e8
IC
12853}
12854
ab78acc6
IC
12855TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12856 assert(index in this.inputs, 'No input at index: ' + index)
12857 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12858
ab78acc6
IC
12859 var input = this.inputs[index]
12860 var canSign = input.hashType &&
12861 input.prevOutScript &&
12862 input.prevOutType &&
12863 input.pubKeys &&
12864 input.scriptType &&
12865 input.signatures
ebd8d4e8 12866
ab78acc6
IC
12867 // are we almost ready to sign?
12868 if (canSign) {
12869 // if redeemScript was provided, enforce consistency
12870 if (redeemScript) {
12871 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12872 }
ebd8d4e8 12873
ab78acc6 12874 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12875
ab78acc6
IC
12876 // no? prepare
12877 } else {
12878 // must be pay-to-scriptHash?
12879 if (redeemScript) {
12880 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12881 if (input.prevOutScript) {
12882 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12883
12884 var scriptHash = input.prevOutScript.chunks[1]
12885 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12886 }
ebd8d4e8 12887
ab78acc6
IC
12888 var scriptType = scripts.classifyOutput(redeemScript)
12889 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12890
ab78acc6
IC
12891 var pubKeys = []
12892 switch (scriptType) {
12893 case 'multisig': {
12894 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12895 break
12896 }
ebd8d4e8 12897
ab78acc6
IC
12898 case 'pubkeyhash': {
12899 var pkh1 = redeemScript.chunks[2]
12900 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12901
ab78acc6
IC
12902 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12903 pubKeys = [privKey.pub]
12904 break
12905 }
ebd8d4e8 12906
ab78acc6
IC
12907 case 'pubkey': {
12908 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12909 break
12910 }
12911 }
ebd8d4e8 12912
ab78acc6
IC
12913 if (!input.prevOutScript) {
12914 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12915 input.prevOutType = 'scripthash'
12916 }
ebd8d4e8 12917
ab78acc6
IC
12918 input.pubKeys = pubKeys
12919 input.redeemScript = redeemScript
12920 input.scriptType = scriptType
ebd8d4e8 12921
ab78acc6
IC
12922 // cannot be pay-to-scriptHash
12923 } else {
12924 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12925
ab78acc6
IC
12926 // can we otherwise sign this?
12927 if (input.scriptType) {
12928 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12929
ab78acc6
IC
12930 // we know nothin' Jon Snow, assume pubKeyHash
12931 } else {
12932 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12933 input.prevOutType = 'pubkeyhash'
12934 input.pubKeys = [privKey.pub]
12935 input.scriptType = input.prevOutType
12936 }
12937 }
ebd8d4e8 12938
ab78acc6
IC
12939 input.hashType = hashType
12940 input.signatures = input.signatures || []
12941 }
12942
12943 var signatureScript = input.redeemScript || input.prevOutScript
12944 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12945
12946 // enforce signature order matches public keys
12947 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12948 // maintain a local copy of unmatched signatures
12949 var unmatched = input.signatures.slice()
12950
12951 input.signatures = input.pubKeys.map(function (pubKey) {
12952 var match
12953
12954 // check for any matching signatures
12955 unmatched.some(function (signature, i) {
12956 if (!pubKey.verify(signatureHash, signature)) return false
12957 match = signature
12958
12959 // remove matched signature from unmatched
12960 unmatched.splice(i, 1)
12961
12962 return true
12963 })
12964
12965 return match || undefined
12966 })
12967 }
12968
12969 // enforce in order signing of public keys
12970 assert(input.pubKeys.some(function (pubKey, i) {
12971 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12972
12973 assert(!input.signatures[i], 'Signature already exists')
12974 var signature = privKey.sign(signatureHash)
12975 input.signatures[i] = signature
12976
12977 return true
12978 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12979}
12980
ab78acc6 12981module.exports = TransactionBuilder
ebd8d4e8 12982
ab78acc6
IC
12983}).call(this,require("buffer").Buffer)
12984},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12985(function (Buffer){
ab78acc6
IC
12986var assert = require('assert')
12987var bufferutils = require('./bufferutils')
12988var typeForce = require('typeforce')
12989var networks = require('./networks')
12990var randomBytes = require('randombytes')
ebd8d4e8 12991
ab78acc6
IC
12992var Address = require('./address')
12993var HDNode = require('./hdnode')
12994var TransactionBuilder = require('./transaction_builder')
12995var Script = require('./script')
ebd8d4e8 12996
ab78acc6
IC
12997function Wallet (seed, network) {
12998 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12999
13000 seed = seed || randomBytes(32)
ebd8d4e8
IC
13001 network = network || networks.bitcoin
13002
13003 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
13004 var masterKey = HDNode.fromSeedBuffer(seed, network)
13005
13006 // HD first-level child derivation method should be hardened
13007 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13008 var accountZero = masterKey.deriveHardened(0)
13009 var externalAccount = accountZero.derive(0)
13010 var internalAccount = accountZero.derive(1)
ebd8d4e8 13011
ebd8d4e8
IC
13012 this.addresses = []
13013 this.changeAddresses = []
ab78acc6
IC
13014 this.network = network
13015 this.unspents = []
ebd8d4e8 13016
ab78acc6
IC
13017 // FIXME: remove in 2.0.0
13018 this.unspentMap = {}
ebd8d4e8 13019
ab78acc6
IC
13020 // FIXME: remove in 2.0.0
13021 var me = this
13022 this.newMasterKey = function (seed) {
13023 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13024
13025 seed = seed || randomBytes(32)
13026 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 13027
ab78acc6 13028 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
13029 externalAccount = accountZero.derive(0)
13030 internalAccount = accountZero.derive(1)
13031
13032 me.addresses = []
13033 me.changeAddresses = []
13034
ab78acc6
IC
13035 me.unspents = []
13036 me.unspentMap = {}
ebd8d4e8
IC
13037 }
13038
ab78acc6
IC
13039 this.getMasterKey = function () {
13040 return masterKey
ebd8d4e8 13041 }
ab78acc6
IC
13042 this.getAccountZero = function () {
13043 return accountZero
ebd8d4e8 13044 }
ab78acc6
IC
13045 this.getExternalAccount = function () {
13046 return externalAccount
13047 }
13048 this.getInternalAccount = function () {
13049 return internalAccount
ebd8d4e8 13050 }
ab78acc6 13051}
ebd8d4e8 13052
ab78acc6
IC
13053Wallet.prototype.createTransaction = function (to, value, options) {
13054 // FIXME: remove in 2.0.0
13055 if (typeof options !== 'object') {
13056 if (options !== undefined) {
13057 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13058
ab78acc6
IC
13059 options = {
13060 fixedFee: arguments[2],
13061 changeAddress: arguments[3]
13062 }
ebd8d4e8 13063 }
ebd8d4e8
IC
13064 }
13065
ab78acc6 13066 options = options || {}
ebd8d4e8 13067
ab78acc6 13068 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13069
ab78acc6
IC
13070 var changeAddress = options.changeAddress
13071 var fixedFee = options.fixedFee
13072 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13073
ab78acc6
IC
13074 // filter by minConf, then pending and sort by descending value
13075 var unspents = this.unspents.filter(function (unspent) {
13076 return unspent.confirmations >= minConf
13077 }).filter(function (unspent) {
13078 return !unspent.pending
13079 }).sort(function (o1, o2) {
13080 return o2.value - o1.value
13081 })
ebd8d4e8 13082
ab78acc6
IC
13083 var accum = 0
13084 var addresses = []
13085 var subTotal = value
ebd8d4e8 13086
ab78acc6
IC
13087 var txb = new TransactionBuilder()
13088 txb.addOutput(to, value)
ebd8d4e8 13089
ab78acc6
IC
13090 for (var i = 0; i < unspents.length; ++i) {
13091 var unspent = unspents[i]
13092 addresses.push(unspent.address)
ebd8d4e8 13093
ab78acc6
IC
13094 txb.addInput(unspent.txHash, unspent.index)
13095
13096 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13097
ab78acc6
IC
13098 accum += unspent.value
13099 subTotal = value + fee
13100
13101 if (accum >= subTotal) {
13102 var change = accum - subTotal
13103
13104 if (change > this.network.dustThreshold) {
13105 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13106 }
ebd8d4e8 13107
ab78acc6 13108 break
ebd8d4e8
IC
13109 }
13110 }
13111
ab78acc6 13112 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13113
ab78acc6
IC
13114 return this.signWith(txb, addresses).build()
13115}
ebd8d4e8 13116
ab78acc6
IC
13117// FIXME: remove in 2.0.0
13118Wallet.prototype.processPendingTx = function (tx) {
13119 this.__processTx(tx, true)
13120}
ebd8d4e8 13121
ab78acc6
IC
13122// FIXME: remove in 2.0.0
13123Wallet.prototype.processConfirmedTx = function (tx) {
13124 this.__processTx(tx, false)
13125}
ebd8d4e8 13126
ab78acc6
IC
13127// FIXME: remove in 2.0.0
13128Wallet.prototype.__processTx = function (tx, isPending) {
13129 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13130
ab78acc6
IC
13131 var txId = tx.getId()
13132 var txHash = tx.getHash()
ebd8d4e8 13133
ab78acc6
IC
13134 tx.outs.forEach(function (txOut, i) {
13135 var address
ebd8d4e8 13136
ab78acc6
IC
13137 try {
13138 address = Address.fromOutputScript(txOut.script, this.network).toString()
13139 } catch (e) {
13140 if (!(e.message.match(/has no matching Address/)))
13141 throw e
13142 }
13143
13144 var myAddresses = this.addresses.concat(this.changeAddresses)
13145 if (myAddresses.indexOf(address) > -1) {
13146 var lookup = txId + ':' + i
13147 if (lookup in this.unspentMap) return
13148
13149 // its unique, add it
13150 var unspent = {
13151 address: address,
13152 confirmations: 0, // no way to determine this without more information
13153 index: i,
13154 txHash: txHash,
13155 txId: txId,
13156 value: txOut.value,
13157 pending: isPending
ebd8d4e8 13158 }
ebd8d4e8 13159
ab78acc6
IC
13160 this.unspentMap[lookup] = unspent
13161 this.unspents.push(unspent)
13162 }
13163 }, this)
ebd8d4e8 13164
ab78acc6
IC
13165 tx.ins.forEach(function (txIn) {
13166 // copy and convert to big-endian hex
13167 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13168
ab78acc6
IC
13169 var lookup = txInId + ':' + txIn.index
13170 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13171
ab78acc6 13172 var unspent = this.unspentMap[lookup]
ebd8d4e8 13173
ab78acc6
IC
13174 if (isPending) {
13175 unspent.pending = true
13176 unspent.spent = true
13177 } else {
13178 delete this.unspentMap[lookup]
ebd8d4e8 13179
ab78acc6
IC
13180 this.unspents = this.unspents.filter(function (unspent2) {
13181 return unspent !== unspent2
13182 })
13183 }
13184 }, this)
13185}
ebd8d4e8 13186
ab78acc6
IC
13187Wallet.prototype.generateAddress = function () {
13188 var k = this.addresses.length
13189 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13190
ab78acc6 13191 this.addresses.push(address.toString())
ebd8d4e8 13192
ab78acc6
IC
13193 return this.getReceiveAddress()
13194}
ebd8d4e8 13195
ab78acc6
IC
13196Wallet.prototype.generateChangeAddress = function () {
13197 var k = this.changeAddresses.length
13198 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13199
ab78acc6 13200 this.changeAddresses.push(address.toString())
ebd8d4e8 13201
ab78acc6
IC
13202 return this.getChangeAddress()
13203}
ebd8d4e8 13204
ab78acc6
IC
13205Wallet.prototype.getAddress = function () {
13206 if (this.addresses.length === 0) {
13207 this.generateAddress()
ebd8d4e8
IC
13208 }
13209
ab78acc6
IC
13210 return this.addresses[this.addresses.length - 1]
13211}
ebd8d4e8 13212
ab78acc6
IC
13213Wallet.prototype.getBalance = function (minConf) {
13214 minConf = minConf || 0
ebd8d4e8 13215
ab78acc6
IC
13216 return this.unspents.filter(function (unspent) {
13217 return unspent.confirmations >= minConf
13218
13219 // FIXME: remove spent filter in 2.0.0
13220 }).filter(function (unspent) {
13221 return !unspent.spent
13222 }).reduce(function (accum, unspent) {
13223 return accum + unspent.value
13224 }, 0)
13225}
ebd8d4e8 13226
ab78acc6
IC
13227Wallet.prototype.getChangeAddress = function () {
13228 if (this.changeAddresses.length === 0) {
13229 this.generateChangeAddress()
ebd8d4e8
IC
13230 }
13231
ab78acc6
IC
13232 return this.changeAddresses[this.changeAddresses.length - 1]
13233}
13234
13235Wallet.prototype.getInternalPrivateKey = function (index) {
13236 return this.getInternalAccount().derive(index).privKey
13237}
13238
13239Wallet.prototype.getPrivateKey = function (index) {
13240 return this.getExternalAccount().derive(index).privKey
13241}
13242
13243Wallet.prototype.getPrivateKeyForAddress = function (address) {
13244 var index
ebd8d4e8 13245
ab78acc6
IC
13246 if ((index = this.addresses.indexOf(address)) > -1) {
13247 return this.getPrivateKey(index)
ebd8d4e8
IC
13248 }
13249
ab78acc6
IC
13250 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13251 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13252 }
13253
ab78acc6
IC
13254 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13255}
ebd8d4e8 13256
ab78acc6
IC
13257Wallet.prototype.getUnspentOutputs = function (minConf) {
13258 minConf = minConf || 0
ebd8d4e8 13259
ab78acc6
IC
13260 return this.unspents.filter(function (unspent) {
13261 return unspent.confirmations >= minConf
ebd8d4e8 13262
ab78acc6
IC
13263 // FIXME: remove spent filter in 2.0.0
13264 }).filter(function (unspent) {
13265 return !unspent.spent
13266 }).map(function (unspent) {
13267 return {
13268 address: unspent.address,
13269 confirmations: unspent.confirmations,
13270 index: unspent.index,
13271 txId: unspent.txId,
13272 value: unspent.value,
13273
13274 // FIXME: remove in 2.0.0
13275 hash: unspent.txId,
13276 pending: unspent.pending
13277 }
13278 })
13279}
ebd8d4e8 13280
ab78acc6
IC
13281Wallet.prototype.setUnspentOutputs = function (unspents) {
13282 this.unspentMap = {}
13283 this.unspents = unspents.map(function (unspent) {
13284 // FIXME: remove unspent.hash in 2.0.0
13285 var txId = unspent.txId || unspent.hash
13286 var index = unspent.index
ebd8d4e8 13287
ab78acc6
IC
13288 // FIXME: remove in 2.0.0
13289 if (unspent.hash !== undefined) {
13290 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13291 }
ebd8d4e8 13292
ab78acc6
IC
13293 // FIXME: remove in 2.0.0
13294 if (index === undefined) {
13295 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13296 index = unspent.outputIndex
13297 }
ebd8d4e8 13298
ab78acc6
IC
13299 typeForce('String', txId)
13300 typeForce('Number', index)
13301 typeForce('Number', unspent.value)
13302
13303 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13304 assert.doesNotThrow(function () {
13305 Address.fromBase58Check(unspent.address)
13306 }, 'Expected Base58 Address, got ' + unspent.address)
13307 assert(isFinite(index), 'Expected finite index, got ' + index)
13308
13309 // FIXME: remove branch in 2.0.0
13310 if (unspent.confirmations !== undefined) {
13311 typeForce('Number', unspent.confirmations)
ebd8d4e8 13312 }
ebd8d4e8 13313
ab78acc6 13314 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13315
ab78acc6
IC
13316 unspent = {
13317 address: unspent.address,
13318 confirmations: unspent.confirmations || 0,
13319 index: index,
13320 txHash: txHash,
13321 txId: txId,
13322 value: unspent.value,
ebd8d4e8 13323
ab78acc6
IC
13324 // FIXME: remove in 2.0.0
13325 pending: unspent.pending || false
13326 }
13327
13328 // FIXME: remove in 2.0.0
13329 this.unspentMap[txId + ':' + index] = unspent
13330
13331 return unspent
13332 }, this)
13333}
13334
13335Wallet.prototype.signWith = function (tx, addresses) {
13336 addresses.forEach(function (address, i) {
13337 var privKey = this.getPrivateKeyForAddress(address)
13338
13339 tx.sign(i, privKey)
13340 }, this)
13341
13342 return tx
13343}
13344
13345function estimatePaddedFee (tx, network) {
13346 var tmpTx = tx.clone()
13347 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13348
13349 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13350}
13351
ab78acc6
IC
13352// FIXME: 1.0.0 shims, remove in 2.0.0
13353Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13354Wallet.prototype.createTx = Wallet.prototype.createTransaction
13355
ebd8d4e8
IC
13356module.exports = Wallet
13357
ab78acc6
IC
13358}).call(this,require("buffer").Buffer)
13359},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13360});</script>
d5dc92fd
IC
13361 <script>bitcoin.networks.shadow = {
13362 magicPrefix: '\x19ShadowCash Signed Message:\n',
13363 bip32: {
13364 public: 0xEE80286A,
13365 private: 0xEE8031E8
13366 },
13367 pubKeyHash: 0x3f,
13368 scriptHash: 0x7d,
13369 wif: 0xbf,
13370 dustThreshold: 0,
13371 feePerKb: 1000,
13372 estimateFee: function() { return "unused in this app" },
13373};
13374
13375bitcoin.networks.shadowtn = {
13376 magicPrefix: '\x19ShadowCash Signed Message:\n',
13377 bip32: {
13378 public: 0x76C0FDFB,
13379 private: 0x76C1077A
13380 },
13381 pubKeyHash: 0x7f,
13382 scriptHash: 0xc4,
13383 wif: 0xff,
13384 dustThreshold: 0,
13385 feePerKb: 1000,
13386 estimateFee: function() { return "unused in this app" },
13387};
5c434a8a
CM
13388
13389bitcoin.networks.clam = {
13390 bip32: {
13391 public: 0xa8c26d64,
13392 private: 0xa8c17826
13393 },
13394 pubKeyHash: 0x89,
13395 wif: 0x85,
13396};
5493efc3 13397
13398bitcoin.networks.dash = {
13399 bip32: {
13400 public: 0x0488b21e,
13401 private: 0x0488ade4
13402 },
68151a47 13403 pubKeyHash: 0x4c,
5493efc3 13404 scriptHash: 0x10,
13405 wif: 0xcc,
13406};
13407
07ac4350 13408bitcoin.networks.namecoin = {
13409 bip32: {
13410 public: 0x0488b21e,
13411 private: 0x0488ade4
13412 },
13413 pubKeyHash: 0x34,
13414 //scriptHash: 0x10,
13415 wif: 0x80,
13416};
13417
13418bitcoin.networks.peercoin = {
13419 bip32: {
13420 public: 0x0488b21e,
13421 private: 0x0488ade4
13422 },
13423 pubKeyHash: 0x37,
13424 //scriptHash: 0x10,
13425 wif: 0xb7,
13426};
13427
d5dc92fd 13428</script>
ab78acc6 13429 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13430
13431//// base.js
13432
13433/** @fileOverview Javascript cryptography implementation.
13434 *
13435 * Crush to remove comments, shorten variable names and
13436 * generally reduce transmission size.
13437 *
13438 * @author Emily Stark
13439 * @author Mike Hamburg
13440 * @author Dan Boneh
13441 */
13442
13443"use strict";
13444/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13445/*global document, window, escape, unescape, module, require, Uint32Array */
13446
13447/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13448var sjcl = {
13449 /** @namespace Symmetric ciphers. */
13450 cipher: {},
13451
13452 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13453 hash: {},
13454
13455 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13456 keyexchange: {},
13457
13458 /** @namespace Block cipher modes of operation. */
13459 mode: {},
13460
13461 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13462 misc: {},
13463
13464 /**
13465 * @namespace Bit array encoders and decoders.
13466 *
13467 * @description
13468 * The members of this namespace are functions which translate between
13469 * SJCL's bitArrays and other objects (usually strings). Because it
13470 * isn't always clear which direction is encoding and which is decoding,
13471 * the method names are "fromBits" and "toBits".
13472 */
13473 codec: {},
13474
13475 /** @namespace Exceptions. */
13476 exception: {
13477 /** @constructor Ciphertext is corrupt. */
13478 corrupt: function(message) {
13479 this.toString = function() { return "CORRUPT: "+this.message; };
13480 this.message = message;
13481 },
13482
13483 /** @constructor Invalid parameter. */
13484 invalid: function(message) {
13485 this.toString = function() { return "INVALID: "+this.message; };
13486 this.message = message;
13487 },
13488
13489 /** @constructor Bug or missing feature in SJCL. @constructor */
13490 bug: function(message) {
13491 this.toString = function() { return "BUG: "+this.message; };
13492 this.message = message;
13493 },
13494
13495 /** @constructor Something isn't ready. */
13496 notReady: function(message) {
13497 this.toString = function() { return "NOT READY: "+this.message; };
13498 this.message = message;
ebd8d4e8 13499 }
80c4dd2a
IC
13500 }
13501};
13502
13503if(typeof module !== 'undefined' && module.exports){
13504 module.exports = sjcl;
13505}
13506if (typeof define === "function") {
13507 define([], function () {
13508 return sjcl;
13509 });
13510}
13511
13512
13513//// bitArray.js
13514
13515/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13516 *
13517 * @author Emily Stark
13518 * @author Mike Hamburg
13519 * @author Dan Boneh
13520 */
13521
13522/** @namespace Arrays of bits, encoded as arrays of Numbers.
13523 *
13524 * @description
13525 * <p>
13526 * These objects are the currency accepted by SJCL's crypto functions.
13527 * </p>
13528 *
13529 * <p>
13530 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13531 * but many of them can take arguments that are not a multiple of 4 bytes.
13532 * This library encodes arrays of bits (whose size need not be a multiple of 8
13533 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13534 * array of words, 32 bits at a time. Since the words are double-precision
13535 * floating point numbers, they fit some extra data. We use this (in a private,
13536 * possibly-changing manner) to encode the number of bits actually present
13537 * in the last word of the array.
13538 * </p>
13539 *
13540 * <p>
13541 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13542 * to ciphers like AES which want arrays of words.
13543 * </p>
13544 */
13545sjcl.bitArray = {
13546 /**
13547 * Array slices in units of bits.
13548 * @param {bitArray} a The array to slice.
13549 * @param {Number} bstart The offset to the start of the slice, in bits.
13550 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13551 * slice until the end of the array.
13552 * @return {bitArray} The requested slice.
13553 */
13554 bitSlice: function (a, bstart, bend) {
13555 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13556 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13557 },
13558
13559 /**
13560 * Extract a number packed into a bit array.
13561 * @param {bitArray} a The array to slice.
13562 * @param {Number} bstart The offset to the start of the slice, in bits.
13563 * @param {Number} length The length of the number to extract.
13564 * @return {Number} The requested slice.
13565 */
13566 extract: function(a, bstart, blength) {
13567 // FIXME: this Math.floor is not necessary at all, but for some reason
13568 // seems to suppress a bug in the Chromium JIT.
13569 var x, sh = Math.floor((-bstart-blength) & 31);
13570 if ((bstart + blength - 1 ^ bstart) & -32) {
13571 // it crosses a boundary
13572 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13573 } else {
13574 // within a single word
13575 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13576 }
80c4dd2a
IC
13577 return x & ((1<<blength) - 1);
13578 },
13579
13580 /**
13581 * Concatenate two bit arrays.
13582 * @param {bitArray} a1 The first array.
13583 * @param {bitArray} a2 The second array.
13584 * @return {bitArray} The concatenation of a1 and a2.
13585 */
13586 concat: function (a1, a2) {
13587 if (a1.length === 0 || a2.length === 0) {
13588 return a1.concat(a2);
13589 }
13590
13591 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13592 if (shift === 32) {
13593 return a1.concat(a2);
13594 } else {
13595 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13596 }
80c4dd2a
IC
13597 },
13598
13599 /**
13600 * Find the length of an array of bits.
13601 * @param {bitArray} a The array.
13602 * @return {Number} The length of a, in bits.
13603 */
13604 bitLength: function (a) {
13605 var l = a.length, x;
13606 if (l === 0) { return 0; }
13607 x = a[l - 1];
13608 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13609 },
13610
13611 /**
13612 * Truncate an array.
13613 * @param {bitArray} a The array.
13614 * @param {Number} len The length to truncate to, in bits.
13615 * @return {bitArray} A new array, truncated to len bits.
13616 */
13617 clamp: function (a, len) {
13618 if (a.length * 32 < len) { return a; }
13619 a = a.slice(0, Math.ceil(len / 32));
13620 var l = a.length;
13621 len = len & 31;
13622 if (l > 0 && len) {
13623 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13624 }
13625 return a;
13626 },
13627
13628 /**
13629 * Make a partial word for a bit array.
13630 * @param {Number} len The number of bits in the word.
13631 * @param {Number} x The bits.
13632 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13633 * @return {Number} The partial word.
13634 */
13635 partial: function (len, x, _end) {
13636 if (len === 32) { return x; }
13637 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13638 },
13639
13640 /**
13641 * Get the number of bits used by a partial word.
13642 * @param {Number} x The partial word.
13643 * @return {Number} The number of bits used by the partial word.
13644 */
13645 getPartial: function (x) {
13646 return Math.round(x/0x10000000000) || 32;
13647 },
13648
13649 /**
13650 * Compare two arrays for equality in a predictable amount of time.
13651 * @param {bitArray} a The first array.
13652 * @param {bitArray} b The second array.
13653 * @return {boolean} true if a == b; false otherwise.
13654 */
13655 equal: function (a, b) {
13656 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13657 return false;
ebd8d4e8 13658 }
80c4dd2a
IC
13659 var x = 0, i;
13660 for (i=0; i<a.length; i++) {
13661 x |= a[i]^b[i];
ebd8d4e8 13662 }
80c4dd2a
IC
13663 return (x === 0);
13664 },
13665
13666 /** Shift an array right.
13667 * @param {bitArray} a The array to shift.
13668 * @param {Number} shift The number of bits to shift.
13669 * @param {Number} [carry=0] A byte to carry in
13670 * @param {bitArray} [out=[]] An array to prepend to the output.
13671 * @private
13672 */
13673 _shiftRight: function (a, shift, carry, out) {
13674 var i, last2=0, shift2;
13675 if (out === undefined) { out = []; }
13676
13677 for (; shift >= 32; shift -= 32) {
13678 out.push(carry);
13679 carry = 0;
13680 }
13681 if (shift === 0) {
13682 return out.concat(a);
13683 }
13684
13685 for (i=0; i<a.length; i++) {
13686 out.push(carry | a[i]>>>shift);
13687 carry = a[i] << (32-shift);
13688 }
13689 last2 = a.length ? a[a.length-1] : 0;
13690 shift2 = sjcl.bitArray.getPartial(last2);
13691 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13692 return out;
13693 },
13694
13695 /** xor a block of 4 words together.
13696 * @private
13697 */
13698 _xor4: function(x,y) {
13699 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13700 },
13701
13702 /** byteswap a word array inplace.
13703 * (does not handle partial words)
13704 * @param {sjcl.bitArray} a word array
13705 * @return {sjcl.bitArray} byteswapped array
13706 */
13707 byteswapM: function(a) {
13708 var i, v, m = 0xff00;
13709 for (i = 0; i < a.length; ++i) {
13710 v = a[i];
13711 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13712 }
80c4dd2a
IC
13713 return a;
13714 }
13715};
13716
13717
13718//// codecString.js
13719
13720/** @fileOverview Bit array codec implementations.
13721 *
13722 * @author Emily Stark
13723 * @author Mike Hamburg
13724 * @author Dan Boneh
13725 */
13726
13727/** @namespace UTF-8 strings */
13728sjcl.codec.utf8String = {
13729 /** Convert from a bitArray to a UTF-8 string. */
13730 fromBits: function (arr) {
13731 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13732 for (i=0; i<bl/8; i++) {
13733 if ((i&3) === 0) {
13734 tmp = arr[i/4];
13735 }
13736 out += String.fromCharCode(tmp >>> 24);
13737 tmp <<= 8;
ebd8d4e8 13738 }
80c4dd2a
IC
13739 return decodeURIComponent(escape(out));
13740 },
13741
13742 /** Convert from a UTF-8 string to a bitArray. */
13743 toBits: function (str) {
13744 str = unescape(encodeURIComponent(str));
13745 var out = [], i, tmp=0;
13746 for (i=0; i<str.length; i++) {
13747 tmp = tmp << 8 | str.charCodeAt(i);
13748 if ((i&3) === 3) {
13749 out.push(tmp);
13750 tmp = 0;
13751 }
ebd8d4e8 13752 }
80c4dd2a
IC
13753 if (i&3) {
13754 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13755 }
80c4dd2a
IC
13756 return out;
13757 }
13758};
13759
13760
13761//// codecHex.js
13762
13763/** @fileOverview Bit array codec implementations.
13764 *
13765 * @author Emily Stark
13766 * @author Mike Hamburg
13767 * @author Dan Boneh
13768 */
13769
13770/** @namespace Hexadecimal */
13771sjcl.codec.hex = {
13772 /** Convert from a bitArray to a hex string. */
13773 fromBits: function (arr) {
13774 var out = "", i;
13775 for (i=0; i<arr.length; i++) {
13776 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13777 }
80c4dd2a
IC
13778 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13779 },
13780 /** Convert from a hex string to a bitArray. */
13781 toBits: function (str) {
13782 var i, out=[], len;
13783 str = str.replace(/\s|0x/g, "");
13784 len = str.length;
13785 str = str + "00000000";
13786 for (i=0; i<str.length; i+=8) {
13787 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13788 }
80c4dd2a
IC
13789 return sjcl.bitArray.clamp(out, len*4);
13790 }
13791};
13792
13793
13794//// sha512.js
13795
13796/** @fileOverview Javascript SHA-512 implementation.
13797 *
13798 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13799 * SJCL by Stefan Thomas.
13800 *
13801 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13802 * Released with New BSD License
13803 *
13804 * @author Emily Stark
13805 * @author Mike Hamburg
13806 * @author Dan Boneh
13807 * @author Jeff Mott
13808 * @author Stefan Thomas
13809 */
13810
13811/**
13812 * Context for a SHA-512 operation in progress.
13813 * @constructor
13814 * @class Secure Hash Algorithm, 512 bits.
13815 */
13816sjcl.hash.sha512 = function (hash) {
13817 if (!this._key[0]) { this._precompute(); }
13818 if (hash) {
13819 this._h = hash._h.slice(0);
13820 this._buffer = hash._buffer.slice(0);
13821 this._length = hash._length;
13822 } else {
13823 this.reset();
13824 }
13825};
13826
13827/**
13828 * Hash a string or an array of words.
13829 * @static
13830 * @param {bitArray|String} data the data to hash.
13831 * @return {bitArray} The hash value, an array of 16 big-endian words.
13832 */
13833sjcl.hash.sha512.hash = function (data) {
13834 return (new sjcl.hash.sha512()).update(data).finalize();
13835};
13836
13837sjcl.hash.sha512.prototype = {
13838 /**
13839 * The hash's block size, in bits.
13840 * @constant
13841 */
13842 blockSize: 1024,
13843
13844 /**
13845 * Reset the hash state.
13846 * @return this
13847 */
13848 reset:function () {
13849 this._h = this._init.slice(0);
13850 this._buffer = [];
13851 this._length = 0;
13852 return this;
13853 },
13854
13855 /**
13856 * Input several words to the hash.
13857 * @param {bitArray|String} data the data to hash.
13858 * @return this
13859 */
13860 update: function (data) {
13861 if (typeof data === "string") {
13862 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13863 }
80c4dd2a
IC
13864 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13865 ol = this._length,
13866 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13867 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13868 this._block(b.splice(0,32));
ebd8d4e8 13869 }
80c4dd2a
IC
13870 return this;
13871 },
13872
13873 /**
13874 * Complete hashing and output the hash value.
13875 * @return {bitArray} The hash value, an array of 16 big-endian words.
13876 */
13877 finalize:function () {
13878 var i, b = this._buffer, h = this._h;
13879
13880 // Round out and push the buffer
13881 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13882
13883 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13884 for (i = b.length + 4; i & 31; i++) {
13885 b.push(0);
ebd8d4e8 13886 }
80c4dd2a
IC
13887
13888 // append the length
13889 b.push(0);
13890 b.push(0);
13891 b.push(Math.floor(this._length / 0x100000000));
13892 b.push(this._length | 0);
13893
13894 while (b.length) {
13895 this._block(b.splice(0,32));
ebd8d4e8 13896 }
80c4dd2a
IC
13897
13898 this.reset();
13899 return h;
13900 },
13901
13902 /**
13903 * The SHA-512 initialization vector, to be precomputed.
13904 * @private
13905 */
13906 _init:[],
13907
13908 /**
13909 * Least significant 24 bits of SHA512 initialization values.
13910 *
13911 * Javascript only has 53 bits of precision, so we compute the 40 most
13912 * significant bits and add the remaining 24 bits as constants.
13913 *
13914 * @private
13915 */
13916 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13917
13918 /*
13919 _init:
13920 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13921 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13922 */
13923
13924 /**
13925 * The SHA-512 hash key, to be precomputed.
13926 * @private
13927 */
13928 _key:[],
13929
13930 /**
13931 * Least significant 24 bits of SHA512 key values.
13932 * @private
13933 */
13934 _keyr:
13935 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13936 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13937 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13938 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13939 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13940 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13941 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13942 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13943 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13944 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13945
13946 /*
13947 _key:
13948 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13949 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13950 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13951 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13952 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13953 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13954 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13955 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13956 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13957 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13958 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13959 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13960 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13961 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13962 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13963 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13964 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13965 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13966 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13967 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13968 */
13969
13970 /**
13971 * Function to precompute _init and _key.
13972 * @private
13973 */
13974 _precompute: function () {
13975 // XXX: This code is for precomputing the SHA256 constants, change for
13976 // SHA512 and re-enable.
13977 var i = 0, prime = 2, factor;
13978
13979 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13980 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13981
13982 outer: for (; i<80; prime++) {
13983 for (factor=2; factor*factor <= prime; factor++) {
13984 if (prime % factor === 0) {
13985 // not a prime
13986 continue outer;
ebd8d4e8 13987 }
80c4dd2a
IC
13988 }
13989
13990 if (i<8) {
13991 this._init[i*2] = frac(Math.pow(prime, 1/2));
13992 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13993 }
13994 this._key[i*2] = frac(Math.pow(prime, 1/3));
13995 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13996 i++;
ebd8d4e8 13997 }
80c4dd2a
IC
13998 },
13999
14000 /**
14001 * Perform one cycle of SHA-512.
14002 * @param {bitArray} words one block of words.
14003 * @private
14004 */
14005 _block:function (words) {
14006 var i, wrh, wrl,
14007 w = words.slice(0),
14008 h = this._h,
14009 k = this._key,
14010 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14011 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14012 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14013 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14014
14015 // Working variables
14016 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14017 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14018 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14019 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14020
14021 for (i=0; i<80; i++) {
14022 // load up the input word for this round
14023 if (i<16) {
14024 wrh = w[i * 2];
14025 wrl = w[i * 2 + 1];
14026 } else {
14027 // Gamma0
14028 var gamma0xh = w[(i-15) * 2];
14029 var gamma0xl = w[(i-15) * 2 + 1];
14030 var gamma0h =
14031 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14032 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14033 (gamma0xh >>> 7);
14034 var gamma0l =
14035 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14036 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14037 ((gamma0xh << 25) | (gamma0xl >>> 7));
14038
14039 // Gamma1
14040 var gamma1xh = w[(i-2) * 2];
14041 var gamma1xl = w[(i-2) * 2 + 1];
14042 var gamma1h =
14043 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14044 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14045 (gamma1xh >>> 6);
14046 var gamma1l =
14047 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14048 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14049 ((gamma1xh << 26) | (gamma1xl >>> 6));
14050
14051 // Shortcuts
14052 var wr7h = w[(i-7) * 2];
14053 var wr7l = w[(i-7) * 2 + 1];
14054
14055 var wr16h = w[(i-16) * 2];
14056 var wr16l = w[(i-16) * 2 + 1];
14057
14058 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14059 wrl = gamma0l + wr7l;
14060 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14061 wrl += gamma1l;
14062 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14063 wrl += wr16l;
14064 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14065 }
14066
14067 w[i*2] = wrh |= 0;
14068 w[i*2 + 1] = wrl |= 0;
14069
14070 // Ch
14071 var chh = (eh & fh) ^ (~eh & gh);
14072 var chl = (el & fl) ^ (~el & gl);
14073
14074 // Maj
14075 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14076 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14077
14078 // Sigma0
14079 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14080 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14081
14082 // Sigma1
14083 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14084 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14085
14086 // K(round)
14087 var krh = k[i*2];
14088 var krl = k[i*2+1];
14089
14090 // t1 = h + sigma1 + ch + K(round) + W(round)
14091 var t1l = hl + sigma1l;
14092 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14093 t1l += chl;
14094 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14095 t1l += krl;
14096 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14097 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14098 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14099
14100 // t2 = sigma0 + maj
14101 var t2l = sigma0l + majl;
14102 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14103
14104 // Update working variables
14105 hh = gh;
14106 hl = gl;
14107 gh = fh;
14108 gl = fl;
14109 fh = eh;
14110 fl = el;
14111 el = (dl + t1l) | 0;
14112 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14113 dh = ch;
14114 dl = cl;
14115 ch = bh;
14116 cl = bl;
14117 bh = ah;
14118 bl = al;
14119 al = (t1l + t2l) | 0;
14120 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14121 }
14122
14123 // Intermediate hash
14124 h0l = h[1] = (h0l + al) | 0;
14125 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14126 h1l = h[3] = (h1l + bl) | 0;
14127 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14128 h2l = h[5] = (h2l + cl) | 0;
14129 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14130 h3l = h[7] = (h3l + dl) | 0;
14131 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14132 h4l = h[9] = (h4l + el) | 0;
14133 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14134 h5l = h[11] = (h5l + fl) | 0;
14135 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14136 h6l = h[13] = (h6l + gl) | 0;
14137 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14138 h7l = h[15] = (h7l + hl) | 0;
14139 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14140 }
14141};
14142
14143
14144//// hmac.js
14145
14146/** @fileOverview HMAC implementation.
14147 *
14148 * @author Emily Stark
14149 * @author Mike Hamburg
14150 * @author Dan Boneh
14151 */
14152
14153/** HMAC with the specified hash function.
14154 * @constructor
14155 * @param {bitArray} key the key for HMAC.
14156 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14157 */
14158sjcl.misc.hmac = function (key, Hash) {
14159 this._hash = Hash = Hash || sjcl.hash.sha256;
14160 var exKey = [[],[]], i,
14161 bs = Hash.prototype.blockSize / 32;
14162 this._baseHash = [new Hash(), new Hash()];
14163
14164 if (key.length > bs) {
14165 key = Hash.hash(key);
14166 }
14167
14168 for (i=0; i<bs; i++) {
14169 exKey[0][i] = key[i]^0x36363636;
14170 exKey[1][i] = key[i]^0x5C5C5C5C;
14171 }
14172
14173 this._baseHash[0].update(exKey[0]);
14174 this._baseHash[1].update(exKey[1]);
14175 this._resultHash = new Hash(this._baseHash[0]);
14176};
14177
14178/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14179 * @param {bitArray|String} data The data to mac.
14180 */
14181sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14182 if (!this._updated) {
14183 this.update(data);
14184 return this.digest(data);
14185 } else {
14186 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14187 }
14188};
14189
14190sjcl.misc.hmac.prototype.reset = function () {
14191 this._resultHash = new this._hash(this._baseHash[0]);
14192 this._updated = false;
14193};
14194
14195sjcl.misc.hmac.prototype.update = function (data) {
14196 this._updated = true;
14197 this._resultHash.update(data);
14198};
14199
14200sjcl.misc.hmac.prototype.digest = function () {
14201 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14202
14203 this.reset();
14204
14205 return result;
14206};
14207
14208
14209//// pbkdf2.js
14210
14211
14212/** @fileOverview Password-based key-derivation function, version 2.0.
14213 *
14214 * @author Emily Stark
14215 * @author Mike Hamburg
14216 * @author Dan Boneh
14217 */
14218
14219/** Password-Based Key-Derivation Function, version 2.0.
14220 *
14221 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14222 *
14223 * This is the method specified by RSA's PKCS #5 standard.
14224 *
14225 * @param {bitArray|String} password The password.
14226 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14227 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14228 * @param {Number} [length] The length of the derived key. Defaults to the
14229 output size of the hash function.
14230 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14231 * @return {bitArray} the derived key.
14232 */
14233sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14234 count = count || 1000;
14235
14236 if (length < 0 || count < 0) {
14237 throw sjcl.exception.invalid("invalid params to pbkdf2");
14238 }
14239
14240 if (typeof password === "string") {
14241 password = sjcl.codec.utf8String.toBits(password);
14242 }
14243
14244 if (typeof salt === "string") {
14245 salt = sjcl.codec.utf8String.toBits(salt);
14246 }
14247
14248 Prff = Prff || sjcl.misc.hmac;
14249
14250 var prf = new Prff(password),
14251 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14252
14253 for (k = 1; 32 * out.length < (length || 1); k++) {
14254 u = ui = prf.encrypt(b.concat(salt,[k]));
14255
14256 for (i=1; i<count; i++) {
14257 ui = prf.encrypt(ui);
14258 for (j=0; j<ui.length; j++) {
14259 u[j] ^= ui[j];
14260 }
ebd8d4e8 14261 }
80c4dd2a
IC
14262
14263 out = out.concat(u);
14264 }
14265
14266 if (length) { out = b.clamp(out, length); }
14267
14268 return out;
14269};
14270
14271
14272//// sha256.js
14273
14274/** @fileOverview Javascript SHA-256 implementation.
14275 *
14276 * An older version of this implementation is available in the public
14277 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14278 * Stanford University 2008-2010 and BSD-licensed for liability
14279 * reasons.
14280 *
14281 * Special thanks to Aldo Cortesi for pointing out several bugs in
14282 * this code.
14283 *
14284 * @author Emily Stark
14285 * @author Mike Hamburg
14286 * @author Dan Boneh
14287 */
14288
14289/**
14290 * Context for a SHA-256 operation in progress.
14291 * @constructor
14292 * @class Secure Hash Algorithm, 256 bits.
14293 */
14294sjcl.hash.sha256 = function (hash) {
14295 if (!this._key[0]) { this._precompute(); }
14296 if (hash) {
14297 this._h = hash._h.slice(0);
14298 this._buffer = hash._buffer.slice(0);
14299 this._length = hash._length;
14300 } else {
14301 this.reset();
14302 }
14303};
14304
14305/**
14306 * Hash a string or an array of words.
14307 * @static
14308 * @param {bitArray|String} data the data to hash.
14309 * @return {bitArray} The hash value, an array of 16 big-endian words.
14310 */
14311sjcl.hash.sha256.hash = function (data) {
14312 return (new sjcl.hash.sha256()).update(data).finalize();
14313};
14314
14315sjcl.hash.sha256.prototype = {
14316 /**
14317 * The hash's block size, in bits.
14318 * @constant
14319 */
14320 blockSize: 512,
14321
14322 /**
14323 * Reset the hash state.
14324 * @return this
14325 */
14326 reset:function () {
14327 this._h = this._init.slice(0);
14328 this._buffer = [];
14329 this._length = 0;
14330 return this;
14331 },
14332
14333 /**
14334 * Input several words to the hash.
14335 * @param {bitArray|String} data the data to hash.
14336 * @return this
14337 */
14338 update: function (data) {
14339 if (typeof data === "string") {
14340 data = sjcl.codec.utf8String.toBits(data);
14341 }
14342 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14343 ol = this._length,
14344 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14345 for (i = 512+ol & -512; i <= nl; i+= 512) {
14346 this._block(b.splice(0,16));
ebd8d4e8 14347 }
3af2954a 14348 return this;
80c4dd2a
IC
14349 },
14350
14351 /**
14352 * Complete hashing and output the hash value.
14353 * @return {bitArray} The hash value, an array of 8 big-endian words.
14354 */
14355 finalize:function () {
14356 var i, b = this._buffer, h = this._h;
14357
14358 // Round out and push the buffer
14359 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14360
14361 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14362 for (i = b.length + 2; i & 15; i++) {
14363 b.push(0);
14364 }
14365
14366 // append the length
14367 b.push(Math.floor(this._length / 0x100000000));
14368 b.push(this._length | 0);
14369
14370 while (b.length) {
14371 this._block(b.splice(0,16));
14372 }
14373
14374 this.reset();
14375 return h;
14376 },
14377
14378 /**
14379 * The SHA-256 initialization vector, to be precomputed.
14380 * @private
14381 */
14382 _init:[],
14383 /*
14384 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14385 */
14386
14387 /**
14388 * The SHA-256 hash key, to be precomputed.
14389 * @private
14390 */
14391 _key:[],
14392 /*
14393 _key:
14394 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14395 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14396 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14397 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14398 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14399 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14400 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14401 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14402 */
14403
14404
14405 /**
14406 * Function to precompute _init and _key.
14407 * @private
14408 */
14409 _precompute: function () {
14410 var i = 0, prime = 2, factor;
14411
14412 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14413
14414 outer: for (; i<64; prime++) {
14415 for (factor=2; factor*factor <= prime; factor++) {
14416 if (prime % factor === 0) {
14417 // not a prime
14418 continue outer;
ebd8d4e8 14419 }
80c4dd2a
IC
14420 }
14421
14422 if (i<8) {
14423 this._init[i] = frac(Math.pow(prime, 1/2));
14424 }
14425 this._key[i] = frac(Math.pow(prime, 1/3));
14426 i++;
ebd8d4e8 14427 }
80c4dd2a
IC
14428 },
14429
14430 /**
14431 * Perform one cycle of SHA-256.
14432 * @param {bitArray} words one block of words.
14433 * @private
14434 */
14435 _block:function (words) {
14436 var i, tmp, a, b,
14437 w = words.slice(0),
14438 h = this._h,
14439 k = this._key,
14440 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14441 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14442
14443 /* Rationale for placement of |0 :
14444 * If a value can overflow is original 32 bits by a factor of more than a few
14445 * million (2^23 ish), there is a possibility that it might overflow the
14446 * 53-bit mantissa and lose precision.
14447 *
14448 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14449 * propagates around the loop, and on the hash state h[]. I don't believe
14450 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14451 * (for h4 anyway), and better safe than sorry.
14452 *
14453 * The clamps on h[] are necessary for the output to be correct even in the
14454 * common case and for short inputs.
14455 */
14456 for (i=0; i<64; i++) {
14457 // load up the input word for this round
14458 if (i<16) {
14459 tmp = w[i];
14460 } else {
14461 a = w[(i+1 ) & 15];
14462 b = w[(i+14) & 15];
14463 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14464 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14465 w[i&15] + w[(i+9) & 15]) | 0;
14466 }
14467
14468 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14469
14470 // shift register
14471 h7 = h6; h6 = h5; h5 = h4;
14472 h4 = h3 + tmp | 0;
14473 h3 = h2; h2 = h1; h1 = h0;
14474
14475 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14476 }
14477
14478 h[0] = h[0]+h0 | 0;
14479 h[1] = h[1]+h1 | 0;
14480 h[2] = h[2]+h2 | 0;
14481 h[3] = h[3]+h3 | 0;
14482 h[4] = h[4]+h4 | 0;
14483 h[5] = h[5]+h5 | 0;
14484 h[6] = h[6]+h6 | 0;
14485 h[7] = h[7]+h7 | 0;
14486 }
14487};
dc55c6b0 14488</script>
ab78acc6 14489 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14490WORDLISTS["english"] = [
ebd8d4e8
IC
14491"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14492"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14493"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14494"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14495"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14496"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14497"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14498"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14499"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14500"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14501"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14502"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14503"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14504"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14505"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14506"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14507"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14508"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14509"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14510"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14511"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14512"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14513"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14514"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14515"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14516"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14517"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14518"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14519"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14520"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14521"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14522"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14523"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14524"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14525"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14526"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14527"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14528"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14529"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14530"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14531"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14532"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14533"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14534"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14535"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14536"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14537"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14538"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14539"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14540"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14541"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14542"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14543"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14544"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14545"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14546"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14547"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14548"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14549"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14550"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14551"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14552"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14553"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14554"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14555"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14556"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14557"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14558"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14559"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14560"film","filter","final","find","fine","finger","finish","fire","firm","first",
14561"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14562"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14563"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14564"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14565"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14566"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14567"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14568"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14569"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14570"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14571"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14572"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14573"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14574"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14575"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14576"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14577"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14578"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14579"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14580"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14581"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14582"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14583"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14584"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14585"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14586"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14587"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14588"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14589"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14590"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14591"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14592"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14593"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14594"liar","liberty","library","license","life","lift","light","like","limb","limit",
14595"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14596"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14597"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14598"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14599"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14600"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14601"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14602"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14603"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14604"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14605"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14606"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14607"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14608"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14609"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14610"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14611"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14612"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14613"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14614"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14615"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14616"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14617"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14618"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14619"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14620"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14621"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14622"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14623"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14624"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14625"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14626"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14627"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14628"prize","problem","process","produce","profit","program","project","promote","proof","property",
14629"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14630"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14631"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14632"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14633"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14634"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14635"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14636"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14637"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14638"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14639"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14640"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14641"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14642"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14643"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14644"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14645"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14646"scrub","sea","search","season","seat","second","secret","section","security","seed",
14647"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14648"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14649"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14650"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14651"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14652"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14653"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14654"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14655"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14656"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14657"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14658"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14659"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14660"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14661"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14662"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14663"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14664"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14665"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14666"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14667"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14668"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14669"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14670"thank","that","theme","then","theory","there","they","thing","this","thought",
14671"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14672"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14673"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14674"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14675"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14676"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14677"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14678"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14679"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14680"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14681"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14682"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14683"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14684"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14685"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14686"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14687"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14688"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14689"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14690"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14691"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14692"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14693"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14694"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14695"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
14696</script>
14697 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14698WORDLISTS["japanese"] = [
14699"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14700"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14701"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14702"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14703"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14704"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14705"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14706"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14707"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14708"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14709"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14710"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14711"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14712"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14713"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14714"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14715"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14716"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14717"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14718"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14719"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14720"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14721"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14722"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14723"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14724"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14725"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14726"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14727"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14728"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14729"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14730"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14731"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14732"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14733"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14734"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14735"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14736"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14737"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14738"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14739"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14740"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14741"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14742"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14743"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14744"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14745"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14746"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14747"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14748"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14749"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14750"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14751"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14752"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14753"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14754"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14755"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14756"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14757"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14758"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14759"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14760"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14761"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14762"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14763"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14764"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14765"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14766"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14767"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14768"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14769"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14770"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14771"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14772"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14773"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14774"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14775"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14776"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14777"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14778"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14779"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14780"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14781"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14782"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14783"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14784"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14785"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14786"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14787"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14788"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14789"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14790"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14791"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14792"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14793"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14794"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14795"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14796"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14797"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14798"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14799"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14800"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14801"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14802"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14803"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14804"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14805"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14806"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14807"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14808"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14809"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14810"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14811"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14812"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14813"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14814"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14815"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14816"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14817"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14818"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14819"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14820"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14821"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14822"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14823"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14824"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14825"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14826"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14827"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14828"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14829"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14830"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14831"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14832"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14833"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14834"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14835"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14836"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14837"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14838"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14839"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14840"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14841"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14842"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14843"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14844"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14845"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14846"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14847"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14848"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14849"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14850"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14851"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14852"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14853"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14854"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14855"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14856"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14857"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14858"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14859"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14860"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14861"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14862"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14863"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14864"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14865"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14866"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14867"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14868"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14869"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14870"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14871"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14872"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14873"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14874"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14875"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14876"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14877"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14878"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14879"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14880"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14881"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14882"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14883"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14884"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14885"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14886"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14887"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14888"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14889"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14890"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14891"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14892"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14893"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14894"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14895"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14896"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14897"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14898"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14899"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14900"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14901"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14902"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14903"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14904</script>
14905 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14906WORDLISTS["spanish"] = [
14907"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14908"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14909"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14910"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14911"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14912"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14913"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14914"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14915"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14916"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14917"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14918"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14919"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14920"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14921"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14922"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14923"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14924"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14925"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14926"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14927"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14928"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14929"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14930"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14931"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14932"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14933"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14934"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14935"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14936"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14937"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14938"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14939"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14940"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14941"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14942"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14943"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14944"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14945"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14946"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14947"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14948"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14949"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14950"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14951"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14952"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14953"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14954"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14955"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14956"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14957"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14958"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14959"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14960"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14961"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14962"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14963"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14964"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14965"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14966"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14967"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14968"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14969"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14970"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14971"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14972"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14973"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14974"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14975"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14976"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14977"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14978"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14979"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14980"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14981"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14982"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14983"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14984"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14985"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14986"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14987"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14988"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14989"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14990"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14991"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14992"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14993"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14994"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14995"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14996"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14997"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14998"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14999"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
15000"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
15001"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
15002"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
15003"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
15004"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
15005"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15006"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15007"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15008"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15009"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15010"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15011"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15012"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15013"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15014"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15015"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15016"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15017"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15018"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15019"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15020"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15021"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15022"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15023"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15024"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15025"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15026"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15027"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15028"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15029"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15030"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15031"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15032"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15033"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15034"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15035"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15036"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15037"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15038"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15039"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15040"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15041"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15042"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15043"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15044"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15045"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15046"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15047"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15048"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15049"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15050"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15051"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15052"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15053"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15054"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15055"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15056"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15057"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15058"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15059"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15060"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15061"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15062"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15063"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15064"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15065"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15066"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15067"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15068"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15069"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15070"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15071"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15072"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15073"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15074"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15075"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15076"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15077"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15078"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15079"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15080"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15081"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15082"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15083"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15084"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15085"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15086"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15087"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15088"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15089"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15090"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15091"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15092"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15093"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15094"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15095"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15096"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15097"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15098"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15099"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15100"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15101"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15102"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15103"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15104"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15105"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15106"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15107"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15108"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15109"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15110"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15111"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15112</script>
15113 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15114WORDLISTS["chinese_simplified"] = [
15115"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15116"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15117"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15118"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15119"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15120"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15121"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15122"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15123"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15124"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15125"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15126"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15127"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15128"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15129"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15130"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15131"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15132"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15133"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15134"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15135"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15136"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15137"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15138"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15139"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15140"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15141"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15142"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15143"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15144"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15145"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15146"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15147"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15148"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15149"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15150"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15151"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15152"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15153"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15154"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15155"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15156"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15157"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15158"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15159"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15160"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15161"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15162"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15163"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15164"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15165"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15166"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15167"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15168"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15169"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15170"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15171"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15172"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15173"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15174"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15175"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15176"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15177"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15178"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15179"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15180"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15181"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15182"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15183"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15184"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15185"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15186"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15187"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15188"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15189"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15190"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15191"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15192"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15193"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15194"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15195"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15196"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15197"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15198"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15199"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15200"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15201"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15202"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15203"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15204"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15205"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15206"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15207"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15208"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15209"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15210"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15211"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15212"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15213"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15214"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15215"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15216"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15217"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15218"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15219"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15220"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15221"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15222"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15223"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15224"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15225"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15226"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15227"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15228"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15229"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15230"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15231"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15232"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15233"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15234"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15235"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15236"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15237"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15238"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15239"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15240"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15241"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15242"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15243"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15244"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15245"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15246"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15247"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15248"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15249"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15250"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15251"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15252"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15253"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15254"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15255"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15256"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15257"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15258"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15259"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15260"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15261"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15262"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15263"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15264"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15265"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15266"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15267"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15268"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15269"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15270"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15271"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15272"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15273"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15274"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15275"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15276"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15277"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15278"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15279"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15280"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15281"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15282"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15283"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15284"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15285"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15286"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15287"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15288"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15289"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15290"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15291"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15292"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15293"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15294"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15295"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15296"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15297"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15298"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15299"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15300"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15301"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15302"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15303"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15304"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15305"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15306"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15307"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15308"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15309"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15310"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15311"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15312"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15313"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15314"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15315"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15316"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15317"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15318"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15319"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15320</script>
15321 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15322WORDLISTS["chinese_traditional"] = [
15323"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15324"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15325"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15326"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15327"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15328"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15329"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15330"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15331"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15332"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15333"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15334"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15335"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15336"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15337"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15338"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15339"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15340"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15341"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15342"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15343"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15344"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15345"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15346"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15347"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15348"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15349"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15350"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15351"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15352"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15353"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15354"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15355"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15356"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15357"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15358"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15359"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15360"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15361"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15362"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15363"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15364"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15365"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15366"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15367"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15368"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15369"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15370"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15371"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15372"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15373"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15374"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15375"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15376"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15377"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15378"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15379"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15380"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15381"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15382"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15383"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15384"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15385"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15386"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15387"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15388"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15389"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15390"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15391"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15392"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15393"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15394"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15395"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15396"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15397"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15398"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15399"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15400"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15401"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15402"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15403"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15404"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15405"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15406"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15407"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15408"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15409"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15410"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15411"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15412"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15413"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15414"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15415"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15416"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15417"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15418"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15419"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15420"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15421"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15422"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15423"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15424"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15425"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15426"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15427"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15428"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15429"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15430"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15431"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15432"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15433"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15434"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15435"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15436"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15437"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15438"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15439"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15440"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15441"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15442"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15443"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15444"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15445"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15446"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15447"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15448"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15449"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15450"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15451"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15452"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15453"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15454"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15455"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15456"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15457"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15458"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15459"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15460"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15461"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15462"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15463"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15464"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15465"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15466"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15467"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15468"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15469"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15470"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15471"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15472"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15473"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15474"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15475"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15476"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15477"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15478"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15479"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15480"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15481"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15482"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15483"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15484"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15485"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15486"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15487"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15488"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15489"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15490"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15491"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15492"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15493"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15494"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15495"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15496"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15497"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15498"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15499"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15500"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15501"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15502"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15503"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15504"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15505"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15506"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15507"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15508"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15509"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15510"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15511"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15512"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15513"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15514"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15515"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15516"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15517"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15518"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15519"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15520"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15521"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15522"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15523"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15524"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15525"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15526"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15527"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15528</script>
15529 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15530WORDLISTS["french"] = [
15531"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15532"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15533"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15534"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15535"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15536"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15537"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15538"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15539"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15540"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15541"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15542"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15543"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15544"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15545"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15546"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15547"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15548"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15549"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15550"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15551"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15552"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15553"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15554"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15555"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15556"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15557"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15558"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15559"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15560"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15561"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15562"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15563"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15564"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15565"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15566"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15567"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15568"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15569"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15570"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15571"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15572"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15573"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15574"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15575"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15576"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15577"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15578"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15579"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15580"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15581"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15582"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15583"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15584"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15585"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15586"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15587"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15588"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15589"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15590"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15591"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15592"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15593"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15594"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15595"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15596"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15597"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15598"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15599"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15600"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15601"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15602"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15603"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15604"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15605"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15606"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15607"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15608"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15609"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15610"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15611"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15612"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15613"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15614"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15615"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15616"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15617"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15618"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15619"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15620"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15621"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15622"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15623"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15624"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15625"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15626"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15627"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15628"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15629"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15630"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15631"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15632"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15633"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15634"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15635"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15636"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15637"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15638"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15639"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15640"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15641"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15642"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15643"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15644"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15645"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15646"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15647"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15648"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15649"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15650"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15651"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15652"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15653"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15654"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15655"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15656"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15657"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15658"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15659"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15660"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15661"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15662"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15663"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15664"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15665"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15666"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15667"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15668"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15669"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15670"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15671"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15672"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15673"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15674"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15675"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15676"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15677"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15678"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15679"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15680"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15681"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15682"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15683"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15684"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15685"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15686"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15687"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15688"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15689"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15690"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15691"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15692"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15693"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15694"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15695"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15696"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15697"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15698"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15699"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15700"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15701"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15702"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15703"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15704"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15705"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15706"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15707"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15708"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15709"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15710"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15711"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15712"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15713"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15714"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15715"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15716"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15717"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15718"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15719"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15720"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15721"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15722"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15723"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15724"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15725"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15726"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15727"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15728"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15729"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15730"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15731"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15732"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15733"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15734"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15735"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15736</script>
15737 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15738WORDLISTS["italian"] = [
15739"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15740"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15741"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15742"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15743"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15744"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15745"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15746"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15747"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15748"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15749"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15750"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15751"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15752"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15753"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15754"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15755"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15756"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15757"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15758"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15759"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15760"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15761"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15762"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15763"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15764"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15765"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15766"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15767"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15768"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15769"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15770"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15771"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15772"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15773"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15774"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15775"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15776"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15777"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15778"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15779"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15780"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15781"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15782"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15783"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15784"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15785"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15786"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15787"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15788"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15789"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15790"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15791"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15792"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15793"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15794"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15795"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15796"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15797"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15798"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15799"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15800"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15801"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15802"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15803"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15804"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15805"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15806"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15807"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15808"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15809"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15810"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15811"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15812"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15813"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15814"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15815"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15816"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15817"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15818"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15819"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15820"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15821"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15822"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15823"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15824"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15825"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15826"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15827"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15828"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15829"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15830"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15831"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15832"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15833"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15834"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15835"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15836"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15837"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15838"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15839"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15840"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15841"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15842"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15843"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15844"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15845"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15846"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15847"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15848"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15849"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15850"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15851"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15852"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15853"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15854"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15855"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15856"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15857"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15858"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15859"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15860"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15861"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15862"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15863"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15864"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15865"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15866"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15867"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15868"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15869"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15870"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15871"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15872"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15873"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15874"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15875"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15876"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15877"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15878"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15879"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15880"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15881"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15882"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15883"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15884"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15885"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15886"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15887"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15888"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15889"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15890"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15891"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15892"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15893"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15894"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15895"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15896"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15897"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15898"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15899"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15900"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15901"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15902"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15903"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15904"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15905"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15906"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15907"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15908"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15909"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15910"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15911"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15912"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15913"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15914"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15915"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15916"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15917"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15918"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15919"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15920"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15921"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15922"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15923"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15924"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15925"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15926"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15927"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15928"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15929"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15930"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15931"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15932"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15933"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15934"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15935"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15936"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15937"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15938"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15939"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15940"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15941"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15942"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15943"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 15944</script>
ab78acc6 15945 <script>/*
3af2954a
IC
15946 * Copyright (c) 2013 Pavol Rusnak
15947 *
15948 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15949 * this software and associated documentation files (the "Software"), to deal in
15950 * the Software without restriction, including without limitation the rights to
15951 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15952 * of the Software, and to permit persons to whom the Software is furnished to do
15953 * so, subject to the following conditions:
15954 *
15955 * The above copyright notice and this permission notice shall be included in all
15956 * copies or substantial portions of the Software.
15957 *
15958 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15959 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15960 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15961 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15962 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15963 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15964 */
15965
15966/*
15967 * Javascript port from python by Ian Coleman
15968 *
80c4dd2a
IC
15969 * Requires code from sjcl
15970 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
15971 */
15972
15973var Mnemonic = function(language) {
15974
15975 var PBKDF2_ROUNDS = 2048;
15976 var RADIX = 2048;
15977
15978 var self = this;
15979 var wordlist = [];
15980
80c4dd2a
IC
15981 var hmacSHA512 = function(key) {
15982 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15983 this.encrypt = function() {
15984 return hasher.encrypt.apply(hasher, arguments);
15985 };
15986 };
15987
3af2954a
IC
15988 function init() {
15989 wordlist = WORDLISTS[language];
15990 if (wordlist.length != RADIX) {
15991 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15992 throw err;
15993 }
15994 }
15995
15996 self.generate = function(strength) {
15997 strength = strength || 128;
15998 var r = strength % 32;
15999 if (r > 0) {
16000 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
16001 }
16002 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
16003 if (!hasStrongCrypto) {
16004 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
16005 }
16006 var buffer = new Uint8Array(strength / 8);
16007 var data = crypto.getRandomValues(buffer);
16008 return self.toMnemonic(data);
16009 }
16010
80c4dd2a
IC
16011 self.toMnemonic = function(byteArray) {
16012 if (byteArray.length % 4 > 0) {
16013 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
16014 }
16015
16016 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
16017 var data = byteArrayToWordArray(byteArray);
16018 var hash = sjcl.hash.sha256.hash(data);
16019 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
16020
16021 // b is a binary string, eg '00111010101100...'
16022 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16023 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16024 //
16025 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16026 // c = bin(int(h, 16))[2:].zfill(256)
16027 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
16028 var a = byteArrayToBinaryString(byteArray);
16029 var c = zfill(hexStringToBinaryString(h), 256);
16030 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
16031 // b = line1 + line2
16032 var b = a + d;
16033
16034 var result = [];
16035 var blen = b.length / 11;
16036 for (var i=0; i<blen; i++) {
16037 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16038 result.push(wordlist[idx]);
16039 }
0515eeec 16040 return self.joinWords(result);
3af2954a
IC
16041 }
16042
16043 self.check = function(mnemonic) {
0515eeec 16044 var mnemonic = self.splitWords(mnemonic);
3af2954a
IC
16045 if (mnemonic.length % 3 > 0) {
16046 return false
16047 }
16048 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16049 var idx = [];
16050 for (var i=0; i<mnemonic.length; i++) {
16051 var word = mnemonic[i];
16052 var wordIndex = wordlist.indexOf(word);
16053 if (wordIndex == -1) {
16054 return false;
16055 }
16056 var binaryIndex = zfill(wordIndex.toString(2), 11);
16057 idx.push(binaryIndex);
16058 }
16059 var b = idx.join('');
16060 var l = b.length;
16061 //d = b[:l / 33 * 32]
16062 //h = b[-l / 33:]
16063 var d = b.substring(0, l / 33 * 32);
16064 var h = b.substring(l - l / 33, l);
16065 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 16066 var nd = binaryStringToWordArray(d);
3af2954a 16067 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
16068 var ndHash = sjcl.hash.sha256.hash(nd);
16069 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16070 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
16071 var nh = ndBstr.substring(0,l/33);
16072 return h == nh;
16073 }
16074
16075 self.toSeed = function(mnemonic, passphrase) {
16076 passphrase = passphrase || '';
0515eeec 16077 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
3af2954a
IC
16078 passphrase = self.normalizeString(passphrase)
16079 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
16080 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16081 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16082 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16083 var hashHex = sjcl.codec.hex.fromBits(result);
16084 return hashHex;
3af2954a
IC
16085 }
16086
0515eeec
IC
16087 self.splitWords = function(mnemonic) {
16088 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16089 }
16090
16091 self.joinWords = function(words) {
16092 // Set space correctly depending on the language
16093 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16094 var space = " ";
16095 if (language == "japanese") {
16096 space = "\u3000"; // ideographic space
16097 }
16098 return words.join(space);
16099 }
16100
3af2954a
IC
16101 self.normalizeString = function(str) {
16102 if (typeof str.normalize == "function") {
16103 return str.normalize("NFKD");
16104 }
16105 else {
16106 // TODO decide how to handle this in the future.
16107 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16108 return str;
16109 }
16110 }
16111
80c4dd2a
IC
16112 function byteArrayToWordArray(data) {
16113 var a = [];
16114 for (var i=0; i<data.length/4; i++) {
16115 v = 0;
16116 v += data[i*4 + 0] << 8 * 3;
16117 v += data[i*4 + 1] << 8 * 2;
16118 v += data[i*4 + 2] << 8 * 1;
16119 v += data[i*4 + 3] << 8 * 0;
16120 a.push(v);
16121 }
16122 return a;
16123 }
16124
3af2954a
IC
16125 function byteArrayToBinaryString(data) {
16126 var bin = "";
16127 for (var i=0; i<data.length; i++) {
16128 bin += zfill(data[i].toString(2), 8);
16129 }
16130 return bin;
16131 }
16132
80c4dd2a
IC
16133 function hexStringToBinaryString(hexString) {
16134 binaryString = "";
16135 for (var i=0; i<hexString.length; i++) {
16136 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16137 }
16138 return binaryString;
16139 }
16140
16141 function binaryStringToWordArray(binary) {
16142 var aLen = binary.length / 32;
16143 var a = [];
16144 for (var i=0; i<aLen; i++) {
16145 var valueStr = binary.substring(0,32);
3af2954a 16146 var value = parseInt(valueStr, 2);
80c4dd2a
IC
16147 a.push(value);
16148 binary = binary.slice(32);
3af2954a 16149 }
80c4dd2a 16150 return a;
3af2954a
IC
16151 }
16152
16153 // Pad a numeric string on the left with zero digits until the given width
16154 // is reached.
16155 // Note this differs to the python implementation because it does not
16156 // handle numbers starting with a sign.
16157 function zfill(source, length) {
16158 source = source.toString();
16159 while (source.length < length) {
16160 source = '0' + source;
16161 }
16162 return source;
16163 }
16164
16165 init();
ebd8d4e8 16166
3af2954a 16167}
dc55c6b0 16168</script>
ab78acc6 16169 <script>(function() {
ebd8d4e8 16170
0515eeec
IC
16171 // mnemonics is populated as required by getLanguage
16172 var mnemonics = { "english": new Mnemonic("english") };
16173 var mnemonic = mnemonics["english"];
73161a92 16174 var seed = null
ebd8d4e8
IC
16175 var bip32RootKey = null;
16176 var bip32ExtendedKey = null;
ab78acc6 16177 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
16178 var addressRowTemplate = $("#address-row-template");
16179
80c4dd2a
IC
16180 var showIndex = true;
16181 var showAddress = true;
1b12b2f5 16182 var showPubKey = true;
80c4dd2a
IC
16183 var showPrivKey = true;
16184
ebd8d4e8 16185 var phraseChangeTimeoutEvent = null;
efe41586 16186 var rootKeyChangedTimeoutEvent = null;
ebd8d4e8
IC
16187
16188 var DOM = {};
d6cedc94
IC
16189 DOM.network = $(".network");
16190 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 16191 DOM.phrase = $(".phrase");
721b7284 16192 DOM.passphrase = $(".passphrase");
ebd8d4e8 16193 DOM.generate = $(".generate");
73161a92 16194 DOM.seed = $(".seed");
ebd8d4e8
IC
16195 DOM.rootKey = $(".root-key");
16196 DOM.extendedPrivKey = $(".extended-priv-key");
16197 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
16198 DOM.bip32tab = $("#bip32-tab");
16199 DOM.bip44tab = $("#bip44-tab");
16200 DOM.bip32panel = $("#bip32");
16201 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
16202 DOM.bip32path = $("#bip32-path");
16203 DOM.bip44path = $("#bip44-path");
16204 DOM.bip44purpose = $("#bip44 .purpose");
16205 DOM.bip44coin = $("#bip44 .coin");
16206 DOM.bip44account = $("#bip44 .account");
16207 DOM.bip44change = $("#bip44 .change");
16208 DOM.strength = $(".strength");
1975bfbc 16209 DOM.hardenedAddresses = $(".hardened-addresses");
ebd8d4e8
IC
16210 DOM.addresses = $(".addresses");
16211 DOM.rowsToAdd = $(".rows-to-add");
16212 DOM.more = $(".more");
16213 DOM.feedback = $(".feedback");
16214 DOM.tab = $(".derivation-type a");
16215 DOM.indexToggle = $(".index-toggle");
16216 DOM.addressToggle = $(".address-toggle");
1b12b2f5 16217 DOM.publicKeyToggle = $(".public-key-toggle");
ebd8d4e8 16218 DOM.privateKeyToggle = $(".private-key-toggle");
0515eeec 16219 DOM.languages = $(".languages a");
ebd8d4e8 16220
ebd8d4e8
IC
16221 function init() {
16222 // Events
d6cedc94 16223 DOM.network.on("change", networkChanged);
a19a5498
IC
16224 DOM.phrase.on("input", delayedPhraseChanged);
16225 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
16226 DOM.generate.on("click", generateClicked);
16227 DOM.more.on("click", showMore);
efe41586
IC
16228 DOM.rootKey.on("input", delayedRootKeyChanged);
16229 DOM.bip32path.on("input", calcForDerivationPath);
16230 DOM.bip44purpose.on("input", calcForDerivationPath);
16231 DOM.bip44coin.on("input", calcForDerivationPath);
16232 DOM.bip44account.on("input", calcForDerivationPath);
16233 DOM.bip44change.on("input", calcForDerivationPath);
16234 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
1975bfbc 16235 DOM.hardenedAddresses.on("change", calcForDerivationPath);
ebd8d4e8
IC
16236 DOM.indexToggle.on("click", toggleIndexes);
16237 DOM.addressToggle.on("click", toggleAddresses);
1b12b2f5 16238 DOM.publicKeyToggle.on("click", togglePublicKeys);
ebd8d4e8 16239 DOM.privateKeyToggle.on("click", togglePrivateKeys);
0515eeec 16240 DOM.languages.on("click", languageChanged);
ebd8d4e8
IC
16241 disableForms();
16242 hidePending();
16243 hideValidationError();
ab78acc6 16244 populateNetworkSelect();
ebd8d4e8
IC
16245 }
16246
16247 // Event handlers
16248
d6cedc94 16249 function networkChanged(e) {
54563907
IC
16250 var networkIndex = e.target.value;
16251 networks[networkIndex].onSelect();
16252 if (seed != null) {
16253 phraseChanged();
16254 }
16255 else {
16256 rootKeyChanged();
16257 }
d6cedc94
IC
16258 }
16259
ebd8d4e8
IC
16260 function delayedPhraseChanged() {
16261 hideValidationError();
16262 showPending();
16263 if (phraseChangeTimeoutEvent != null) {
16264 clearTimeout(phraseChangeTimeoutEvent);
16265 }
16266 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
16267 }
16268
16269 function phraseChanged() {
16270 showPending();
16271 hideValidationError();
0515eeec 16272 setMnemonicLanguage();
ebd8d4e8
IC
16273 // Get the mnemonic phrase
16274 var phrase = DOM.phrase.val();
16275 var errorText = findPhraseErrors(phrase);
16276 if (errorText) {
16277 showValidationError(errorText);
16278 return;
16279 }
efe41586
IC
16280 // Calculate and display
16281 var passphrase = DOM.passphrase.val();
16282 calcBip32RootKeyFromSeed(phrase, passphrase);
16283 calcForDerivationPath();
16284 hidePending();
16285 }
16286
16287 function delayedRootKeyChanged() {
16288 // Warn if there is an existing mnemonic or passphrase.
16289 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
16290 if (!confirm("This will clear existing mnemonic and passphrase")) {
16291 DOM.rootKey.val(bip32RootKey);
16292 return
16293 }
16294 }
16295 hideValidationError();
16296 showPending();
16297 // Clear existing mnemonic and passphrase
16298 DOM.phrase.val("");
16299 DOM.passphrase.val("");
16300 seed = null;
16301 if (rootKeyChangedTimeoutEvent != null) {
16302 clearTimeout(rootKeyChangedTimeoutEvent);
16303 }
16304 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
16305 }
16306
16307 function rootKeyChanged() {
16308 showPending();
16309 hideValidationError();
16310 // Validate the root key TODO
16311 var rootKeyBase58 = DOM.rootKey.val();
16312 var errorText = validateRootKey(rootKeyBase58);
16313 if (errorText) {
16314 showValidationError(errorText);
16315 return;
16316 }
16317 // Calculate and display
16318 calcBip32RootKeyFromBase58(rootKeyBase58);
16319 calcForDerivationPath();
16320 hidePending();
16321 }
16322
16323 function calcForDerivationPath() {
16324 showPending();
16325 hideValidationError();
ebd8d4e8 16326 // Get the derivation path
38523d36
IC
16327 var derivationPath = getDerivationPath();
16328 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
16329 if (errorText) {
16330 showValidationError(errorText);
16331 return;
16332 }
efe41586 16333 calcBip32ExtendedKey(derivationPath);
ebd8d4e8
IC
16334 displayBip32Info();
16335 hidePending();
16336 }
16337
16338 function generateClicked() {
16339 clearDisplay();
16340 showPending();
16341 setTimeout(function() {
0515eeec 16342 setMnemonicLanguage();
ebd8d4e8
IC
16343 var phrase = generateRandomPhrase();
16344 if (!phrase) {
16345 return;
16346 }
16347 phraseChanged();
16348 }, 50);
16349 }
16350
0515eeec
IC
16351 function languageChanged() {
16352 setTimeout(function() {
16353 setMnemonicLanguage();
16354 if (DOM.phrase.val().length > 0) {
16355 var newPhrase = convertPhraseToNewLanguage();
16356 DOM.phrase.val(newPhrase);
16357 phraseChanged();
16358 }
16359 else {
16360 DOM.generate.trigger("click");
16361 }
16362 }, 50);
16363 }
16364
ebd8d4e8 16365 function toggleIndexes() {
80c4dd2a 16366 showIndex = !showIndex;
ebd8d4e8
IC
16367 $("td.index span").toggleClass("invisible");
16368 }
16369
16370 function toggleAddresses() {
80c4dd2a 16371 showAddress = !showAddress;
ebd8d4e8
IC
16372 $("td.address span").toggleClass("invisible");
16373 }
16374
1b12b2f5
IC
16375 function togglePublicKeys() {
16376 showPubKey = !showPubKey;
16377 $("td.pubkey span").toggleClass("invisible");
16378 }
16379
ebd8d4e8 16380 function togglePrivateKeys() {
80c4dd2a 16381 showPrivKey = !showPrivKey;
ebd8d4e8
IC
16382 $("td.privkey span").toggleClass("invisible");
16383 }
16384
16385 // Private methods
16386
16387 function generateRandomPhrase() {
16388 if (!hasStrongRandom()) {
16389 var errorText = "This browser does not support strong randomness";
16390 showValidationError(errorText);
16391 return;
16392 }
16393 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
16394 var strength = numWords / 3 * 32;
16395 var words = mnemonic.generate(strength);
16396 DOM.phrase.val(words);
16397 return words;
16398 }
16399
efe41586 16400 function calcBip32RootKeyFromSeed(phrase, passphrase) {
73161a92 16401 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 16402 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
efe41586
IC
16403 }
16404
16405 function calcBip32RootKeyFromBase58(rootKeyBase58) {
3821c0d3 16406 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
16407 }
16408
16409 function calcBip32ExtendedKey(path) {
ebd8d4e8
IC
16410 bip32ExtendedKey = bip32RootKey;
16411 // Derive the key from the path
16412 var pathBits = path.split("/");
16413 for (var i=0; i<pathBits.length; i++) {
16414 var bit = pathBits[i];
16415 var index = parseInt(bit);
16416 if (isNaN(index)) {
16417 continue;
16418 }
16419 var hardened = bit[bit.length-1] == "'";
16420 if (hardened) {
16421 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16422 }
16423 else {
16424 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16425 }
16426 }
16427 }
16428
16429 function showValidationError(errorText) {
16430 DOM.feedback
16431 .text(errorText)
16432 .show();
16433 }
16434
16435 function hideValidationError() {
16436 DOM.feedback
16437 .text("")
16438 .hide();
16439 }
16440
16441 function findPhraseErrors(phrase) {
16442 // TODO make this right
16443 // Preprocess the words
783981de 16444 phrase = mnemonic.normalizeString(phrase);
0515eeec 16445 var words = phraseToWordArray(phrase);
563e401a 16446 // Check each word
0515eeec
IC
16447 for (var i=0; i<words.length; i++) {
16448 var word = words[i];
16449 var language = getLanguage();
16450 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
16451 console.log("Finding closest match to " + word);
16452 var nearestWord = findNearestWord(word);
16453 return word + " not in wordlist, did you mean " + nearestWord + "?";
16454 }
16455 }
ebd8d4e8 16456 // Check the words are valid
0515eeec 16457 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
16458 var isValid = mnemonic.check(properPhrase);
16459 if (!isValid) {
16460 return "Invalid mnemonic";
16461 }
16462 return false;
16463 }
16464
efe41586
IC
16465 function validateRootKey(rootKeyBase58) {
16466 try {
16467 bitcoin.HDNode.fromBase58(rootKeyBase58);
16468 }
16469 catch (e) {
16470 return "Invalid root key";
16471 }
16472 return "";
16473 }
16474
38523d36
IC
16475 function getDerivationPath() {
16476 if (DOM.bip44tab.hasClass("active")) {
16477 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
16478 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
16479 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
16480 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
16481 var path = "m/";
16482 path += purpose + "'/";
16483 path += coin + "'/";
16484 path += account + "'/";
16485 path += change;
16486 DOM.bip44path.val(path);
16487 var derivationPath = DOM.bip44path.val();
16488 console.log("Using derivation path from BIP44 tab: " + derivationPath);
16489 return derivationPath;
16490 }
16491 else if (DOM.bip32tab.hasClass("active")) {
16492 var derivationPath = DOM.bip32path.val();
16493 console.log("Using derivation path from BIP32 tab: " + derivationPath);
16494 return derivationPath;
16495 }
16496 else {
16497 console.log("Unknown derivation path");
16498 }
16499 }
16500
ebd8d4e8 16501 function findDerivationPathErrors(path) {
30c9e79d
IC
16502 // TODO is not perfect but is better than nothing
16503 // Inspired by
16504 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
16505 // and
16506 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
16507 var maxDepth = 255; // TODO verify this!!
16508 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
16509 if (path[0] != "m") {
16510 return "First character must be 'm'";
16511 }
16512 if (path.length > 1) {
16513 if (path[1] != "/") {
16514 return "Separator must be '/'";
16515 }
16516 var indexes = path.split("/");
16517 if (indexes.length > maxDepth) {
16518 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16519 }
16520 for (var depth = 1; depth<indexes.length; depth++) {
16521 var index = indexes[depth];
16522 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
16523 if (invalidChars.length > 0) {
16524 return "Invalid characters " + invalidChars + " found at depth " + depth;
16525 }
16526 var indexValue = parseInt(index.replace("'", ""));
16527 if (isNaN(depth)) {
16528 return "Invalid number at depth " + depth;
16529 }
16530 if (indexValue > maxIndexValue) {
16531 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16532 }
16533 }
16534 }
ebd8d4e8
IC
16535 return false;
16536 }
16537
16538 function displayBip32Info() {
16539 // Display the key
73161a92 16540 DOM.seed.val(seed);
ebd8d4e8
IC
16541 var rootKey = bip32RootKey.toBase58();
16542 DOM.rootKey.val(rootKey);
16543 var extendedPrivKey = bip32ExtendedKey.toBase58();
16544 DOM.extendedPrivKey.val(extendedPrivKey);
16545 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16546 DOM.extendedPubKey.val(extendedPubKey);
16547 // Display the addresses and privkeys
16548 clearAddressesList();
16549 displayAddresses(0, 20);
16550 }
16551
16552 function displayAddresses(start, total) {
16553 for (var i=0; i<total; i++) {
80c4dd2a
IC
16554 var index = i + start;
16555 new TableRow(index);
16556 }
16557 }
16558
16559 function TableRow(index) {
16560
1975bfbc
IC
16561 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
16562
80c4dd2a
IC
16563 function init() {
16564 calculateValues();
16565 }
16566
16567 function calculateValues() {
16568 setTimeout(function() {
1975bfbc
IC
16569 var key = "";
16570 if (useHardenedAddresses) {
16571 key = bip32ExtendedKey.deriveHardened(index);
16572 }
16573 else {
16574 key = bip32ExtendedKey.derive(index);
16575 }
80c4dd2a
IC
16576 var address = key.getAddress().toString();
16577 var privkey = key.privKey.toWIF(network);
1b12b2f5 16578 var pubkey = key.pubKey.toHex();
38523d36 16579 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
16580 if (useHardenedAddresses) {
16581 indexText = indexText + "'";
16582 }
1b12b2f5 16583 addAddressToList(indexText, address, pubkey, privkey);
80c4dd2a 16584 }, 50)
ebd8d4e8 16585 }
80c4dd2a
IC
16586
16587 init();
16588
ebd8d4e8
IC
16589 }
16590
16591 function showMore() {
16592 var start = DOM.addresses.children().length;
16593 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16594 if (isNaN(rowsToAdd)) {
16595 rowsToAdd = 20;
16596 DOM.rowsToAdd.val("20");
16597 }
16598 if (rowsToAdd > 200) {
16599 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
16600 msg += "Do you want to continue?";
16601 if (!confirm(msg)) {
16602 return;
16603 }
16604 }
ebd8d4e8 16605 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
16606 }
16607
16608 function clearDisplay() {
16609 clearAddressesList();
16610 clearKey();
16611 hideValidationError();
16612 }
16613
16614 function clearAddressesList() {
16615 DOM.addresses.empty();
16616 }
16617
16618 function clearKey() {
16619 DOM.rootKey.val("");
16620 DOM.extendedPrivKey.val("");
16621 DOM.extendedPubKey.val("");
16622 }
16623
1b12b2f5 16624 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 16625 var row = $(addressRowTemplate.html());
80c4dd2a
IC
16626 // Elements
16627 var indexCell = row.find(".index span");
16628 var addressCell = row.find(".address span");
1b12b2f5 16629 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
16630 var privkeyCell = row.find(".privkey span");
16631 // Content
ae30fed8 16632 indexCell.text(indexText);
80c4dd2a 16633 addressCell.text(address);
1b12b2f5 16634 pubkeyCell.text(pubkey);
80c4dd2a
IC
16635 privkeyCell.text(privkey);
16636 // Visibility
16637 if (!showIndex) {
16638 indexCell.addClass("invisible");
16639 }
16640 if (!showAddress) {
16641 addressCell.addClass("invisible");
16642 }
1b12b2f5
IC
16643 if (!showPubKey) {
16644 pubkeyCell.addClass("invisible");
16645 }
80c4dd2a 16646 if (!showPrivKey) {
6d628db7 16647 privkeyCell.addClass("invisible");
80c4dd2a 16648 }
ebd8d4e8
IC
16649 DOM.addresses.append(row);
16650 }
16651
16652 function hasStrongRandom() {
16653 return 'crypto' in window && window['crypto'] !== null;
16654 }
16655
16656 function disableForms() {
16657 $("form").on("submit", function(e) {
16658 e.preventDefault();
16659 });
16660 }
16661
ebd8d4e8
IC
16662 function parseIntNoNaN(val, defaultVal) {
16663 var v = parseInt(val);
16664 if (isNaN(v)) {
16665 return defaultVal;
16666 }
16667 return v;
16668 }
16669
16670 function showPending() {
16671 DOM.feedback
16672 .text("Calculating...")
16673 .show();
16674 }
16675
563e401a 16676 function findNearestWord(word) {
0515eeec
IC
16677 var language = getLanguage();
16678 var words = WORDLISTS[language];
563e401a
IC
16679 var minDistance = 99;
16680 var closestWord = words[0];
16681 for (var i=0; i<words.length; i++) {
16682 var comparedTo = words[i];
16683 var distance = Levenshtein.get(word, comparedTo);
16684 if (distance < minDistance) {
16685 closestWord = comparedTo;
16686 minDistance = distance;
16687 }
16688 }
16689 return closestWord;
16690 }
16691
ebd8d4e8
IC
16692 function hidePending() {
16693 DOM.feedback
16694 .text("")
16695 .hide();
16696 }
16697
ab78acc6
IC
16698 function populateNetworkSelect() {
16699 for (var i=0; i<networks.length; i++) {
16700 var network = networks[i];
16701 var option = $("<option>");
16702 option.attr("value", i);
16703 option.text(network.name);
16704 DOM.phraseNetwork.append(option);
16705 }
16706 }
16707
0515eeec
IC
16708 function getLanguage() {
16709 var defaultLanguage = "english";
16710 // Try to get from existing phrase
16711 var language = getLanguageFromPhrase();
16712 // Try to get from url if not from phrase
16713 if (language.length == 0) {
16714 language = getLanguageFromUrl();
16715 }
16716 // Default to English if no other option
16717 if (language.length == 0) {
16718 language = defaultLanguage;
16719 }
16720 return language;
16721 }
16722
16723 function getLanguageFromPhrase(phrase) {
16724 // Check if how many words from existing phrase match a language.
16725 var language = "";
16726 if (!phrase) {
16727 phrase = DOM.phrase.val();
16728 }
16729 if (phrase.length > 0) {
16730 var words = phraseToWordArray(phrase);
16731 var languageMatches = {};
16732 for (l in WORDLISTS) {
16733 // Track how many words match in this language
16734 languageMatches[l] = 0;
16735 for (var i=0; i<words.length; i++) {
16736 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
16737 if (wordInLanguage) {
16738 languageMatches[l]++;
16739 }
16740 }
16741 // Find languages with most word matches.
16742 // This is made difficult due to commonalities between Chinese
16743 // simplified vs traditional.
16744 var mostMatches = 0;
16745 var mostMatchedLanguages = [];
16746 for (var l in languageMatches) {
16747 var numMatches = languageMatches[l];
16748 if (numMatches > mostMatches) {
16749 mostMatches = numMatches;
16750 mostMatchedLanguages = [l];
16751 }
16752 else if (numMatches == mostMatches) {
16753 mostMatchedLanguages.push(l);
16754 }
16755 }
16756 }
16757 if (mostMatchedLanguages.length > 0) {
16758 // Use first language and warn if multiple detected
16759 language = mostMatchedLanguages[0];
16760 if (mostMatchedLanguages.length > 1) {
16761 console.warn("Multiple possible languages");
16762 console.warn(mostMatchedLanguages);
16763 }
16764 }
16765 }
16766 return language;
16767 }
16768
16769 function getLanguageFromUrl() {
16770 return window.location.hash.substring(1);
16771 }
16772
16773 function setMnemonicLanguage() {
16774 var language = getLanguage();
16775 // Load the bip39 mnemonic generator for this language if required
16776 if (!(language in mnemonics)) {
16777 mnemonics[language] = new Mnemonic(language);
16778 }
16779 mnemonic = mnemonics[language];
16780 }
16781
16782 function convertPhraseToNewLanguage() {
16783 var oldLanguage = getLanguageFromPhrase();
16784 var newLanguage = getLanguageFromUrl();
16785 var oldPhrase = DOM.phrase.val();
16786 var oldWords = phraseToWordArray(oldPhrase);
16787 var newWords = [];
16788 for (var i=0; i<oldWords.length; i++) {
16789 var oldWord = oldWords[i];
16790 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16791 var newWord = WORDLISTS[newLanguage][index];
16792 newWords.push(newWord);
16793 }
16794 newPhrase = wordArrayToPhrase(newWords);
16795 return newPhrase;
16796 }
16797
16798 // TODO look at jsbip39 - mnemonic.splitWords
16799 function phraseToWordArray(phrase) {
16800 var words = phrase.split(/\s/g);
16801 var noBlanks = [];
16802 for (var i=0; i<words.length; i++) {
16803 var word = words[i];
16804 if (word.length > 0) {
16805 noBlanks.push(word);
16806 }
16807 }
16808 return noBlanks;
16809 }
16810
16811 // TODO look at jsbip39 - mnemonic.joinWords
16812 function wordArrayToPhrase(words) {
16813 var phrase = words.join(" ");
16814 var language = getLanguageFromPhrase(phrase);
16815 if (language == "japanese") {
16816 phrase = words.join("\u3000");
16817 }
16818 return phrase;
16819 }
16820
ab78acc6
IC
16821 var networks = [
16822 {
16823 name: "Bitcoin",
16824 onSelect: function() {
16825 network = bitcoin.networks.bitcoin;
16826 DOM.bip44coin.val(0);
ab78acc6
IC
16827 },
16828 },
16829 {
16830 name: "Bitcoin Testnet",
16831 onSelect: function() {
16832 network = bitcoin.networks.testnet;
16833 DOM.bip44coin.val(1);
ab78acc6
IC
16834 },
16835 },
16836 {
16837 name: "Litecoin",
16838 onSelect: function() {
16839 network = bitcoin.networks.litecoin;
16840 DOM.bip44coin.val(2);
16841 },
16842 },
16843 {
16844 name: "Dogecoin",
16845 onSelect: function() {
16846 network = bitcoin.networks.dogecoin;
16847 DOM.bip44coin.val(3);
16848 },
16849 },
d5dc92fd
IC
16850 {
16851 name: "ShadowCash",
16852 onSelect: function() {
16853 network = bitcoin.networks.shadow;
16854 DOM.bip44coin.val(35);
16855 },
16856 },
16857 {
16858 name: "ShadowCash Testnet",
16859 onSelect: function() {
16860 network = bitcoin.networks.shadowtn;
16861 DOM.bip44coin.val(1);
16862 },
16863 },
a3baa26e
IC
16864 {
16865 name: "Viacoin",
16866 onSelect: function() {
16867 network = bitcoin.networks.viacoin;
16868 DOM.bip44coin.val(14);
16869 },
16870 },
16871 {
16872 name: "Viacoin Testnet",
16873 onSelect: function() {
16874 network = bitcoin.networks.viacointestnet;
16875 DOM.bip44coin.val(1);
16876 },
16877 },
16878 {
16879 name: "Jumbucks",
16880 onSelect: function() {
16881 network = bitcoin.networks.jumbucks;
16882 DOM.bip44coin.val(26);
16883 },
16884 },
5c434a8a
CM
16885 {
16886 name: "CLAM",
16887 onSelect: function() {
16888 network = bitcoin.networks.clam;
16889 DOM.bip44coin.val(23);
16890 },
16891 },
5493efc3 16892 {
16893 name: "DASH",
16894 onSelect: function() {
16895 network = bitcoin.networks.dash;
16896 DOM.bip44coin.val(5);
16897 },
16898 },
07ac4350 16899 {
16900 name: "Namecoin",
16901 onSelect: function() {
16902 network = bitcoin.networks.namecoin;
16903 DOM.bip44coin.val(7);
16904 },
16905 },
16906 {
16907 name: "Peercoin",
16908 onSelect: function() {
16909 network = bitcoin.networks.peercoin;
16910 DOM.bip44coin.val(6);
16911 },
16912 },
ab78acc6
IC
16913 ]
16914
ebd8d4e8
IC
16915 init();
16916
16917})();
dc55c6b0 16918</script>
ebd8d4e8
IC
16919 </body>
16920</html>