]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Languages compiled into bip39-standalone.html
[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>
101 <span title="Pending availability of BIP39 unit tests">Experimental:</span>
102 <a href="#spanish" title="Spanish">Español</a>
103 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
104 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
105 <a href="#french" title="French">Français</a>
106 <a href="#italian" title="Italian">Italiano</a>
107 </div>
ab78acc6
IC
108 </div>
109 <div class="form-group">
b0818b31 110 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 111 <div class="col-sm-10">
b0818b31 112 <textarea id="phrase" class="phrase form-control"></textarea>
ab78acc6
IC
113 </div>
114 </div>
115 <div class="form-group">
116 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
117 <div class="col-sm-10">
118 <textarea id="passphrase" class="passphrase form-control"></textarea>
119 </div>
120 </div>
73161a92
IC
121 <div class="form-group">
122 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
123 <div class="col-sm-10">
124 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
125 </div>
126 </div>
ab78acc6
IC
127 <div class="form-group">
128 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
129 <div class="col-sm-10">
130 <select id="network-phrase" class="network form-control">
131 <!-- populated by javascript -->
132 </select>
133 </div>
134 </div>
135 <div class="form-group">
136 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
137 <div class="col-sm-10">
efe41586 138 <textarea id="root-key" class="root-key form-control"></textarea>
ab78acc6
IC
139 </div>
140 </div>
141 </form>
142 </div>
143 </div>
3af2954a 144
ab78acc6 145 <hr>
3af2954a 146
ab78acc6
IC
147 <div class="row">
148 <div class="col-md-12">
149 <h2>Derivation Path</h2>
150 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 151 <li id="bip44-tab" class="active">
ab78acc6
IC
152 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
153 </li>
154 <li id="bip32-tab">
155 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
156 </li>
157 </ul>
158 <div class="derivation-type tab-content">
d5dc92fd 159 <div id="bip44" class="tab-pane active">
ab78acc6
IC
160 <form class="form-horizontal" role="form">
161 <br>
162 <div class="col-sm-2"></div>
163 <div class="col-sm-10">
164 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
165 </div>
166 <div class="form-group">
167 <label for="purpose" class="col-sm-2 control-label">
168 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
169 </label>
170 <div class="col-sm-10">
171 <input id="purpose" type="text" class="purpose form-control" value="44">
172 </div>
173 </div>
174 <div class="form-group">
175 <label for="coin" class="col-sm-2 control-label">
176 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
177 </label>
178 <div class="col-sm-10">
179 <input id="coin" type="text" class="coin form-control" value="0">
180 </div>
181 </div>
182 <div class="form-group">
183 <label for="account" class="col-sm-2 control-label">
184 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
185 </label>
186 <div class="col-sm-10">
187 <input id="account" type="text" class="account form-control" value="0">
188 </div>
189 </div>
190 <div class="form-group">
191 <label for="change" class="col-sm-2 control-label">
192 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
193 </label>
194 <div class="col-sm-10">
195 <input id="change" type="text" class="change form-control" value="0">
196 </div>
197 </div>
198 <div class="form-group">
199 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
200 <div class="col-sm-10">
201 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
202 </div>
203 </div>
204 </form>
205 </div>
206 <div id="bip32" class="tab-pane">
207 <form class="form-horizontal" role="form">
208 <br>
209 <div class="col-sm-2"></div>
210 <div class="col-sm-10">
211 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
212 </div>
213 <div class="form-group">
214 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
215 <div class="col-sm-10">
216 <input id="bip32-path" type="text" class="path form-control" value="m/0">
217 </div>
218 </div>
1975bfbc
IC
219 <div class="form-group">
220 <div class="col-sm-2"></div>
221 <label class="col-sm-10">
222 <input class="hardened-addresses" type="checkbox">
223 Use hardened addresses
224 </label>
225 </div>
d5dc92fd
IC
226 <div class="form-group">
227 <label class="col-sm-2 control-label">Hive Wallet</label>
228 <div class="col-sm-10">
229 <p class="form-control no-border">
230 Use path <code>m/0'/0</code>.
231 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
232 </p>
233 </div>
234 </div>
235 <div class="form-group">
236 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
237 <div class="col-sm-10">
238 <p class="form-control no-border">
239 Use path <code>m/44'/0'/0'/0</code>.
240 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
241 </p>
242 </div>
243 </div>
1975bfbc
IC
244 <div class="form-group">
245 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
246 <div class="col-sm-10">
247 <p class="form-control no-border">
248 Use path <code>m/0'/0'</code> with hardened addresses.
249 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
250 </p>
251 </div>
252 </div>
aa51da11
IC
253 <div class="form-group">
254 <label class="col-sm-2 control-label">Block Explorers</label>
255 <div class="col-sm-10">
256 <p class="form-control no-border">
257 Use path <code>m/44'/0'/0'</code>.
258 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
259 </p>
260 </div>
261 </div>
ab78acc6
IC
262 </form>
263 </div>
264 </div>
265 <form class="form-horizontal" role="form">
266 <div class="form-group">
267 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
268 <div class="col-sm-10">
269 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
270 </div>
271 </div>
272 <div class="form-group">
273 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
274 <div class="col-sm-10">
275 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
276 </div>
277 </div>
278 </form>
279 </div>
280 </div>
3af2954a 281
ab78acc6 282 <hr>
3af2954a 283
ab78acc6
IC
284 <div class="row">
285 <div class="col-md-12">
286 <h2>Derived Addresses</h2>
287 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
288 <table class="table table-striped">
289 <thead>
290 <th>
291 <div class="input-group">
ae30fed8 292 Path&nbsp;&nbsp;
ab78acc6
IC
293 <button class="index-toggle">Toggle</button>
294 </div>
295 </th>
296 <th>
297 <div class="input-group">
298 Address&nbsp;&nbsp;
299 <button class="address-toggle">Toggle</button>
300 </div>
301 </th>
302 <th>
303 <div class="input-group">
304 Private Key&nbsp;&nbsp;
305 <button class="private-key-toggle">Toggle</button>
306 </div>
307 </th>
308 </thead>
309 <tbody class="addresses">
310 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
311 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
312 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
313 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
314 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
315 </tbody>
316 </table>
317 </div>
318 </div>
319 <span>Show next </button>
320 <input type="number" class="rows-to-add" value="20">
321 <button class="more">Show</button>
3af2954a 322
ab78acc6 323 <hr>
3af2954a 324
ab78acc6
IC
325 <div class="row">
326 <div class="col-md-12">
327 <h2>More info</h2>
328 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
329 <p>
330 Read more at the
331 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
332 </p>
333 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
334 <p>
335 Read more at the
336 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
337 and see the demo at
338 <a href="http://bip32.org/" target="_blank">bip32.org</a>
339 </p>
340 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
341 <p>
342 Read more at the
343 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
344 </p>
345 <h3>Private Keys</h3>
346 <p>
347 Use private keys at
348 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
349 but be careful - it can be easy to make mistakes if you
350 don't know what you're doing
351 </p>
352 </div>
353 </div>
3af2954a 354
ab78acc6 355 <hr>
3af2954a 356
ab78acc6
IC
357 <div class="row">
358 <div class="col-md-12">
3af2954a 359
ab78acc6 360 <h2>Offline Usage</h2>
3af2954a 361
ab78acc6
IC
362 <p>
363 You can use this tool without having to be online.
364 </p>
365 <p>
366 In your browser, select file save-as, and save this page
367 as a file.
368 </p>
369 <p>
370 Double-click that file to open it in a browser
371 on any offline computer.
372 </p>
373 <p>
374 Alternatively, download it from
b630f83d
IC
375 <a href="https://github.com/iancoleman/bip39">
376 https://github.com/iancoleman/bip39
ab78acc6 377 </a>
3af2954a 378
ab78acc6
IC
379 </div>
380 </div>
3af2954a 381
ab78acc6 382 <hr>
3af2954a 383
ab78acc6
IC
384 <div class="row">
385 <div class="col-md-12">
3af2954a 386
ab78acc6 387 <h2>This project is 100% open-source code</h2>
3af2954a 388
ab78acc6
IC
389 <p>
390 <span>Get the source code at - </span>
b630f83d
IC
391 <a href="https://github.com/iancoleman/bip39" target="_blank">
392 https://github.com/iancoleman/bip39
ab78acc6
IC
393 </a>
394 </p>
3af2954a 395
ab78acc6 396 <h3>Libraries</h3>
3af2954a 397
ab78acc6
IC
398 <p>
399 <span>BitcoinJS - </span>
400 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
401 https://github.com/bitcoinjs/bitcoinjs-lib
402 </a>
403 </p>
3af2954a 404
ab78acc6
IC
405 <p>
406 <span>jsBIP39 - </span>
407 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
408 https://github.com/iancoleman/jsbip39
409 </a>
410 </p>
3af2954a 411
ab78acc6
IC
412 <p>
413 <span>sjcl - </span>
414 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
415 https://github.com/bitwiseshiftleft/sjcl
416 </a>
417 </p>
3af2954a 418
ab78acc6
IC
419 <p>
420 <span>jQuery - </span>
421 <a href="https://jquery.com/" target="_blank">
422 https://jquery.com/
423 </a>
424 </p>
3af2954a 425
ab78acc6
IC
426 <p>
427 <span>Twitter Bootstrap - </span>
428 <a href="http://getbootstrap.com/" target="_blank">
429 http://getbootstrap.com/
430 </a>
431 </p>
3af2954a 432
ab78acc6
IC
433 </div>
434 </div>
3af2954a 435
ab78acc6 436 </div>
3af2954a 437
ab78acc6
IC
438 <div class="feedback-container">
439 <div class="feedback">Loading...</div>
440 </div>
3af2954a 441
ab78acc6
IC
442 <script type="text/template" id="address-row-template">
443 <tr>
444 <td class="index"><span></span></td>
445 <td class="address"><span></span></td>
446 <td class="privkey"><span></span></td>
447 </tr>
448 </script>
449 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
450!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)
451},_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))
452},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});
453</script>
454 <script>/*!
455 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
456 * Copyright 2011-2014 Twitter, Inc.
457 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
458 */
459if("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
460 <script>(function() {
461 'use strict';
462
463 /**
464 * Extend an Object with another Object's properties.
465 *
466 * The source objects are specified as additional arguments.
467 *
468 * @param dst Object the object to extend.
469 *
470 * @return Object the final object.
471 */
472 var _extend = function(dst) {
473 var sources = Array.prototype.slice.call(arguments, 1);
474 for (var i=0; i<sources.length; ++i) {
475 var src = sources[i];
476 for (var p in src) {
477 if (src.hasOwnProperty(p)) dst[p] = src[p];
478 }
479 }
480 return dst;
481 };
482
483
484 /**
485 * Defer execution of given function.
486 * @param {Function} func
487 */
488 var _defer = function(func) {
489 if (typeof setImmediate === 'function') {
490 return setImmediate(func);
491 } else {
492 return setTimeout(func, 0);
493 }
494 };
495
496 /**
497 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
498 */
499 var Levenshtein = {
500 /**
501 * Calculate levenshtein distance of the two strings.
502 *
503 * @param str1 String the first string.
504 * @param str2 String the second string.
505 * @return Integer the levenshtein distance (0 and above).
506 */
507 get: function(str1, str2) {
508 // base cases
509 if (str1 === str2) return 0;
510 if (str1.length === 0) return str2.length;
511 if (str2.length === 0) return str1.length;
512
513 // two rows
514 var prevRow = new Array(str2.length + 1),
515 curCol, nextCol, i, j, tmp;
516
517 // initialise previous row
518 for (i=0; i<prevRow.length; ++i) {
519 prevRow[i] = i;
520 }
521
522 // calculate current row distance from previous row
523 for (i=0; i<str1.length; ++i) {
524 nextCol = i + 1;
525
526 for (j=0; j<str2.length; ++j) {
527 curCol = nextCol;
528
529 // substution
530 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
531 // insertion
532 tmp = curCol + 1;
533 if (nextCol > tmp) {
534 nextCol = tmp;
535 }
536 // deletion
537 tmp = prevRow[j + 1] + 1;
538 if (nextCol > tmp) {
539 nextCol = tmp;
540 }
541
542 // copy current col value into previous (in preparation for next iteration)
543 prevRow[j] = curCol;
544 }
545
546 // copy last col value into previous (in preparation for next iteration)
547 prevRow[j] = nextCol;
548 }
549
550 return nextCol;
551 },
552
553 /**
554 * Asynchronously calculate levenshtein distance of the two strings.
555 *
556 * @param str1 String the first string.
557 * @param str2 String the second string.
558 * @param cb Function callback function with signature: function(Error err, int distance)
559 * @param [options] Object additional options.
560 * @param [options.progress] Function progress callback with signature: function(percentComplete)
561 */
562 getAsync: function(str1, str2, cb, options) {
563 options = _extend({}, {
564 progress: null
565 }, options);
566
567 // base cases
568 if (str1 === str2) return cb(null, 0);
569 if (str1.length === 0) return cb(null, str2.length);
570 if (str2.length === 0) return cb(null, str1.length);
571
572 // two rows
573 var prevRow = new Array(str2.length + 1),
574 curCol, nextCol,
575 i, j, tmp,
576 startTime, currentTime;
577
578 // initialise previous row
579 for (i=0; i<prevRow.length; ++i) {
580 prevRow[i] = i;
581 }
582
583 nextCol = 1;
584 i = 0;
585 j = -1;
586
587 var __calculate = function() {
588 // reset timer
589 startTime = new Date().valueOf();
590 currentTime = startTime;
591
592 // keep going until one second has elapsed
593 while (currentTime - startTime < 1000) {
594 // reached end of current row?
595 if (str2.length <= (++j)) {
596 // copy current into previous (in preparation for next iteration)
597 prevRow[j] = nextCol;
598
599 // if already done all chars
600 if (str1.length <= (++i)) {
601 return cb(null, nextCol);
602 }
603 // else if we have more left to do
604 else {
605 nextCol = i + 1;
606 j = 0;
607 }
608 }
609
610 // calculation
611 curCol = nextCol;
612
613 // substution
614 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
615 // insertion
616 tmp = curCol + 1;
617 if (nextCol > tmp) {
618 nextCol = tmp;
619 }
620 // deletion
621 tmp = prevRow[j + 1] + 1;
622 if (nextCol > tmp) {
623 nextCol = tmp;
624 }
625
626 // copy current into previous (in preparation for next iteration)
627 prevRow[j] = curCol;
628
629 // get current time
630 currentTime = new Date().valueOf();
631 }
632
633 // send a progress update?
634 if (null !== options.progress) {
635 try {
636 options.progress.call(null, (i * 100.0/ str1.length));
637 } catch (err) {
638 return cb('Progress callback: ' + err.toString());
639 }
640 }
641
642 // next iteration
643 _defer(__calculate);
644 };
645
646 __calculate();
647 }
648
649 };
650
651 // amd
652 if (typeof define !== "undefined" && define !== null && define.amd) {
653 define(function() {
654 return Levenshtein;
655 });
656 }
657 // commonjs
658 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
659 module.exports = Levenshtein;
660 }
661 // web worker
662 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
663 self.Levenshtein = Levenshtein;
664 }
665 // browser main thread
666 else if (typeof window !== "undefined" && window !== null) {
667 window.Levenshtein = Levenshtein;
668 }
669}());
670
671</script>
ab78acc6
IC
672 <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){
673// (public) Constructor
674function BigInteger(a, b, c) {
675 if (!(this instanceof BigInteger))
676 return new BigInteger(a, b, c)
3af2954a 677
ab78acc6
IC
678 if (a != null) {
679 if ("number" == typeof a) this.fromNumber(a, b, c)
680 else if (b == null && "string" != typeof a) this.fromString(a, 256)
681 else this.fromString(a, b)
682 }
683}
3af2954a 684
ab78acc6 685var proto = BigInteger.prototype
3af2954a 686
ab78acc6
IC
687// duck-typed isBigInteger
688proto.__bigi = require('../package.json').version
689BigInteger.isBigInteger = function (obj, check_ver) {
690 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
691}
3af2954a 692
ab78acc6
IC
693// Bits per digit
694var dbits
3af2954a 695
ab78acc6
IC
696// am: Compute w_j += (x*this_i), propagate carries,
697// c is initial carry, returns final carry.
698// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
699// We need to select the fastest one that works in this environment.
3af2954a 700
ab78acc6
IC
701// am1: use a single mult and divide to get the high bits,
702// max digit bits should be 26 because
703// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
704function am1(i, x, w, j, c, n) {
705 while (--n >= 0) {
706 var v = x * this[i++] + w[j] + c
707 c = Math.floor(v / 0x4000000)
708 w[j++] = v & 0x3ffffff
3af2954a 709 }
ab78acc6
IC
710 return c
711}
712// am2 avoids a big mult-and-extract completely.
713// Max digit bits should be <= 30 because we do bitwise ops
714// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
715function am2(i, x, w, j, c, n) {
716 var xl = x & 0x7fff,
717 xh = x >> 15
718 while (--n >= 0) {
719 var l = this[i] & 0x7fff
720 var h = this[i++] >> 15
721 var m = xh * l + h * xl
722 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
723 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
724 w[j++] = l & 0x3fffffff
725 }
726 return c
727}
728// Alternately, set max digit bits to 28 since some
729// browsers slow down when dealing with 32-bit numbers.
730function am3(i, x, w, j, c, n) {
731 var xl = x & 0x3fff,
732 xh = x >> 14
733 while (--n >= 0) {
734 var l = this[i] & 0x3fff
735 var h = this[i++] >> 14
736 var m = xh * l + h * xl
737 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
738 c = (l >> 28) + (m >> 14) + xh * h
739 w[j++] = l & 0xfffffff
3af2954a 740 }
ab78acc6
IC
741 return c
742}
3af2954a 743
ab78acc6
IC
744// wtf?
745BigInteger.prototype.am = am1
746dbits = 26
3af2954a 747
ab78acc6
IC
748BigInteger.prototype.DB = dbits
749BigInteger.prototype.DM = ((1 << dbits) - 1)
750var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 751
ab78acc6
IC
752var BI_FP = 52
753BigInteger.prototype.FV = Math.pow(2, BI_FP)
754BigInteger.prototype.F1 = BI_FP - dbits
755BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 756
ab78acc6
IC
757// Digit conversions
758var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
759var BI_RC = new Array()
760var rr, vv
761rr = "0".charCodeAt(0)
762for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
763rr = "a".charCodeAt(0)
764for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
765rr = "A".charCodeAt(0)
766for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 767
ab78acc6
IC
768function int2char(n) {
769 return BI_RM.charAt(n)
770}
3af2954a 771
ab78acc6
IC
772function intAt(s, i) {
773 var c = BI_RC[s.charCodeAt(i)]
774 return (c == null) ? -1 : c
775}
3af2954a 776
ab78acc6
IC
777// (protected) copy this to r
778function bnpCopyTo(r) {
779 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
780 r.t = this.t
781 r.s = this.s
782}
3af2954a 783
ab78acc6
IC
784// (protected) set from integer value x, -DV <= x < DV
785function bnpFromInt(x) {
786 this.t = 1
787 this.s = (x < 0) ? -1 : 0
788 if (x > 0) this[0] = x
789 else if (x < -1) this[0] = x + DV
790 else this.t = 0
791}
3af2954a 792
ab78acc6
IC
793// return bigint initialized to value
794function nbv(i) {
795 var r = new BigInteger()
796 r.fromInt(i)
797 return r
798}
3af2954a 799
ab78acc6
IC
800// (protected) set from string and radix
801function bnpFromString(s, b) {
802 var self = this
3af2954a 803
ab78acc6
IC
804 var k
805 if (b == 16) k = 4
806 else if (b == 8) k = 3
807 else if (b == 256) k = 8; // byte array
808 else if (b == 2) k = 1
809 else if (b == 32) k = 5
810 else if (b == 4) k = 2
811 else {
812 self.fromRadix(s, b)
813 return
814 }
815 self.t = 0
816 self.s = 0
817 var i = s.length,
818 mi = false,
819 sh = 0
820 while (--i >= 0) {
821 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
822 if (x < 0) {
823 if (s.charAt(i) == "-") mi = true
824 continue
825 }
826 mi = false
827 if (sh == 0)
828 self[self.t++] = x
829 else if (sh + k > self.DB) {
830 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
831 self[self.t++] = (x >> (self.DB - sh))
832 } else
833 self[self.t - 1] |= x << sh
834 sh += k
835 if (sh >= self.DB) sh -= self.DB
836 }
837 if (k == 8 && (s[0] & 0x80) != 0) {
838 self.s = -1
839 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
840 }
841 self.clamp()
842 if (mi) BigInteger.ZERO.subTo(self, self)
843}
3af2954a 844
ab78acc6
IC
845// (protected) clamp off excess high words
846function bnpClamp() {
847 var c = this.s & this.DM
848 while (this.t > 0 && this[this.t - 1] == c)--this.t
849}
3af2954a 850
ab78acc6
IC
851// (public) return string representation in given radix
852function bnToString(b) {
853 var self = this
854 if (self.s < 0) return "-" + self.negate()
855 .toString(b)
856 var k
857 if (b == 16) k = 4
858 else if (b == 8) k = 3
859 else if (b == 2) k = 1
860 else if (b == 32) k = 5
861 else if (b == 4) k = 2
862 else return self.toRadix(b)
863 var km = (1 << k) - 1,
864 d, m = false,
865 r = "",
866 i = self.t
867 var p = self.DB - (i * self.DB) % k
868 if (i-- > 0) {
869 if (p < self.DB && (d = self[i] >> p) > 0) {
870 m = true
871 r = int2char(d)
872 }
873 while (i >= 0) {
874 if (p < k) {
875 d = (self[i] & ((1 << p) - 1)) << (k - p)
876 d |= self[--i] >> (p += self.DB - k)
877 } else {
878 d = (self[i] >> (p -= k)) & km
879 if (p <= 0) {
880 p += self.DB
881 --i
882 }
883 }
884 if (d > 0) m = true
885 if (m) r += int2char(d)
3af2954a 886 }
3af2954a 887 }
ab78acc6
IC
888 return m ? r : "0"
889}
3af2954a 890
ab78acc6
IC
891// (public) -this
892function bnNegate() {
893 var r = new BigInteger()
894 BigInteger.ZERO.subTo(this, r)
895 return r
896}
3af2954a 897
ab78acc6
IC
898// (public) |this|
899function bnAbs() {
900 return (this.s < 0) ? this.negate() : this
901}
3af2954a 902
ab78acc6
IC
903// (public) return + if this > a, - if this < a, 0 if equal
904function bnCompareTo(a) {
905 var r = this.s - a.s
906 if (r != 0) return r
907 var i = this.t
908 r = i - a.t
909 if (r != 0) return (this.s < 0) ? -r : r
910 while (--i >= 0)
911 if ((r = this[i] - a[i]) != 0) return r
912 return 0
913}
3af2954a 914
ab78acc6
IC
915// returns bit length of the integer x
916function nbits(x) {
917 var r = 1,
918 t
919 if ((t = x >>> 16) != 0) {
920 x = t
921 r += 16
922 }
923 if ((t = x >> 8) != 0) {
924 x = t
925 r += 8
926 }
927 if ((t = x >> 4) != 0) {
928 x = t
929 r += 4
930 }
931 if ((t = x >> 2) != 0) {
932 x = t
933 r += 2
3af2954a 934 }
ab78acc6
IC
935 if ((t = x >> 1) != 0) {
936 x = t
937 r += 1
938 }
939 return r
940}
941
942// (public) return the number of bits in "this"
943function bnBitLength() {
944 if (this.t <= 0) return 0
945 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
946}
3af2954a 947
ab78acc6
IC
948// (public) return the number of bytes in "this"
949function bnByteLength() {
950 return this.bitLength() >> 3
951}
3af2954a 952
ab78acc6
IC
953// (protected) r = this << n*DB
954function bnpDLShiftTo(n, r) {
955 var i
956 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
957 for (i = n - 1; i >= 0; --i) r[i] = 0
958 r.t = this.t + n
959 r.s = this.s
960}
3af2954a 961
ab78acc6
IC
962// (protected) r = this >> n*DB
963function bnpDRShiftTo(n, r) {
964 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
965 r.t = Math.max(this.t - n, 0)
966 r.s = this.s
967}
3af2954a 968
ab78acc6
IC
969// (protected) r = this << n
970function bnpLShiftTo(n, r) {
971 var self = this
972 var bs = n % self.DB
973 var cbs = self.DB - bs
974 var bm = (1 << cbs) - 1
975 var ds = Math.floor(n / self.DB),
976 c = (self.s << bs) & self.DM,
977 i
978 for (i = self.t - 1; i >= 0; --i) {
979 r[i + ds + 1] = (self[i] >> cbs) | c
980 c = (self[i] & bm) << bs
981 }
982 for (i = ds - 1; i >= 0; --i) r[i] = 0
983 r[ds] = c
984 r.t = self.t + ds + 1
985 r.s = self.s
986 r.clamp()
987}
3af2954a 988
ab78acc6
IC
989// (protected) r = this >> n
990function bnpRShiftTo(n, r) {
991 var self = this
992 r.s = self.s
993 var ds = Math.floor(n / self.DB)
994 if (ds >= self.t) {
995 r.t = 0
996 return
3af2954a 997 }
ab78acc6
IC
998 var bs = n % self.DB
999 var cbs = self.DB - bs
1000 var bm = (1 << bs) - 1
1001 r[0] = self[ds] >> bs
1002 for (var i = ds + 1; i < self.t; ++i) {
1003 r[i - ds - 1] |= (self[i] & bm) << cbs
1004 r[i - ds] = self[i] >> bs
1005 }
1006 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1007 r.t = self.t - ds
1008 r.clamp()
1009}
3af2954a 1010
ab78acc6
IC
1011// (protected) r = this - a
1012function bnpSubTo(a, r) {
1013 var self = this
1014 var i = 0,
1015 c = 0,
1016 m = Math.min(a.t, self.t)
1017 while (i < m) {
1018 c += self[i] - a[i]
1019 r[i++] = c & self.DM
1020 c >>= self.DB
1021 }
1022 if (a.t < self.t) {
1023 c -= a.s
1024 while (i < self.t) {
1025 c += self[i]
1026 r[i++] = c & self.DM
1027 c >>= self.DB
1028 }
1029 c += self.s
1030 } else {
1031 c += self.s
1032 while (i < a.t) {
1033 c -= a[i]
1034 r[i++] = c & self.DM
1035 c >>= self.DB
1036 }
1037 c -= a.s
1038 }
1039 r.s = (c < 0) ? -1 : 0
1040 if (c < -1) r[i++] = self.DV + c
1041 else if (c > 0) r[i++] = c
1042 r.t = i
1043 r.clamp()
1044}
3af2954a 1045
ab78acc6
IC
1046// (protected) r = this * a, r != this,a (HAC 14.12)
1047// "this" should be the larger one if appropriate.
1048function bnpMultiplyTo(a, r) {
1049 var x = this.abs(),
1050 y = a.abs()
1051 var i = x.t
1052 r.t = i + y.t
1053 while (--i >= 0) r[i] = 0
1054 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1055 r.s = 0
1056 r.clamp()
1057 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1058}
3af2954a 1059
ab78acc6
IC
1060// (protected) r = this^2, r != this (HAC 14.16)
1061function bnpSquareTo(r) {
1062 var x = this.abs()
1063 var i = r.t = 2 * x.t
1064 while (--i >= 0) r[i] = 0
1065 for (i = 0; i < x.t - 1; ++i) {
1066 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1067 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1068 r[i + x.t] -= x.DV
1069 r[i + x.t + 1] = 1
1070 }
1071 }
1072 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1073 r.s = 0
1074 r.clamp()
1075}
3af2954a 1076
ab78acc6
IC
1077// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1078// r != q, this != m. q or r may be null.
1079function bnpDivRemTo(m, q, r) {
1080 var self = this
1081 var pm = m.abs()
1082 if (pm.t <= 0) return
1083 var pt = self.abs()
1084 if (pt.t < pm.t) {
1085 if (q != null) q.fromInt(0)
1086 if (r != null) self.copyTo(r)
1087 return
1088 }
1089 if (r == null) r = new BigInteger()
1090 var y = new BigInteger(),
1091 ts = self.s,
1092 ms = m.s
1093 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1094 if (nsh > 0) {
1095 pm.lShiftTo(nsh, y)
1096 pt.lShiftTo(nsh, r)
1097 } else {
1098 pm.copyTo(y)
1099 pt.copyTo(r)
1100 }
1101 var ys = y.t
1102 var y0 = y[ys - 1]
1103 if (y0 == 0) return
1104 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1105 var d1 = self.FV / yt,
1106 d2 = (1 << self.F1) / yt,
1107 e = 1 << self.F2
1108 var i = r.t,
1109 j = i - ys,
1110 t = (q == null) ? new BigInteger() : q
1111 y.dlShiftTo(j, t)
1112 if (r.compareTo(t) >= 0) {
1113 r[r.t++] = 1
1114 r.subTo(t, r)
1115 }
1116 BigInteger.ONE.dlShiftTo(ys, t)
1117 t.subTo(y, y); // "negative" y so we can replace sub with am later
1118 while (y.t < ys) y[y.t++] = 0
1119 while (--j >= 0) {
1120 // Estimate quotient digit
1121 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1122 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1123 y.dlShiftTo(j, t)
1124 r.subTo(t, r)
1125 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1126 }
ab78acc6
IC
1127 }
1128 if (q != null) {
1129 r.drShiftTo(ys, q)
1130 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1131 }
1132 r.t = ys
1133 r.clamp()
1134 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1135 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1136}
3af2954a 1137
ab78acc6
IC
1138// (public) this mod a
1139function bnMod(a) {
1140 var r = new BigInteger()
1141 this.abs()
1142 .divRemTo(a, null, r)
1143 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1144 return r
1145}
3af2954a 1146
ab78acc6
IC
1147// Modular reduction using "classic" algorithm
1148function Classic(m) {
1149 this.m = m
1150}
3af2954a 1151
ab78acc6
IC
1152function cConvert(x) {
1153 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1154 else return x
1155}
1156
1157function cRevert(x) {
1158 return x
1159}
3af2954a 1160
ab78acc6
IC
1161function cReduce(x) {
1162 x.divRemTo(this.m, null, x)
1163}
3af2954a 1164
ab78acc6
IC
1165function cMulTo(x, y, r) {
1166 x.multiplyTo(y, r)
1167 this.reduce(r)
1168}
3af2954a 1169
ab78acc6
IC
1170function cSqrTo(x, r) {
1171 x.squareTo(r)
1172 this.reduce(r)
1173}
3af2954a 1174
ab78acc6
IC
1175Classic.prototype.convert = cConvert
1176Classic.prototype.revert = cRevert
1177Classic.prototype.reduce = cReduce
1178Classic.prototype.mulTo = cMulTo
1179Classic.prototype.sqrTo = cSqrTo
3af2954a 1180
ab78acc6
IC
1181// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1182// justification:
1183// xy == 1 (mod m)
1184// xy = 1+km
1185// xy(2-xy) = (1+km)(1-km)
1186// x[y(2-xy)] = 1-k^2m^2
1187// x[y(2-xy)] == 1 (mod m^2)
1188// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1189// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1190// JS multiply "overflows" differently from C/C++, so care is needed here.
1191function bnpInvDigit() {
1192 if (this.t < 1) return 0
1193 var x = this[0]
1194 if ((x & 1) == 0) return 0
1195 var y = x & 3; // y == 1/x mod 2^2
1196 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1197 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1198 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1199 // last step - calculate inverse mod DV directly
1200 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1201 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1202 // we really want the negative inverse, and -DV < y < DV
1203 return (y > 0) ? this.DV - y : -y
1204}
3af2954a 1205
ab78acc6
IC
1206// Montgomery reduction
1207function Montgomery(m) {
1208 this.m = m
1209 this.mp = m.invDigit()
1210 this.mpl = this.mp & 0x7fff
1211 this.mph = this.mp >> 15
1212 this.um = (1 << (m.DB - 15)) - 1
1213 this.mt2 = 2 * m.t
1214}
3af2954a 1215
ab78acc6
IC
1216// xR mod m
1217function montConvert(x) {
1218 var r = new BigInteger()
1219 x.abs()
1220 .dlShiftTo(this.m.t, r)
1221 r.divRemTo(this.m, null, r)
1222 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1223 return r
1224}
3af2954a 1225
ab78acc6
IC
1226// x/R mod m
1227function montRevert(x) {
1228 var r = new BigInteger()
1229 x.copyTo(r)
1230 this.reduce(r)
1231 return r
1232}
3af2954a 1233
ab78acc6
IC
1234// x = x/R mod m (HAC 14.32)
1235function montReduce(x) {
1236 while (x.t <= this.mt2) // pad x so am has enough room later
1237 x[x.t++] = 0
1238 for (var i = 0; i < this.m.t; ++i) {
1239 // faster way of calculating u0 = x[i]*mp mod DV
1240 var j = x[i] & 0x7fff
1241 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1242 // use am to combine the multiply-shift-add into one call
1243 j = i + this.m.t
1244 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1245 // propagate carry
1246 while (x[j] >= x.DV) {
1247 x[j] -= x.DV
1248 x[++j]++
1249 }
1250 }
1251 x.clamp()
1252 x.drShiftTo(this.m.t, x)
1253 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1254}
3af2954a 1255
ab78acc6
IC
1256// r = "x^2/R mod m"; x != r
1257function montSqrTo(x, r) {
1258 x.squareTo(r)
1259 this.reduce(r)
1260}
3af2954a 1261
ab78acc6
IC
1262// r = "xy/R mod m"; x,y != r
1263function montMulTo(x, y, r) {
1264 x.multiplyTo(y, r)
1265 this.reduce(r)
1266}
3af2954a 1267
ab78acc6
IC
1268Montgomery.prototype.convert = montConvert
1269Montgomery.prototype.revert = montRevert
1270Montgomery.prototype.reduce = montReduce
1271Montgomery.prototype.mulTo = montMulTo
1272Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1273
ab78acc6
IC
1274// (protected) true iff this is even
1275function bnpIsEven() {
1276 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1277}
3af2954a 1278
ab78acc6
IC
1279// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1280function bnpExp(e, z) {
1281 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1282 var r = new BigInteger(),
1283 r2 = new BigInteger(),
1284 g = z.convert(this),
1285 i = nbits(e) - 1
1286 g.copyTo(r)
1287 while (--i >= 0) {
1288 z.sqrTo(r, r2)
1289 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1290 else {
1291 var t = r
1292 r = r2
1293 r2 = t
3af2954a 1294 }
3af2954a 1295 }
ab78acc6
IC
1296 return z.revert(r)
1297}
3af2954a 1298
ab78acc6
IC
1299// (public) this^e % m, 0 <= e < 2^32
1300function bnModPowInt(e, m) {
1301 var z
1302 if (e < 256 || m.isEven()) z = new Classic(m)
1303 else z = new Montgomery(m)
1304 return this.exp(e, z)
1305}
3af2954a 1306
ab78acc6
IC
1307// protected
1308proto.copyTo = bnpCopyTo
1309proto.fromInt = bnpFromInt
1310proto.fromString = bnpFromString
1311proto.clamp = bnpClamp
1312proto.dlShiftTo = bnpDLShiftTo
1313proto.drShiftTo = bnpDRShiftTo
1314proto.lShiftTo = bnpLShiftTo
1315proto.rShiftTo = bnpRShiftTo
1316proto.subTo = bnpSubTo
1317proto.multiplyTo = bnpMultiplyTo
1318proto.squareTo = bnpSquareTo
1319proto.divRemTo = bnpDivRemTo
1320proto.invDigit = bnpInvDigit
1321proto.isEven = bnpIsEven
1322proto.exp = bnpExp
3af2954a 1323
ab78acc6
IC
1324// public
1325proto.toString = bnToString
1326proto.negate = bnNegate
1327proto.abs = bnAbs
1328proto.compareTo = bnCompareTo
1329proto.bitLength = bnBitLength
1330proto.byteLength = bnByteLength
1331proto.mod = bnMod
1332proto.modPowInt = bnModPowInt
3af2954a 1333
ab78acc6
IC
1334// (public)
1335function bnClone() {
1336 var r = new BigInteger()
1337 this.copyTo(r)
1338 return r
1339}
3af2954a 1340
ab78acc6
IC
1341// (public) return value as integer
1342function bnIntValue() {
1343 if (this.s < 0) {
1344 if (this.t == 1) return this[0] - this.DV
1345 else if (this.t == 0) return -1
1346 } else if (this.t == 1) return this[0]
1347 else if (this.t == 0) return 0
1348 // assumes 16 < DB < 32
1349 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1350}
3af2954a 1351
ab78acc6
IC
1352// (public) return value as byte
1353function bnByteValue() {
1354 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1355}
3af2954a 1356
ab78acc6
IC
1357// (public) return value as short (assumes DB>=16)
1358function bnShortValue() {
1359 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1360}
3af2954a 1361
ab78acc6
IC
1362// (protected) return x s.t. r^x < DV
1363function bnpChunkSize(r) {
1364 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1365}
3af2954a 1366
ab78acc6
IC
1367// (public) 0 if this == 0, 1 if this > 0
1368function bnSigNum() {
1369 if (this.s < 0) return -1
1370 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1371 else return 1
1372}
3af2954a 1373
ab78acc6
IC
1374// (protected) convert to radix string
1375function bnpToRadix(b) {
1376 if (b == null) b = 10
1377 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1378 var cs = this.chunkSize(b)
1379 var a = Math.pow(b, cs)
1380 var d = nbv(a),
1381 y = new BigInteger(),
1382 z = new BigInteger(),
1383 r = ""
1384 this.divRemTo(d, y, z)
1385 while (y.signum() > 0) {
1386 r = (a + z.intValue())
1387 .toString(b)
1388 .substr(1) + r
1389 y.divRemTo(d, y, z)
1390 }
1391 return z.intValue()
1392 .toString(b) + r
1393}
3af2954a 1394
ab78acc6
IC
1395// (protected) convert from radix string
1396function bnpFromRadix(s, b) {
1397 var self = this
1398 self.fromInt(0)
1399 if (b == null) b = 10
1400 var cs = self.chunkSize(b)
1401 var d = Math.pow(b, cs),
1402 mi = false,
1403 j = 0,
1404 w = 0
1405 for (var i = 0; i < s.length; ++i) {
1406 var x = intAt(s, i)
1407 if (x < 0) {
1408 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1409 continue
1410 }
1411 w = b * w + x
1412 if (++j >= cs) {
1413 self.dMultiply(d)
1414 self.dAddOffset(w, 0)
1415 j = 0
1416 w = 0
1417 }
1418 }
1419 if (j > 0) {
1420 self.dMultiply(Math.pow(b, j))
1421 self.dAddOffset(w, 0)
1422 }
1423 if (mi) BigInteger.ZERO.subTo(self, self)
1424}
3af2954a 1425
ab78acc6
IC
1426// (protected) alternate constructor
1427function bnpFromNumber(a, b, c) {
1428 var self = this
1429 if ("number" == typeof b) {
1430 // new BigInteger(int,int,RNG)
1431 if (a < 2) self.fromInt(1)
1432 else {
1433 self.fromNumber(a, c)
1434 if (!self.testBit(a - 1)) // force MSB set
1435 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1436 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1437 while (!self.isProbablePrime(b)) {
1438 self.dAddOffset(2, 0)
1439 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1440 }
1441 }
1442 } else {
1443 // new BigInteger(int,RNG)
1444 var x = new Array(),
1445 t = a & 7
1446 x.length = (a >> 3) + 1
1447 b.nextBytes(x)
1448 if (t > 0) x[0] &= ((1 << t) - 1)
1449 else x[0] = 0
1450 self.fromString(x, 256)
3af2954a 1451 }
ab78acc6 1452}
3af2954a 1453
ab78acc6
IC
1454// (public) convert to bigendian byte array
1455function bnToByteArray() {
1456 var self = this
1457 var i = self.t,
1458 r = new Array()
1459 r[0] = self.s
1460 var p = self.DB - (i * self.DB) % 8,
1461 d, k = 0
1462 if (i-- > 0) {
1463 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1464 r[k++] = d | (self.s << (self.DB - p))
1465 while (i >= 0) {
1466 if (p < 8) {
1467 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1468 d |= self[--i] >> (p += self.DB - 8)
1469 } else {
1470 d = (self[i] >> (p -= 8)) & 0xff
1471 if (p <= 0) {
1472 p += self.DB
1473 --i
1474 }
1475 }
1476 if ((d & 0x80) != 0) d |= -256
1477 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1478 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1479 }
3af2954a 1480 }
ab78acc6
IC
1481 return r
1482}
3af2954a 1483
ab78acc6
IC
1484function bnEquals(a) {
1485 return (this.compareTo(a) == 0)
1486}
3af2954a 1487
ab78acc6
IC
1488function bnMin(a) {
1489 return (this.compareTo(a) < 0) ? this : a
1490}
3af2954a 1491
ab78acc6
IC
1492function bnMax(a) {
1493 return (this.compareTo(a) > 0) ? this : a
1494}
3af2954a 1495
ab78acc6
IC
1496// (protected) r = this op a (bitwise)
1497function bnpBitwiseTo(a, op, r) {
1498 var self = this
1499 var i, f, m = Math.min(a.t, self.t)
1500 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1501 if (a.t < self.t) {
1502 f = a.s & self.DM
1503 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1504 r.t = self.t
1505 } else {
1506 f = self.s & self.DM
1507 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1508 r.t = a.t
3af2954a 1509 }
ab78acc6
IC
1510 r.s = op(self.s, a.s)
1511 r.clamp()
1512}
3af2954a 1513
ab78acc6
IC
1514// (public) this & a
1515function op_and(x, y) {
1516 return x & y
1517}
3af2954a 1518
ab78acc6
IC
1519function bnAnd(a) {
1520 var r = new BigInteger()
1521 this.bitwiseTo(a, op_and, r)
1522 return r
1523}
3af2954a 1524
ab78acc6
IC
1525// (public) this | a
1526function op_or(x, y) {
1527 return x | y
1528}
3af2954a 1529
ab78acc6
IC
1530function bnOr(a) {
1531 var r = new BigInteger()
1532 this.bitwiseTo(a, op_or, r)
1533 return r
1534}
3af2954a 1535
ab78acc6
IC
1536// (public) this ^ a
1537function op_xor(x, y) {
1538 return x ^ y
1539}
3af2954a 1540
ab78acc6
IC
1541function bnXor(a) {
1542 var r = new BigInteger()
1543 this.bitwiseTo(a, op_xor, r)
1544 return r
1545}
3af2954a 1546
ab78acc6
IC
1547// (public) this & ~a
1548function op_andnot(x, y) {
1549 return x & ~y
1550}
3af2954a 1551
ab78acc6
IC
1552function bnAndNot(a) {
1553 var r = new BigInteger()
1554 this.bitwiseTo(a, op_andnot, r)
1555 return r
1556}
3af2954a 1557
ab78acc6
IC
1558// (public) ~this
1559function bnNot() {
1560 var r = new BigInteger()
1561 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1562 r.t = this.t
1563 r.s = ~this.s
1564 return r
1565}
3af2954a 1566
ab78acc6
IC
1567// (public) this << n
1568function bnShiftLeft(n) {
1569 var r = new BigInteger()
1570 if (n < 0) this.rShiftTo(-n, r)
1571 else this.lShiftTo(n, r)
1572 return r
1573}
3af2954a 1574
ab78acc6
IC
1575// (public) this >> n
1576function bnShiftRight(n) {
1577 var r = new BigInteger()
1578 if (n < 0) this.lShiftTo(-n, r)
1579 else this.rShiftTo(n, r)
1580 return r
1581}
3af2954a 1582
ab78acc6
IC
1583// return index of lowest 1-bit in x, x < 2^31
1584function lbit(x) {
1585 if (x == 0) return -1
1586 var r = 0
1587 if ((x & 0xffff) == 0) {
1588 x >>= 16
1589 r += 16
3af2954a 1590 }
ab78acc6
IC
1591 if ((x & 0xff) == 0) {
1592 x >>= 8
1593 r += 8
1594 }
1595 if ((x & 0xf) == 0) {
1596 x >>= 4
1597 r += 4
1598 }
1599 if ((x & 3) == 0) {
1600 x >>= 2
1601 r += 2
1602 }
1603 if ((x & 1) == 0)++r
1604 return r
1605}
3af2954a 1606
ab78acc6
IC
1607// (public) returns index of lowest 1-bit (or -1 if none)
1608function bnGetLowestSetBit() {
1609 for (var i = 0; i < this.t; ++i)
1610 if (this[i] != 0) return i * this.DB + lbit(this[i])
1611 if (this.s < 0) return this.t * this.DB
1612 return -1
1613}
3af2954a 1614
ab78acc6
IC
1615// return number of 1 bits in x
1616function cbit(x) {
1617 var r = 0
1618 while (x != 0) {
1619 x &= x - 1
1620 ++r
3af2954a 1621 }
ab78acc6
IC
1622 return r
1623}
3af2954a 1624
ab78acc6
IC
1625// (public) return number of set bits
1626function bnBitCount() {
1627 var r = 0,
1628 x = this.s & this.DM
1629 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1630 return r
1631}
1632
1633// (public) true iff nth bit is set
1634function bnTestBit(n) {
1635 var j = Math.floor(n / this.DB)
1636 if (j >= this.t) return (this.s != 0)
1637 return ((this[j] & (1 << (n % this.DB))) != 0)
1638}
3af2954a 1639
ab78acc6
IC
1640// (protected) this op (1<<n)
1641function bnpChangeBit(n, op) {
1642 var r = BigInteger.ONE.shiftLeft(n)
1643 this.bitwiseTo(r, op, r)
1644 return r
1645}
3af2954a 1646
ab78acc6
IC
1647// (public) this | (1<<n)
1648function bnSetBit(n) {
1649 return this.changeBit(n, op_or)
1650}
3af2954a 1651
ab78acc6
IC
1652// (public) this & ~(1<<n)
1653function bnClearBit(n) {
1654 return this.changeBit(n, op_andnot)
1655}
3af2954a 1656
ab78acc6
IC
1657// (public) this ^ (1<<n)
1658function bnFlipBit(n) {
1659 return this.changeBit(n, op_xor)
1660}
3af2954a 1661
ab78acc6
IC
1662// (protected) r = this + a
1663function bnpAddTo(a, r) {
1664 var self = this
3af2954a 1665
ab78acc6
IC
1666 var i = 0,
1667 c = 0,
1668 m = Math.min(a.t, self.t)
1669 while (i < m) {
1670 c += self[i] + a[i]
1671 r[i++] = c & self.DM
1672 c >>= self.DB
1673 }
1674 if (a.t < self.t) {
1675 c += a.s
1676 while (i < self.t) {
1677 c += self[i]
1678 r[i++] = c & self.DM
1679 c >>= self.DB
1680 }
1681 c += self.s
1682 } else {
1683 c += self.s
1684 while (i < a.t) {
1685 c += a[i]
1686 r[i++] = c & self.DM
1687 c >>= self.DB
1688 }
1689 c += a.s
1690 }
1691 r.s = (c < 0) ? -1 : 0
1692 if (c > 0) r[i++] = c
1693 else if (c < -1) r[i++] = self.DV + c
1694 r.t = i
1695 r.clamp()
1696}
3af2954a 1697
ab78acc6
IC
1698// (public) this + a
1699function bnAdd(a) {
1700 var r = new BigInteger()
1701 this.addTo(a, r)
1702 return r
1703}
3af2954a 1704
ab78acc6
IC
1705// (public) this - a
1706function bnSubtract(a) {
1707 var r = new BigInteger()
1708 this.subTo(a, r)
1709 return r
1710}
3af2954a 1711
ab78acc6
IC
1712// (public) this * a
1713function bnMultiply(a) {
1714 var r = new BigInteger()
1715 this.multiplyTo(a, r)
1716 return r
1717}
3af2954a 1718
ab78acc6
IC
1719// (public) this^2
1720function bnSquare() {
1721 var r = new BigInteger()
1722 this.squareTo(r)
1723 return r
1724}
3af2954a 1725
ab78acc6
IC
1726// (public) this / a
1727function bnDivide(a) {
1728 var r = new BigInteger()
1729 this.divRemTo(a, r, null)
1730 return r
1731}
3af2954a 1732
ab78acc6
IC
1733// (public) this % a
1734function bnRemainder(a) {
1735 var r = new BigInteger()
1736 this.divRemTo(a, null, r)
1737 return r
1738}
3af2954a 1739
ab78acc6
IC
1740// (public) [this/a,this%a]
1741function bnDivideAndRemainder(a) {
1742 var q = new BigInteger(),
1743 r = new BigInteger()
1744 this.divRemTo(a, q, r)
1745 return new Array(q, r)
1746}
3af2954a 1747
ab78acc6
IC
1748// (protected) this *= n, this >= 0, 1 < n < DV
1749function bnpDMultiply(n) {
1750 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1751 ++this.t
1752 this.clamp()
1753}
3af2954a 1754
ab78acc6
IC
1755// (protected) this += n << w words, this >= 0
1756function bnpDAddOffset(n, w) {
1757 if (n == 0) return
1758 while (this.t <= w) this[this.t++] = 0
1759 this[w] += n
1760 while (this[w] >= this.DV) {
1761 this[w] -= this.DV
1762 if (++w >= this.t) this[this.t++] = 0
1763 ++this[w]
3af2954a 1764 }
ab78acc6 1765}
3af2954a 1766
ab78acc6
IC
1767// A "null" reducer
1768function NullExp() {}
3af2954a 1769
ab78acc6
IC
1770function nNop(x) {
1771 return x
1772}
3af2954a 1773
ab78acc6
IC
1774function nMulTo(x, y, r) {
1775 x.multiplyTo(y, r)
1776}
3af2954a 1777
ab78acc6
IC
1778function nSqrTo(x, r) {
1779 x.squareTo(r)
1780}
3af2954a 1781
ab78acc6
IC
1782NullExp.prototype.convert = nNop
1783NullExp.prototype.revert = nNop
1784NullExp.prototype.mulTo = nMulTo
1785NullExp.prototype.sqrTo = nSqrTo
3af2954a 1786
ab78acc6
IC
1787// (public) this^e
1788function bnPow(e) {
1789 return this.exp(e, new NullExp())
1790}
3af2954a 1791
ab78acc6
IC
1792// (protected) r = lower n words of "this * a", a.t <= n
1793// "this" should be the larger one if appropriate.
1794function bnpMultiplyLowerTo(a, n, r) {
1795 var i = Math.min(this.t + a.t, n)
1796 r.s = 0; // assumes a,this >= 0
1797 r.t = i
1798 while (i > 0) r[--i] = 0
1799 var j
1800 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1801 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1802 r.clamp()
1803}
3af2954a 1804
ab78acc6
IC
1805// (protected) r = "this * a" without lower n words, n > 0
1806// "this" should be the larger one if appropriate.
1807function bnpMultiplyUpperTo(a, n, r) {
1808 --n
1809 var i = r.t = this.t + a.t - n
1810 r.s = 0; // assumes a,this >= 0
1811 while (--i >= 0) r[i] = 0
1812 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1813 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1814 r.clamp()
1815 r.drShiftTo(1, r)
1816}
3af2954a 1817
ab78acc6
IC
1818// Barrett modular reduction
1819function Barrett(m) {
1820 // setup Barrett
1821 this.r2 = new BigInteger()
1822 this.q3 = new BigInteger()
1823 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1824 this.mu = this.r2.divide(m)
1825 this.m = m
1826}
3af2954a 1827
ab78acc6
IC
1828function barrettConvert(x) {
1829 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1830 else if (x.compareTo(this.m) < 0) return x
1831 else {
1832 var r = new BigInteger()
1833 x.copyTo(r)
1834 this.reduce(r)
1835 return r
3af2954a 1836 }
ab78acc6 1837}
3af2954a 1838
ab78acc6
IC
1839function barrettRevert(x) {
1840 return x
1841}
3af2954a 1842
ab78acc6
IC
1843// x = x mod m (HAC 14.42)
1844function barrettReduce(x) {
1845 var self = this
1846 x.drShiftTo(self.m.t - 1, self.r2)
1847 if (x.t > self.m.t + 1) {
1848 x.t = self.m.t + 1
1849 x.clamp()
3af2954a 1850 }
ab78acc6
IC
1851 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1852 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1853 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1854 x.subTo(self.r2, x)
1855 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1856}
3af2954a 1857
ab78acc6
IC
1858// r = x^2 mod m; x != r
1859function barrettSqrTo(x, r) {
1860 x.squareTo(r)
1861 this.reduce(r)
1862}
3af2954a 1863
ab78acc6
IC
1864// r = x*y mod m; x,y != r
1865function barrettMulTo(x, y, r) {
1866 x.multiplyTo(y, r)
1867 this.reduce(r)
1868}
3af2954a 1869
ab78acc6
IC
1870Barrett.prototype.convert = barrettConvert
1871Barrett.prototype.revert = barrettRevert
1872Barrett.prototype.reduce = barrettReduce
1873Barrett.prototype.mulTo = barrettMulTo
1874Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1875
ab78acc6
IC
1876// (public) this^e % m (HAC 14.85)
1877function bnModPow(e, m) {
1878 var i = e.bitLength(),
1879 k, r = nbv(1),
1880 z
1881 if (i <= 0) return r
1882 else if (i < 18) k = 1
1883 else if (i < 48) k = 3
1884 else if (i < 144) k = 4
1885 else if (i < 768) k = 5
1886 else k = 6
1887 if (i < 8)
1888 z = new Classic(m)
1889 else if (m.isEven())
1890 z = new Barrett(m)
1891 else
1892 z = new Montgomery(m)
3af2954a 1893
ab78acc6
IC
1894 // precomputation
1895 var g = new Array(),
1896 n = 3,
1897 k1 = k - 1,
1898 km = (1 << k) - 1
1899 g[1] = z.convert(this)
1900 if (k > 1) {
1901 var g2 = new BigInteger()
1902 z.sqrTo(g[1], g2)
1903 while (n <= km) {
1904 g[n] = new BigInteger()
1905 z.mulTo(g2, g[n - 2], g[n])
1906 n += 2
1907 }
1908 }
1909
1910 var j = e.t - 1,
1911 w, is1 = true,
1912 r2 = new BigInteger(),
1913 t
1914 i = nbits(e[j]) - 1
1915 while (j >= 0) {
1916 if (i >= k1) w = (e[j] >> (i - k1)) & km
1917 else {
1918 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1919 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1920 }
3af2954a 1921
ab78acc6
IC
1922 n = k
1923 while ((w & 1) == 0) {
1924 w >>= 1
1925 --n
1926 }
1927 if ((i -= n) < 0) {
1928 i += this.DB
1929 --j
1930 }
1931 if (is1) { // ret == 1, don't bother squaring or multiplying it
1932 g[w].copyTo(r)
1933 is1 = false
1934 } else {
1935 while (n > 1) {
1936 z.sqrTo(r, r2)
1937 z.sqrTo(r2, r)
1938 n -= 2
1939 }
1940 if (n > 0) z.sqrTo(r, r2)
1941 else {
1942 t = r
1943 r = r2
1944 r2 = t
1945 }
1946 z.mulTo(r2, g[w], r)
1947 }
3af2954a 1948
ab78acc6
IC
1949 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1950 z.sqrTo(r, r2)
1951 t = r
1952 r = r2
1953 r2 = t
1954 if (--i < 0) {
1955 i = this.DB - 1
1956 --j
3af2954a 1957 }
3af2954a
IC
1958 }
1959 }
ab78acc6
IC
1960 return z.revert(r)
1961}
3af2954a 1962
ab78acc6
IC
1963// (public) gcd(this,a) (HAC 14.54)
1964function bnGCD(a) {
1965 var x = (this.s < 0) ? this.negate() : this.clone()
1966 var y = (a.s < 0) ? a.negate() : a.clone()
1967 if (x.compareTo(y) < 0) {
1968 var t = x
1969 x = y
1970 y = t
1971 }
1972 var i = x.getLowestSetBit(),
1973 g = y.getLowestSetBit()
1974 if (g < 0) return x
1975 if (i < g) g = i
1976 if (g > 0) {
1977 x.rShiftTo(g, x)
1978 y.rShiftTo(g, y)
1979 }
1980 while (x.signum() > 0) {
1981 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1982 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1983 if (x.compareTo(y) >= 0) {
1984 x.subTo(y, x)
1985 x.rShiftTo(1, x)
1986 } else {
1987 y.subTo(x, y)
1988 y.rShiftTo(1, y)
1989 }
3af2954a 1990 }
ab78acc6
IC
1991 if (g > 0) y.lShiftTo(g, y)
1992 return y
1993}
3af2954a 1994
ab78acc6
IC
1995// (protected) this % n, n < 2^26
1996function bnpModInt(n) {
1997 if (n <= 0) return 0
1998 var d = this.DV % n,
1999 r = (this.s < 0) ? n - 1 : 0
2000 if (this.t > 0)
2001 if (d == 0) r = this[0] % n
2002 else
2003 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2004 return r
2005}
3af2954a 2006
ab78acc6
IC
2007// (public) 1/this % m (HAC 14.61)
2008function bnModInverse(m) {
2009 var ac = m.isEven()
2010 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2011 var u = m.clone(),
2012 v = this.clone()
2013 var a = nbv(1),
2014 b = nbv(0),
2015 c = nbv(0),
2016 d = nbv(1)
2017 while (u.signum() != 0) {
2018 while (u.isEven()) {
2019 u.rShiftTo(1, u)
2020 if (ac) {
2021 if (!a.isEven() || !b.isEven()) {
2022 a.addTo(this, a)
2023 b.subTo(m, b)
2024 }
2025 a.rShiftTo(1, a)
2026 } else if (!b.isEven()) b.subTo(m, b)
2027 b.rShiftTo(1, b)
2028 }
2029 while (v.isEven()) {
2030 v.rShiftTo(1, v)
2031 if (ac) {
2032 if (!c.isEven() || !d.isEven()) {
2033 c.addTo(this, c)
2034 d.subTo(m, d)
2035 }
2036 c.rShiftTo(1, c)
2037 } else if (!d.isEven()) d.subTo(m, d)
2038 d.rShiftTo(1, d)
2039 }
2040 if (u.compareTo(v) >= 0) {
2041 u.subTo(v, u)
2042 if (ac) a.subTo(c, a)
2043 b.subTo(d, b)
2044 } else {
2045 v.subTo(u, v)
2046 if (ac) c.subTo(a, c)
2047 d.subTo(b, d)
2048 }
2049 }
2050 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2051 if (d.compareTo(m) >= 0) return d.subtract(m)
2052 if (d.signum() < 0) d.addTo(m, d)
2053 else return d
2054 if (d.signum() < 0) return d.add(m)
2055 else return d
2056}
2057
2058var lowprimes = [
2059 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2060 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2061 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2062 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2063 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2064 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2065 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2066 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2067 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2068 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2069 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2070]
2071
2072var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2073
2074// (public) test primality with certainty >= 1-.5^t
2075function bnIsProbablePrime(t) {
2076 var i, x = this.abs()
2077 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2078 for (i = 0; i < lowprimes.length; ++i)
2079 if (x[0] == lowprimes[i]) return true
2080 return false
3af2954a 2081 }
ab78acc6
IC
2082 if (x.isEven()) return false
2083 i = 1
2084 while (i < lowprimes.length) {
2085 var m = lowprimes[i],
2086 j = i + 1
2087 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2088 m = x.modInt(m)
2089 while (i < j) if (m % lowprimes[i++] == 0) return false
2090 }
2091 return x.millerRabin(t)
2092}
2093
2094// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2095function bnpMillerRabin(t) {
2096 var n1 = this.subtract(BigInteger.ONE)
2097 var k = n1.getLowestSetBit()
2098 if (k <= 0) return false
2099 var r = n1.shiftRight(k)
2100 t = (t + 1) >> 1
2101 if (t > lowprimes.length) t = lowprimes.length
2102 var a = new BigInteger(null)
2103 var j, bases = []
2104 for (var i = 0; i < t; ++i) {
2105 for (;;) {
2106 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2107 if (bases.indexOf(j) == -1) break
2108 }
2109 bases.push(j)
2110 a.fromInt(j)
2111 var y = a.modPow(r, this)
2112 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2113 var j = 1
2114 while (j++ < k && y.compareTo(n1) != 0) {
2115 y = y.modPowInt(2, this)
2116 if (y.compareTo(BigInteger.ONE) == 0) return false
2117 }
2118 if (y.compareTo(n1) != 0) return false
2119 }
3af2954a 2120 }
ab78acc6
IC
2121 return true
2122}
3af2954a 2123
ab78acc6
IC
2124// protected
2125proto.chunkSize = bnpChunkSize
2126proto.toRadix = bnpToRadix
2127proto.fromRadix = bnpFromRadix
2128proto.fromNumber = bnpFromNumber
2129proto.bitwiseTo = bnpBitwiseTo
2130proto.changeBit = bnpChangeBit
2131proto.addTo = bnpAddTo
2132proto.dMultiply = bnpDMultiply
2133proto.dAddOffset = bnpDAddOffset
2134proto.multiplyLowerTo = bnpMultiplyLowerTo
2135proto.multiplyUpperTo = bnpMultiplyUpperTo
2136proto.modInt = bnpModInt
2137proto.millerRabin = bnpMillerRabin
3af2954a 2138
ab78acc6
IC
2139// public
2140proto.clone = bnClone
2141proto.intValue = bnIntValue
2142proto.byteValue = bnByteValue
2143proto.shortValue = bnShortValue
2144proto.signum = bnSigNum
2145proto.toByteArray = bnToByteArray
2146proto.equals = bnEquals
2147proto.min = bnMin
2148proto.max = bnMax
2149proto.and = bnAnd
2150proto.or = bnOr
2151proto.xor = bnXor
2152proto.andNot = bnAndNot
2153proto.not = bnNot
2154proto.shiftLeft = bnShiftLeft
2155proto.shiftRight = bnShiftRight
2156proto.getLowestSetBit = bnGetLowestSetBit
2157proto.bitCount = bnBitCount
2158proto.testBit = bnTestBit
2159proto.setBit = bnSetBit
2160proto.clearBit = bnClearBit
2161proto.flipBit = bnFlipBit
2162proto.add = bnAdd
2163proto.subtract = bnSubtract
2164proto.multiply = bnMultiply
2165proto.divide = bnDivide
2166proto.remainder = bnRemainder
2167proto.divideAndRemainder = bnDivideAndRemainder
2168proto.modPow = bnModPow
2169proto.modInverse = bnModInverse
2170proto.pow = bnPow
2171proto.gcd = bnGCD
2172proto.isProbablePrime = bnIsProbablePrime
3af2954a 2173
ab78acc6
IC
2174// JSBN-specific extension
2175proto.square = bnSquare
3af2954a 2176
ab78acc6
IC
2177// constants
2178BigInteger.ZERO = nbv(0)
2179BigInteger.ONE = nbv(1)
2180BigInteger.valueOf = nbv
3af2954a 2181
ab78acc6 2182module.exports = BigInteger
3af2954a 2183
ab78acc6
IC
2184},{"../package.json":4}],2:[function(require,module,exports){
2185(function (Buffer){
2186// FIXME: Kind of a weird way to throw exceptions, consider removing
2187var assert = require('assert')
2188var BigInteger = require('./bigi')
3af2954a 2189
ab78acc6
IC
2190/**
2191 * Turns a byte array into a big integer.
2192 *
2193 * This function will interpret a byte array as a big integer in big
2194 * endian notation.
2195 */
2196BigInteger.fromByteArrayUnsigned = function(byteArray) {
2197 // BigInteger expects a DER integer conformant byte array
2198 if (byteArray[0] & 0x80) {
2199 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2200 }
2201
ab78acc6
IC
2202 return new BigInteger(byteArray)
2203}
3af2954a 2204
ab78acc6
IC
2205/**
2206 * Returns a byte array representation of the big integer.
2207 *
2208 * This returns the absolute of the contained value in big endian
2209 * form. A value of zero results in an empty array.
2210 */
2211BigInteger.prototype.toByteArrayUnsigned = function() {
2212 var byteArray = this.toByteArray()
2213 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2214}
3af2954a 2215
ab78acc6
IC
2216BigInteger.fromDERInteger = function(byteArray) {
2217 return new BigInteger(byteArray)
2218}
3af2954a 2219
ab78acc6
IC
2220/*
2221 * Converts BigInteger to a DER integer representation.
2222 *
2223 * The format for this value uses the most significant bit as a sign
2224 * bit. If the most significant bit is already set and the integer is
2225 * positive, a 0x00 is prepended.
2226 *
2227 * Examples:
2228 *
2229 * 0 => 0x00
2230 * 1 => 0x01
2231 * -1 => 0xff
2232 * 127 => 0x7f
2233 * -127 => 0x81
2234 * 128 => 0x0080
2235 * -128 => 0x80
2236 * 255 => 0x00ff
2237 * -255 => 0xff01
2238 * 16300 => 0x3fac
2239 * -16300 => 0xc054
2240 * 62300 => 0x00f35c
2241 * -62300 => 0xff0ca4
2242*/
2243BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2244
ab78acc6
IC
2245BigInteger.fromBuffer = function(buffer) {
2246 // BigInteger expects a DER integer conformant byte array
2247 if (buffer[0] & 0x80) {
2248 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2249
ab78acc6 2250 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2251 }
2252
ab78acc6
IC
2253 return new BigInteger(buffer)
2254}
3af2954a 2255
ab78acc6
IC
2256BigInteger.fromHex = function(hex) {
2257 if (hex === '') return BigInteger.ZERO
3af2954a 2258
ab78acc6
IC
2259 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2260 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2261 return new BigInteger(hex, 16)
2262}
3af2954a 2263
ab78acc6
IC
2264BigInteger.prototype.toBuffer = function(size) {
2265 var byteArray = this.toByteArrayUnsigned()
2266 var zeros = []
3af2954a 2267
ab78acc6
IC
2268 var padding = size - byteArray.length
2269 while (zeros.length < padding) zeros.push(0)
3af2954a 2270
ab78acc6
IC
2271 return new Buffer(zeros.concat(byteArray))
2272}
3af2954a 2273
ab78acc6
IC
2274BigInteger.prototype.toHex = function(size) {
2275 return this.toBuffer(size).toString('hex')
2276}
3af2954a 2277
ab78acc6
IC
2278}).call(this,require("buffer").Buffer)
2279},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2280var BigInteger = require('./bigi')
3af2954a 2281
ab78acc6
IC
2282//addons
2283require('./convert')
3af2954a 2284
ab78acc6
IC
2285module.exports = BigInteger
2286},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2287module.exports={
2288 "name": "bigi",
2289 "version": "1.4.0",
2290 "description": "Big integers.",
2291 "keywords": [
2292 "cryptography",
2293 "math",
2294 "bitcoin",
2295 "arbitrary",
2296 "precision",
2297 "arithmetic",
2298 "big",
2299 "integer",
2300 "int",
2301 "number",
2302 "biginteger",
2303 "bigint",
2304 "bignumber",
2305 "decimal",
2306 "float"
2307 ],
2308 "devDependencies": {
2309 "mocha": "^1.20.1",
2310 "jshint": "^2.5.1",
2311 "coveralls": "^2.10.0",
2312 "istanbul": "^0.2.11"
2313 },
2314 "repository": {
2315 "url": "https://github.com/cryptocoinjs/bigi",
2316 "type": "git"
2317 },
2318 "main": "./lib/index.js",
2319 "scripts": {
2320 "test": "_mocha -- test/*.js",
2321 "jshint": "jshint --config jshint.json lib/*.js ; true",
2322 "unit": "mocha",
2323 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2324 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2325 },
2326 "dependencies": {},
2327 "testling": {
2328 "files": "test/*.js",
2329 "harness": "mocha",
2330 "browsers": [
2331 "ie/9..latest",
2332 "firefox/latest",
2333 "chrome/latest",
2334 "safari/6.0..latest",
2335 "iphone/6.0..latest",
2336 "android-browser/4.2..latest"
2337 ]
2338 },
2339 "bugs": {
2340 "url": "https://github.com/cryptocoinjs/bigi/issues"
2341 },
2342 "homepage": "https://github.com/cryptocoinjs/bigi",
2343 "_id": "bigi@1.4.0",
2344 "dist": {
2345 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2346 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2347 },
2348 "_from": "bigi@^1.4.0",
2349 "_npmVersion": "1.4.3",
2350 "_npmUser": {
2351 "name": "jp",
2352 "email": "jprichardson@gmail.com"
2353 },
2354 "maintainers": [
2355 {
2356 "name": "jp",
2357 "email": "jprichardson@gmail.com"
2358 },
2359 {
2360 "name": "midnightlightning",
2361 "email": "boydb@midnightdesign.ws"
2362 },
2363 {
2364 "name": "sidazhang",
2365 "email": "sidazhang89@gmail.com"
2366 },
2367 {
2368 "name": "nadav",
2369 "email": "npm@shesek.info"
3af2954a 2370 }
ab78acc6
IC
2371 ],
2372 "directories": {},
2373 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2374 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2375}
3af2954a 2376
ab78acc6
IC
2377},{}],5:[function(require,module,exports){
2378// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2379//
2380// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2381//
2382// Originally from narwhal.js (http://narwhaljs.org)
2383// Copyright (c) 2009 Thomas Robinson <280north.com>
2384//
2385// Permission is hereby granted, free of charge, to any person obtaining a copy
2386// of this software and associated documentation files (the 'Software'), to
2387// deal in the Software without restriction, including without limitation the
2388// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2389// sell copies of the Software, and to permit persons to whom the Software is
2390// furnished to do so, subject to the following conditions:
2391//
2392// The above copyright notice and this permission notice shall be included in
2393// all copies or substantial portions of the Software.
2394//
2395// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2396// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2397// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2398// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2399// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2400// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2401
ab78acc6
IC
2402// when used in node, this will actually load the util module we depend on
2403// versus loading the builtin util module as happens otherwise
2404// this is a bug in node module loading as far as I am concerned
2405var util = require('util/');
3af2954a 2406
ab78acc6
IC
2407var pSlice = Array.prototype.slice;
2408var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2409
ab78acc6
IC
2410// 1. The assert module provides functions that throw
2411// AssertionError's when particular conditions are not met. The
2412// assert module must conform to the following interface.
3af2954a 2413
ab78acc6 2414var assert = module.exports = ok;
3af2954a 2415
ab78acc6
IC
2416// 2. The AssertionError is defined in assert.
2417// new assert.AssertionError({ message: message,
2418// actual: actual,
2419// expected: expected })
3af2954a 2420
ab78acc6
IC
2421assert.AssertionError = function AssertionError(options) {
2422 this.name = 'AssertionError';
2423 this.actual = options.actual;
2424 this.expected = options.expected;
2425 this.operator = options.operator;
2426 if (options.message) {
2427 this.message = options.message;
2428 this.generatedMessage = false;
2429 } else {
2430 this.message = getMessage(this);
2431 this.generatedMessage = true;
2432 }
2433 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2434
ab78acc6
IC
2435 if (Error.captureStackTrace) {
2436 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2437 }
ab78acc6
IC
2438 else {
2439 // non v8 browsers so we can have a stacktrace
2440 var err = new Error();
2441 if (err.stack) {
2442 var out = err.stack;
3af2954a 2443
ab78acc6
IC
2444 // try to strip useless frames
2445 var fn_name = stackStartFunction.name;
2446 var idx = out.indexOf('\n' + fn_name);
2447 if (idx >= 0) {
2448 // once we have located the function frame
2449 // we need to strip out everything before it (and its line)
2450 var next_line = out.indexOf('\n', idx + 1);
2451 out = out.substring(next_line + 1);
2452 }
3af2954a 2453
ab78acc6 2454 this.stack = out;
3af2954a 2455 }
3af2954a 2456 }
ab78acc6 2457};
3af2954a 2458
ab78acc6
IC
2459// assert.AssertionError instanceof Error
2460util.inherits(assert.AssertionError, Error);
3af2954a 2461
ab78acc6
IC
2462function replacer(key, value) {
2463 if (util.isUndefined(value)) {
2464 return '' + value;
2465 }
2466 if (util.isNumber(value) && !isFinite(value)) {
2467 return value.toString();
2468 }
2469 if (util.isFunction(value) || util.isRegExp(value)) {
2470 return value.toString();
2471 }
2472 return value;
2473}
3af2954a 2474
ab78acc6
IC
2475function truncate(s, n) {
2476 if (util.isString(s)) {
2477 return s.length < n ? s : s.slice(0, n);
2478 } else {
2479 return s;
2480 }
2481}
3af2954a 2482
ab78acc6
IC
2483function getMessage(self) {
2484 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2485 self.operator + ' ' +
2486 truncate(JSON.stringify(self.expected, replacer), 128);
2487}
3af2954a 2488
ab78acc6
IC
2489// At present only the three keys mentioned above are used and
2490// understood by the spec. Implementations or sub modules can pass
2491// other keys to the AssertionError's constructor - they will be
2492// ignored.
3af2954a 2493
ab78acc6
IC
2494// 3. All of the following functions must throw an AssertionError
2495// when a corresponding condition is not met, with a message that
2496// may be undefined if not provided. All assertion methods provide
2497// both the actual and expected values to the assertion error for
2498// display purposes.
3af2954a 2499
ab78acc6
IC
2500function fail(actual, expected, message, operator, stackStartFunction) {
2501 throw new assert.AssertionError({
2502 message: message,
2503 actual: actual,
2504 expected: expected,
2505 operator: operator,
2506 stackStartFunction: stackStartFunction
2507 });
2508}
3af2954a 2509
ab78acc6
IC
2510// EXTENSION! allows for well behaved errors defined elsewhere.
2511assert.fail = fail;
ebd8d4e8 2512
ab78acc6
IC
2513// 4. Pure assertion tests whether a value is truthy, as determined
2514// by !!guard.
2515// assert.ok(guard, message_opt);
2516// This statement is equivalent to assert.equal(true, !!guard,
2517// message_opt);. To test strictly for the value true, use
2518// assert.strictEqual(true, guard, message_opt);.
3af2954a 2519
ab78acc6
IC
2520function ok(value, message) {
2521 if (!value) fail(value, true, message, '==', assert.ok);
2522}
2523assert.ok = ok;
3af2954a 2524
ab78acc6
IC
2525// 5. The equality assertion tests shallow, coercive equality with
2526// ==.
2527// assert.equal(actual, expected, message_opt);
3af2954a 2528
ab78acc6
IC
2529assert.equal = function equal(actual, expected, message) {
2530 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2531};
3af2954a 2532
ab78acc6
IC
2533// 6. The non-equality assertion tests for whether two objects are not equal
2534// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2535
ab78acc6
IC
2536assert.notEqual = function notEqual(actual, expected, message) {
2537 if (actual == expected) {
2538 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2539 }
ab78acc6 2540};
3af2954a 2541
ab78acc6
IC
2542// 7. The equivalence assertion tests a deep equality relation.
2543// assert.deepEqual(actual, expected, message_opt);
3af2954a 2544
ab78acc6
IC
2545assert.deepEqual = function deepEqual(actual, expected, message) {
2546 if (!_deepEqual(actual, expected)) {
2547 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2548 }
2549};
3af2954a 2550
ab78acc6
IC
2551function _deepEqual(actual, expected) {
2552 // 7.1. All identical values are equivalent, as determined by ===.
2553 if (actual === expected) {
2554 return true;
3af2954a 2555
ab78acc6
IC
2556 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2557 if (actual.length != expected.length) return false;
3af2954a 2558
ab78acc6
IC
2559 for (var i = 0; i < actual.length; i++) {
2560 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2561 }
2562
ab78acc6 2563 return true;
3af2954a 2564
ab78acc6
IC
2565 // 7.2. If the expected value is a Date object, the actual value is
2566 // equivalent if it is also a Date object that refers to the same time.
2567 } else if (util.isDate(actual) && util.isDate(expected)) {
2568 return actual.getTime() === expected.getTime();
3af2954a 2569
ab78acc6
IC
2570 // 7.3 If the expected value is a RegExp object, the actual value is
2571 // equivalent if it is also a RegExp object with the same source and
2572 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2573 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2574 return actual.source === expected.source &&
2575 actual.global === expected.global &&
2576 actual.multiline === expected.multiline &&
2577 actual.lastIndex === expected.lastIndex &&
2578 actual.ignoreCase === expected.ignoreCase;
3af2954a 2579
ab78acc6
IC
2580 // 7.4. Other pairs that do not both pass typeof value == 'object',
2581 // equivalence is determined by ==.
2582 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2583 return actual == expected;
3af2954a 2584
ab78acc6
IC
2585 // 7.5 For all other Object pairs, including Array objects, equivalence is
2586 // determined by having the same number of owned properties (as verified
2587 // with Object.prototype.hasOwnProperty.call), the same set of keys
2588 // (although not necessarily the same order), equivalent values for every
2589 // corresponding key, and an identical 'prototype' property. Note: this
2590 // accounts for both named and indexed properties on Arrays.
2591 } else {
2592 return objEquiv(actual, expected);
3af2954a 2593 }
ab78acc6 2594}
3af2954a 2595
ab78acc6
IC
2596function isArguments(object) {
2597 return Object.prototype.toString.call(object) == '[object Arguments]';
2598}
3af2954a 2599
ab78acc6
IC
2600function objEquiv(a, b) {
2601 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2602 return false;
2603 // an identical 'prototype' property.
2604 if (a.prototype !== b.prototype) return false;
2605 // if one is a primitive, the other must be same
2606 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2607 return a === b;
3af2954a 2608 }
ab78acc6
IC
2609 var aIsArgs = isArguments(a),
2610 bIsArgs = isArguments(b);
2611 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2612 return false;
2613 if (aIsArgs) {
2614 a = pSlice.call(a);
2615 b = pSlice.call(b);
2616 return _deepEqual(a, b);
3af2954a 2617 }
ab78acc6
IC
2618 var ka = objectKeys(a),
2619 kb = objectKeys(b),
2620 key, i;
2621 // having the same number of owned properties (keys incorporates
2622 // hasOwnProperty)
2623 if (ka.length != kb.length)
2624 return false;
2625 //the same set of keys (although not necessarily the same order),
2626 ka.sort();
2627 kb.sort();
2628 //~~~cheap key test
2629 for (i = ka.length - 1; i >= 0; i--) {
2630 if (ka[i] != kb[i])
2631 return false;
3af2954a 2632 }
ab78acc6
IC
2633 //equivalent values for every corresponding key, and
2634 //~~~possibly expensive deep test
2635 for (i = ka.length - 1; i >= 0; i--) {
2636 key = ka[i];
2637 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2638 }
ab78acc6
IC
2639 return true;
2640}
2641
2642// 8. The non-equivalence assertion tests for any deep inequality.
2643// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2644
ab78acc6
IC
2645assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2646 if (_deepEqual(actual, expected)) {
2647 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2648 }
ab78acc6 2649};
3af2954a 2650
ab78acc6
IC
2651// 9. The strict equality assertion tests strict equality, as determined by ===.
2652// assert.strictEqual(actual, expected, message_opt);
3af2954a 2653
ab78acc6
IC
2654assert.strictEqual = function strictEqual(actual, expected, message) {
2655 if (actual !== expected) {
2656 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2657 }
ab78acc6 2658};
3af2954a 2659
ab78acc6
IC
2660// 10. The strict non-equality assertion tests for strict inequality, as
2661// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2662
ab78acc6
IC
2663assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2664 if (actual === expected) {
2665 fail(actual, expected, message, '!==', assert.notStrictEqual);
2666 }
2667};
3af2954a 2668
ab78acc6
IC
2669function expectedException(actual, expected) {
2670 if (!actual || !expected) {
2671 return false;
2672 }
3af2954a 2673
ab78acc6
IC
2674 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2675 return expected.test(actual);
2676 } else if (actual instanceof expected) {
2677 return true;
2678 } else if (expected.call({}, actual) === true) {
2679 return true;
3af2954a
IC
2680 }
2681
ab78acc6
IC
2682 return false;
2683}
3af2954a 2684
ab78acc6
IC
2685function _throws(shouldThrow, block, expected, message) {
2686 var actual;
3af2954a 2687
ab78acc6
IC
2688 if (util.isString(expected)) {
2689 message = expected;
2690 expected = null;
3af2954a
IC
2691 }
2692
ab78acc6
IC
2693 try {
2694 block();
2695 } catch (e) {
2696 actual = e;
3af2954a
IC
2697 }
2698
ab78acc6
IC
2699 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2700 (message ? ' ' + message : '.');
3af2954a 2701
ab78acc6
IC
2702 if (shouldThrow && !actual) {
2703 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2704 }
2705
ab78acc6
IC
2706 if (!shouldThrow && expectedException(actual, expected)) {
2707 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2708 }
2709
ab78acc6
IC
2710 if ((shouldThrow && actual && expected &&
2711 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2712 throw actual;
3af2954a 2713 }
ab78acc6 2714}
3af2954a 2715
ab78acc6
IC
2716// 11. Expected to throw an error:
2717// assert.throws(block, Error_opt, message_opt);
3af2954a 2718
ab78acc6
IC
2719assert.throws = function(block, /*optional*/error, /*optional*/message) {
2720 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2721};
3af2954a 2722
ab78acc6
IC
2723// EXTENSION! This is annoying to write outside this module.
2724assert.doesNotThrow = function(block, /*optional*/message) {
2725 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2726};
3af2954a 2727
ab78acc6 2728assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2729
ab78acc6
IC
2730var objectKeys = Object.keys || function (obj) {
2731 var keys = [];
2732 for (var key in obj) {
2733 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2734 }
ab78acc6
IC
2735 return keys;
2736};
3af2954a 2737
ab78acc6 2738},{"util/":29}],6:[function(require,module,exports){
3af2954a 2739
ab78acc6
IC
2740},{}],7:[function(require,module,exports){
2741/*!
2742 * The buffer module from node.js, for the browser.
2743 *
2744 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2745 * @license MIT
2746 */
3af2954a 2747
ab78acc6
IC
2748var base64 = require('base64-js')
2749var ieee754 = require('ieee754')
2750var isArray = require('is-array')
3af2954a 2751
ab78acc6
IC
2752exports.Buffer = Buffer
2753exports.SlowBuffer = SlowBuffer
2754exports.INSPECT_MAX_BYTES = 50
2755Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2756
ab78acc6 2757var rootParent = {}
3af2954a 2758
ab78acc6
IC
2759/**
2760 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2761 * === true Use Uint8Array implementation (fastest)
2762 * === false Use Object implementation (most compatible, even IE6)
2763 *
2764 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2765 * Opera 11.6+, iOS 4.2+.
2766 *
2767 * Due to various browser bugs, sometimes the Object implementation will be used even
2768 * when the browser supports typed arrays.
2769 *
2770 * Note:
2771 *
2772 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2773 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2774 *
2775 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2776 * on objects.
2777 *
2778 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2779 *
2780 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2781 * incorrect length in some situations.
3af2954a 2782
ab78acc6
IC
2783 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2784 * get the Object implementation, which is slower but behaves correctly.
2785 */
2786Buffer.TYPED_ARRAY_SUPPORT = (function () {
2787 function Bar () {}
2788 try {
2789 var arr = new Uint8Array(1)
2790 arr.foo = function () { return 42 }
2791 arr.constructor = Bar
2792 return arr.foo() === 42 && // typed array instances can be augmented
2793 arr.constructor === Bar && // constructor can be set
2794 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2795 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2796 } catch (e) {
2797 return false
2798 }
2799})()
3af2954a 2800
ab78acc6
IC
2801function kMaxLength () {
2802 return Buffer.TYPED_ARRAY_SUPPORT
2803 ? 0x7fffffff
2804 : 0x3fffffff
2805}
3af2954a 2806
ab78acc6
IC
2807/**
2808 * Class: Buffer
2809 * =============
2810 *
2811 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2812 * with function properties for all the node `Buffer` API functions. We use
2813 * `Uint8Array` so that square bracket notation works as expected -- it returns
2814 * a single octet.
2815 *
2816 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2817 * prototype.
2818 */
2819function Buffer (arg) {
2820 if (!(this instanceof Buffer)) {
2821 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2822 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2823 return new Buffer(arg)
3af2954a
IC
2824 }
2825
ab78acc6
IC
2826 this.length = 0
2827 this.parent = undefined
3af2954a 2828
ab78acc6
IC
2829 // Common case.
2830 if (typeof arg === 'number') {
2831 return fromNumber(this, arg)
2832 }
3af2954a 2833
ab78acc6
IC
2834 // Slightly less common case.
2835 if (typeof arg === 'string') {
2836 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2837 }
3af2954a 2838
ab78acc6
IC
2839 // Unusual.
2840 return fromObject(this, arg)
2841}
3af2954a 2842
ab78acc6
IC
2843function fromNumber (that, length) {
2844 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2845 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2846 for (var i = 0; i < length; i++) {
2847 that[i] = 0
2848 }
3af2954a 2849 }
ab78acc6
IC
2850 return that
2851}
3af2954a 2852
ab78acc6
IC
2853function fromString (that, string, encoding) {
2854 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2855
ab78acc6
IC
2856 // Assumption: byteLength() return value is always < kMaxLength.
2857 var length = byteLength(string, encoding) | 0
2858 that = allocate(that, length)
3af2954a 2859
ab78acc6
IC
2860 that.write(string, encoding)
2861 return that
2862}
3af2954a 2863
ab78acc6
IC
2864function fromObject (that, object) {
2865 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2866
ab78acc6 2867 if (isArray(object)) return fromArray(that, object)
3af2954a 2868
ab78acc6
IC
2869 if (object == null) {
2870 throw new TypeError('must start with number, buffer, array or string')
2871 }
3af2954a 2872
ab78acc6
IC
2873 if (typeof ArrayBuffer !== 'undefined') {
2874 if (object.buffer instanceof ArrayBuffer) {
2875 return fromTypedArray(that, object)
2876 }
2877 if (object instanceof ArrayBuffer) {
2878 return fromArrayBuffer(that, object)
2879 }
3af2954a
IC
2880 }
2881
ab78acc6 2882 if (object.length) return fromArrayLike(that, object)
3af2954a 2883
ab78acc6
IC
2884 return fromJsonObject(that, object)
2885}
3af2954a 2886
ab78acc6
IC
2887function fromBuffer (that, buffer) {
2888 var length = checked(buffer.length) | 0
2889 that = allocate(that, length)
2890 buffer.copy(that, 0, 0, length)
2891 return that
2892}
3af2954a 2893
ab78acc6
IC
2894function fromArray (that, array) {
2895 var length = checked(array.length) | 0
2896 that = allocate(that, length)
2897 for (var i = 0; i < length; i += 1) {
2898 that[i] = array[i] & 255
3af2954a 2899 }
ab78acc6
IC
2900 return that
2901}
3af2954a 2902
ab78acc6
IC
2903// Duplicate of fromArray() to keep fromArray() monomorphic.
2904function fromTypedArray (that, array) {
2905 var length = checked(array.length) | 0
2906 that = allocate(that, length)
2907 // Truncating the elements is probably not what people expect from typed
2908 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2909 // of the old Buffer constructor.
2910 for (var i = 0; i < length; i += 1) {
2911 that[i] = array[i] & 255
3af2954a 2912 }
ab78acc6
IC
2913 return that
2914}
3af2954a 2915
ab78acc6
IC
2916function fromArrayBuffer (that, array) {
2917 if (Buffer.TYPED_ARRAY_SUPPORT) {
2918 // Return an augmented `Uint8Array` instance, for best performance
2919 array.byteLength
2920 that = Buffer._augment(new Uint8Array(array))
2921 } else {
2922 // Fallback: Return an object instance of the Buffer class
2923 that = fromTypedArray(that, new Uint8Array(array))
2924 }
2925 return that
2926}
3af2954a 2927
ab78acc6
IC
2928function fromArrayLike (that, array) {
2929 var length = checked(array.length) | 0
2930 that = allocate(that, length)
2931 for (var i = 0; i < length; i += 1) {
2932 that[i] = array[i] & 255
3af2954a 2933 }
ab78acc6
IC
2934 return that
2935}
3af2954a 2936
ab78acc6
IC
2937// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2938// Returns a zero-length buffer for inputs that don't conform to the spec.
2939function fromJsonObject (that, object) {
2940 var array
2941 var length = 0
2942
2943 if (object.type === 'Buffer' && isArray(object.data)) {
2944 array = object.data
2945 length = checked(array.length) | 0
3af2954a 2946 }
ab78acc6 2947 that = allocate(that, length)
3af2954a 2948
ab78acc6
IC
2949 for (var i = 0; i < length; i += 1) {
2950 that[i] = array[i] & 255
3af2954a 2951 }
ab78acc6
IC
2952 return that
2953}
3af2954a 2954
ab78acc6
IC
2955function allocate (that, length) {
2956 if (Buffer.TYPED_ARRAY_SUPPORT) {
2957 // Return an augmented `Uint8Array` instance, for best performance
2958 that = Buffer._augment(new Uint8Array(length))
2959 } else {
2960 // Fallback: Return an object instance of the Buffer class
2961 that.length = length
2962 that._isBuffer = true
2963 }
3af2954a 2964
ab78acc6
IC
2965 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2966 if (fromPool) that.parent = rootParent
3af2954a 2967
ab78acc6
IC
2968 return that
2969}
3af2954a 2970
ab78acc6
IC
2971function checked (length) {
2972 // Note: cannot use `length < kMaxLength` here because that fails when
2973 // length is NaN (which is otherwise coerced to zero.)
2974 if (length >= kMaxLength()) {
2975 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2976 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2977 }
ab78acc6
IC
2978 return length | 0
2979}
3af2954a 2980
ab78acc6
IC
2981function SlowBuffer (subject, encoding) {
2982 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2983
ab78acc6
IC
2984 var buf = new Buffer(subject, encoding)
2985 delete buf.parent
2986 return buf
2987}
3af2954a 2988
ab78acc6
IC
2989Buffer.isBuffer = function isBuffer (b) {
2990 return !!(b != null && b._isBuffer)
2991}
3af2954a 2992
ab78acc6
IC
2993Buffer.compare = function compare (a, b) {
2994 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2995 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2996 }
2997
ab78acc6 2998 if (a === b) return 0
3af2954a 2999
ab78acc6
IC
3000 var x = a.length
3001 var y = b.length
3af2954a 3002
ab78acc6
IC
3003 var i = 0
3004 var len = Math.min(x, y)
3005 while (i < len) {
3006 if (a[i] !== b[i]) break
3af2954a 3007
ab78acc6
IC
3008 ++i
3009 }
3af2954a 3010
ab78acc6
IC
3011 if (i !== len) {
3012 x = a[i]
3013 y = b[i]
3014 }
3af2954a 3015
ab78acc6
IC
3016 if (x < y) return -1
3017 if (y < x) return 1
3018 return 0
3019}
3af2954a 3020
ab78acc6
IC
3021Buffer.isEncoding = function isEncoding (encoding) {
3022 switch (String(encoding).toLowerCase()) {
3023 case 'hex':
3024 case 'utf8':
3025 case 'utf-8':
3026 case 'ascii':
3027 case 'binary':
3028 case 'base64':
3029 case 'raw':
3030 case 'ucs2':
3031 case 'ucs-2':
3032 case 'utf16le':
3033 case 'utf-16le':
3034 return true
3035 default:
3036 return false
3af2954a 3037 }
ab78acc6 3038}
3af2954a 3039
ab78acc6
IC
3040Buffer.concat = function concat (list, length) {
3041 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 3042
ab78acc6
IC
3043 if (list.length === 0) {
3044 return new Buffer(0)
3af2954a
IC
3045 }
3046
ab78acc6
IC
3047 var i
3048 if (length === undefined) {
3049 length = 0
3050 for (i = 0; i < list.length; i++) {
3051 length += list[i].length
3052 }
3af2954a
IC
3053 }
3054
ab78acc6
IC
3055 var buf = new Buffer(length)
3056 var pos = 0
3057 for (i = 0; i < list.length; i++) {
3058 var item = list[i]
3059 item.copy(buf, pos)
3060 pos += item.length
3061 }
3062 return buf
3063}
3af2954a 3064
ab78acc6
IC
3065function byteLength (string, encoding) {
3066 if (typeof string !== 'string') string = '' + string
3067
3068 var len = string.length
3069 if (len === 0) return 0
3070
3071 // Use a for loop to avoid recursion
3072 var loweredCase = false
3073 for (;;) {
3074 switch (encoding) {
3075 case 'ascii':
3076 case 'binary':
3077 // Deprecated
3078 case 'raw':
3079 case 'raws':
3080 return len
3081 case 'utf8':
3082 case 'utf-8':
3083 return utf8ToBytes(string).length
3084 case 'ucs2':
3085 case 'ucs-2':
3086 case 'utf16le':
3087 case 'utf-16le':
3088 return len * 2
3089 case 'hex':
3090 return len >>> 1
3091 case 'base64':
3092 return base64ToBytes(string).length
3093 default:
3094 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3095 encoding = ('' + encoding).toLowerCase()
3096 loweredCase = true
3af2954a 3097 }
3af2954a 3098 }
ab78acc6
IC
3099}
3100Buffer.byteLength = byteLength
3af2954a 3101
ab78acc6
IC
3102// pre-set for values that may exist in the future
3103Buffer.prototype.length = undefined
3104Buffer.prototype.parent = undefined
3af2954a 3105
ab78acc6
IC
3106function slowToString (encoding, start, end) {
3107 var loweredCase = false
3af2954a 3108
ab78acc6
IC
3109 start = start | 0
3110 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3111
ab78acc6
IC
3112 if (!encoding) encoding = 'utf8'
3113 if (start < 0) start = 0
3114 if (end > this.length) end = this.length
3115 if (end <= start) return ''
3af2954a 3116
ab78acc6
IC
3117 while (true) {
3118 switch (encoding) {
3119 case 'hex':
3120 return hexSlice(this, start, end)
3af2954a 3121
ab78acc6
IC
3122 case 'utf8':
3123 case 'utf-8':
3124 return utf8Slice(this, start, end)
3af2954a 3125
ab78acc6
IC
3126 case 'ascii':
3127 return asciiSlice(this, start, end)
3af2954a 3128
ab78acc6
IC
3129 case 'binary':
3130 return binarySlice(this, start, end)
3af2954a 3131
ab78acc6
IC
3132 case 'base64':
3133 return base64Slice(this, start, end)
3af2954a 3134
ab78acc6
IC
3135 case 'ucs2':
3136 case 'ucs-2':
3137 case 'utf16le':
3138 case 'utf-16le':
3139 return utf16leSlice(this, start, end)
3af2954a 3140
ab78acc6
IC
3141 default:
3142 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3143 encoding = (encoding + '').toLowerCase()
3144 loweredCase = true
3145 }
3af2954a 3146 }
ab78acc6 3147}
3af2954a 3148
ab78acc6
IC
3149Buffer.prototype.toString = function toString () {
3150 var length = this.length | 0
3151 if (length === 0) return ''
3152 if (arguments.length === 0) return utf8Slice(this, 0, length)
3153 return slowToString.apply(this, arguments)
3154}
3af2954a 3155
ab78acc6
IC
3156Buffer.prototype.equals = function equals (b) {
3157 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3158 if (this === b) return true
3159 return Buffer.compare(this, b) === 0
3160}
3af2954a 3161
ab78acc6
IC
3162Buffer.prototype.inspect = function inspect () {
3163 var str = ''
3164 var max = exports.INSPECT_MAX_BYTES
3165 if (this.length > 0) {
3166 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3167 if (this.length > max) str += ' ... '
3af2954a 3168 }
ab78acc6
IC
3169 return '<Buffer ' + str + '>'
3170}
3af2954a 3171
ab78acc6
IC
3172Buffer.prototype.compare = function compare (b) {
3173 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3174 if (this === b) return 0
3175 return Buffer.compare(this, b)
3176}
3af2954a 3177
ab78acc6
IC
3178Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3179 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3180 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3181 byteOffset >>= 0
3af2954a 3182
ab78acc6
IC
3183 if (this.length === 0) return -1
3184 if (byteOffset >= this.length) return -1
3af2954a 3185
ab78acc6
IC
3186 // Negative offsets start from the end of the buffer
3187 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3188
ab78acc6
IC
3189 if (typeof val === 'string') {
3190 if (val.length === 0) return -1 // special case: looking for empty string always fails
3191 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3192 }
ab78acc6
IC
3193 if (Buffer.isBuffer(val)) {
3194 return arrayIndexOf(this, val, byteOffset)
3af2954a 3195 }
ab78acc6
IC
3196 if (typeof val === 'number') {
3197 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3198 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3199 }
ab78acc6 3200 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3201 }
3202
ab78acc6
IC
3203 function arrayIndexOf (arr, val, byteOffset) {
3204 var foundIndex = -1
3205 for (var i = 0; byteOffset + i < arr.length; i++) {
3206 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3207 if (foundIndex === -1) foundIndex = i
3208 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3209 } else {
ab78acc6 3210 foundIndex = -1
3af2954a 3211 }
3af2954a 3212 }
ab78acc6
IC
3213 return -1
3214 }
3af2954a 3215
ab78acc6
IC
3216 throw new TypeError('val must be string, number or Buffer')
3217}
3af2954a 3218
ab78acc6
IC
3219// `get` is deprecated
3220Buffer.prototype.get = function get (offset) {
3221 console.log('.get() is deprecated. Access using array indexes instead.')
3222 return this.readUInt8(offset)
3223}
3af2954a 3224
ab78acc6
IC
3225// `set` is deprecated
3226Buffer.prototype.set = function set (v, offset) {
3227 console.log('.set() is deprecated. Access using array indexes instead.')
3228 return this.writeUInt8(v, offset)
3229}
3af2954a 3230
ab78acc6
IC
3231function hexWrite (buf, string, offset, length) {
3232 offset = Number(offset) || 0
3233 var remaining = buf.length - offset
3234 if (!length) {
3235 length = remaining
3236 } else {
3237 length = Number(length)
3238 if (length > remaining) {
3239 length = remaining
3240 }
3241 }
3af2954a 3242
ab78acc6
IC
3243 // must be an even number of digits
3244 var strLen = string.length
3245 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3246
ab78acc6
IC
3247 if (length > strLen / 2) {
3248 length = strLen / 2
3249 }
3250 for (var i = 0; i < length; i++) {
3251 var parsed = parseInt(string.substr(i * 2, 2), 16)
3252 if (isNaN(parsed)) throw new Error('Invalid hex string')
3253 buf[offset + i] = parsed
3af2954a 3254 }
ab78acc6
IC
3255 return i
3256}
3257
3258function utf8Write (buf, string, offset, length) {
3259 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3260}
3af2954a 3261
ab78acc6
IC
3262function asciiWrite (buf, string, offset, length) {
3263 return blitBuffer(asciiToBytes(string), buf, offset, length)
3264}
3af2954a 3265
ab78acc6
IC
3266function binaryWrite (buf, string, offset, length) {
3267 return asciiWrite(buf, string, offset, length)
3268}
3af2954a 3269
ab78acc6
IC
3270function base64Write (buf, string, offset, length) {
3271 return blitBuffer(base64ToBytes(string), buf, offset, length)
3272}
3af2954a 3273
ab78acc6
IC
3274function ucs2Write (buf, string, offset, length) {
3275 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3276}
3af2954a 3277
ab78acc6
IC
3278Buffer.prototype.write = function write (string, offset, length, encoding) {
3279 // Buffer#write(string)
3280 if (offset === undefined) {
3281 encoding = 'utf8'
3282 length = this.length
3283 offset = 0
3284 // Buffer#write(string, encoding)
3285 } else if (length === undefined && typeof offset === 'string') {
3286 encoding = offset
3287 length = this.length
3288 offset = 0
3289 // Buffer#write(string, offset[, length][, encoding])
3290 } else if (isFinite(offset)) {
3291 offset = offset | 0
3292 if (isFinite(length)) {
3293 length = length | 0
3294 if (encoding === undefined) encoding = 'utf8'
3295 } else {
3296 encoding = length
3297 length = undefined
3298 }
3299 // legacy write(string, encoding, offset, length) - remove in v0.13
3300 } else {
3301 var swap = encoding
3302 encoding = offset
3303 offset = length | 0
3304 length = swap
3af2954a
IC
3305 }
3306
ab78acc6
IC
3307 var remaining = this.length - offset
3308 if (length === undefined || length > remaining) length = remaining
3af2954a 3309
ab78acc6
IC
3310 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3311 throw new RangeError('attempt to write outside buffer bounds')
3312 }
3af2954a 3313
ab78acc6 3314 if (!encoding) encoding = 'utf8'
3af2954a 3315
ab78acc6
IC
3316 var loweredCase = false
3317 for (;;) {
3318 switch (encoding) {
3319 case 'hex':
3320 return hexWrite(this, string, offset, length)
ebd8d4e8 3321
ab78acc6
IC
3322 case 'utf8':
3323 case 'utf-8':
3324 return utf8Write(this, string, offset, length)
ebd8d4e8 3325
ab78acc6
IC
3326 case 'ascii':
3327 return asciiWrite(this, string, offset, length)
ebd8d4e8 3328
ab78acc6
IC
3329 case 'binary':
3330 return binaryWrite(this, string, offset, length)
ebd8d4e8 3331
ab78acc6
IC
3332 case 'base64':
3333 // Warning: maxLength not taken into account in base64Write
3334 return base64Write(this, string, offset, length)
ebd8d4e8 3335
ab78acc6
IC
3336 case 'ucs2':
3337 case 'ucs-2':
3338 case 'utf16le':
3339 case 'utf-16le':
3340 return ucs2Write(this, string, offset, length)
ebd8d4e8 3341
ab78acc6
IC
3342 default:
3343 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3344 encoding = ('' + encoding).toLowerCase()
3345 loweredCase = true
3346 }
3347 }
3348}
212b1b46 3349
ab78acc6
IC
3350Buffer.prototype.toJSON = function toJSON () {
3351 return {
3352 type: 'Buffer',
3353 data: Array.prototype.slice.call(this._arr || this, 0)
3354 }
3355}
212b1b46 3356
ab78acc6
IC
3357function base64Slice (buf, start, end) {
3358 if (start === 0 && end === buf.length) {
3359 return base64.fromByteArray(buf)
3360 } else {
3361 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3362 }
ab78acc6
IC
3363}
3364
3365function utf8Slice (buf, start, end) {
3366 end = Math.min(buf.length, end)
3367 var firstByte
3368 var secondByte
3369 var thirdByte
3370 var fourthByte
3371 var bytesPerSequence
3372 var tempCodePoint
3373 var codePoint
3374 var res = []
3375 var i = start
3376
3377 for (; i < end; i += bytesPerSequence) {
3378 firstByte = buf[i]
3379 codePoint = 0xFFFD
3380
3381 if (firstByte > 0xEF) {
3382 bytesPerSequence = 4
3383 } else if (firstByte > 0xDF) {
3384 bytesPerSequence = 3
3385 } else if (firstByte > 0xBF) {
3386 bytesPerSequence = 2
3387 } else {
3388 bytesPerSequence = 1
3389 }
212b1b46 3390
ab78acc6
IC
3391 if (i + bytesPerSequence <= end) {
3392 switch (bytesPerSequence) {
3393 case 1:
3394 if (firstByte < 0x80) {
3395 codePoint = firstByte
3396 }
3397 break
3398 case 2:
3399 secondByte = buf[i + 1]
3400 if ((secondByte & 0xC0) === 0x80) {
3401 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3402 if (tempCodePoint > 0x7F) {
3403 codePoint = tempCodePoint
3404 }
3405 }
3406 break
3407 case 3:
3408 secondByte = buf[i + 1]
3409 thirdByte = buf[i + 2]
3410 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3411 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3412 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3413 codePoint = tempCodePoint
3414 }
3415 }
3416 break
3417 case 4:
3418 secondByte = buf[i + 1]
3419 thirdByte = buf[i + 2]
3420 fourthByte = buf[i + 3]
3421 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3422 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3423 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3424 codePoint = tempCodePoint
3425 }
3426 }
3427 }
3428 }
212b1b46 3429
ab78acc6
IC
3430 if (codePoint === 0xFFFD) {
3431 // we generated an invalid codePoint so make sure to only advance by 1 byte
3432 bytesPerSequence = 1
3433 } else if (codePoint > 0xFFFF) {
3434 // encode to utf16 (surrogate pair dance)
3435 codePoint -= 0x10000
3436 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3437 codePoint = 0xDC00 | codePoint & 0x3FF
3438 }
212b1b46 3439
ab78acc6 3440 res.push(codePoint)
3af2954a 3441 }
212b1b46 3442
ab78acc6
IC
3443 return String.fromCharCode.apply(String, res)
3444}
212b1b46 3445
ab78acc6
IC
3446function asciiSlice (buf, start, end) {
3447 var ret = ''
3448 end = Math.min(buf.length, end)
3449
3450 for (var i = start; i < end; i++) {
3451 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3452 }
ab78acc6
IC
3453 return ret
3454}
212b1b46 3455
ab78acc6
IC
3456function binarySlice (buf, start, end) {
3457 var ret = ''
3458 end = Math.min(buf.length, end)
212b1b46 3459
ab78acc6
IC
3460 for (var i = start; i < end; i++) {
3461 ret += String.fromCharCode(buf[i])
3462 }
3463 return ret
3464}
212b1b46 3465
ab78acc6
IC
3466function hexSlice (buf, start, end) {
3467 var len = buf.length
212b1b46 3468
ab78acc6
IC
3469 if (!start || start < 0) start = 0
3470 if (!end || end < 0 || end > len) end = len
212b1b46 3471
ab78acc6
IC
3472 var out = ''
3473 for (var i = start; i < end; i++) {
3474 out += toHex(buf[i])
3475 }
3476 return out
3477}
212b1b46 3478
ab78acc6
IC
3479function utf16leSlice (buf, start, end) {
3480 var bytes = buf.slice(start, end)
3481 var res = ''
3482 for (var i = 0; i < bytes.length; i += 2) {
3483 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3484 }
3485 return res
3486}
212b1b46 3487
ab78acc6
IC
3488Buffer.prototype.slice = function slice (start, end) {
3489 var len = this.length
3490 start = ~~start
3491 end = end === undefined ? len : ~~end
212b1b46 3492
ab78acc6
IC
3493 if (start < 0) {
3494 start += len
3495 if (start < 0) start = 0
3496 } else if (start > len) {
3497 start = len
3498 }
212b1b46 3499
ab78acc6
IC
3500 if (end < 0) {
3501 end += len
3502 if (end < 0) end = 0
3503 } else if (end > len) {
3504 end = len
3505 }
212b1b46 3506
ab78acc6 3507 if (end < start) end = start
212b1b46 3508
ab78acc6
IC
3509 var newBuf
3510 if (Buffer.TYPED_ARRAY_SUPPORT) {
3511 newBuf = Buffer._augment(this.subarray(start, end))
3512 } else {
3513 var sliceLen = end - start
3514 newBuf = new Buffer(sliceLen, undefined)
3515 for (var i = 0; i < sliceLen; i++) {
3516 newBuf[i] = this[i + start]
3af2954a
IC
3517 }
3518 }
212b1b46 3519
ab78acc6 3520 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3521
ab78acc6
IC
3522 return newBuf
3523}
ebd8d4e8 3524
ab78acc6
IC
3525/*
3526 * Need to make sure that buffer isn't trying to write out of bounds.
3527 */
3528function checkOffset (offset, ext, length) {
3529 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3530 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3531}
ebd8d4e8 3532
ab78acc6
IC
3533Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3534 offset = offset | 0
3535 byteLength = byteLength | 0
3536 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3537
ab78acc6
IC
3538 var val = this[offset]
3539 var mul = 1
3540 var i = 0
3541 while (++i < byteLength && (mul *= 0x100)) {
3542 val += this[offset + i] * mul
3543 }
3af2954a 3544
ab78acc6
IC
3545 return val
3546}
3af2954a 3547
ab78acc6
IC
3548Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3549 offset = offset | 0
3550 byteLength = byteLength | 0
3551 if (!noAssert) {
3552 checkOffset(offset, byteLength, this.length)
3553 }
3af2954a 3554
ab78acc6
IC
3555 var val = this[offset + --byteLength]
3556 var mul = 1
3557 while (byteLength > 0 && (mul *= 0x100)) {
3558 val += this[offset + --byteLength] * mul
3af2954a
IC
3559 }
3560
ab78acc6
IC
3561 return val
3562}
3af2954a 3563
ab78acc6
IC
3564Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3565 if (!noAssert) checkOffset(offset, 1, this.length)
3566 return this[offset]
3567}
3af2954a 3568
ab78acc6
IC
3569Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3570 if (!noAssert) checkOffset(offset, 2, this.length)
3571 return this[offset] | (this[offset + 1] << 8)
3572}
3af2954a 3573
ab78acc6
IC
3574Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3575 if (!noAssert) checkOffset(offset, 2, this.length)
3576 return (this[offset] << 8) | this[offset + 1]
3577}
ebd8d4e8 3578
ab78acc6
IC
3579Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3580 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3581
ab78acc6
IC
3582 return ((this[offset]) |
3583 (this[offset + 1] << 8) |
3584 (this[offset + 2] << 16)) +
3585 (this[offset + 3] * 0x1000000)
3586}
3af2954a 3587
ab78acc6
IC
3588Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3589 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3590
ab78acc6
IC
3591 return (this[offset] * 0x1000000) +
3592 ((this[offset + 1] << 16) |
3593 (this[offset + 2] << 8) |
3594 this[offset + 3])
3595}
ebd8d4e8 3596
ab78acc6
IC
3597Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3598 offset = offset | 0
3599 byteLength = byteLength | 0
3600 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3601
ab78acc6
IC
3602 var val = this[offset]
3603 var mul = 1
3604 var i = 0
3605 while (++i < byteLength && (mul *= 0x100)) {
3606 val += this[offset + i] * mul
ebd8d4e8 3607 }
ab78acc6 3608 mul *= 0x80
ebd8d4e8 3609
ab78acc6
IC
3610 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3611
3612 return val
ebd8d4e8
IC
3613}
3614
ab78acc6
IC
3615Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3616 offset = offset | 0
3617 byteLength = byteLength | 0
3618 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3619
ab78acc6
IC
3620 var i = byteLength
3621 var mul = 1
3622 var val = this[offset + --i]
3623 while (i > 0 && (mul *= 0x100)) {
3624 val += this[offset + --i] * mul
3625 }
3626 mul *= 0x80
ebd8d4e8 3627
ab78acc6 3628 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3629
ab78acc6
IC
3630 return val
3631}
ebd8d4e8 3632
ab78acc6
IC
3633Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3634 if (!noAssert) checkOffset(offset, 1, this.length)
3635 if (!(this[offset] & 0x80)) return (this[offset])
3636 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3637}
ab78acc6
IC
3638
3639Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset, 2, this.length)
3641 var val = this[offset] | (this[offset + 1] << 8)
3642 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3643}
ab78acc6
IC
3644
3645Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3646 if (!noAssert) checkOffset(offset, 2, this.length)
3647 var val = this[offset + 1] | (this[offset] << 8)
3648 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3649}
3650
ab78acc6
IC
3651Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3652 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3653
ab78acc6
IC
3654 return (this[offset]) |
3655 (this[offset + 1] << 8) |
3656 (this[offset + 2] << 16) |
3657 (this[offset + 3] << 24)
ebd8d4e8 3658}
ebd8d4e8 3659
ab78acc6
IC
3660Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3661 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3662
ab78acc6
IC
3663 return (this[offset] << 24) |
3664 (this[offset + 1] << 16) |
3665 (this[offset + 2] << 8) |
3666 (this[offset + 3])
ebd8d4e8
IC
3667}
3668
ab78acc6
IC
3669Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3670 if (!noAssert) checkOffset(offset, 4, this.length)
3671 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3672}
3673
ab78acc6
IC
3674Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3675 if (!noAssert) checkOffset(offset, 4, this.length)
3676 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3677}
3678
ab78acc6
IC
3679Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3680 if (!noAssert) checkOffset(offset, 8, this.length)
3681 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3682}
3683
ab78acc6
IC
3684Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3685 if (!noAssert) checkOffset(offset, 8, this.length)
3686 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3687}
3688
ab78acc6
IC
3689function checkInt (buf, value, offset, ext, max, min) {
3690 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3691 if (value > max || value < min) throw new RangeError('value is out of bounds')
3692 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3693}
3694
ab78acc6
IC
3695Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3696 value = +value
3697 offset = offset | 0
3698 byteLength = byteLength | 0
3699 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3700
ab78acc6
IC
3701 var mul = 1
3702 var i = 0
3703 this[offset] = value & 0xFF
3704 while (++i < byteLength && (mul *= 0x100)) {
3705 this[offset + i] = (value / mul) & 0xFF
3706 }
ebd8d4e8 3707
ab78acc6 3708 return offset + byteLength
ebd8d4e8
IC
3709}
3710
ab78acc6
IC
3711Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3712 value = +value
3713 offset = offset | 0
3714 byteLength = byteLength | 0
3715 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3716
ab78acc6
IC
3717 var i = byteLength - 1
3718 var mul = 1
3719 this[offset + i] = value & 0xFF
3720 while (--i >= 0 && (mul *= 0x100)) {
3721 this[offset + i] = (value / mul) & 0xFF
3722 }
ebd8d4e8 3723
ab78acc6 3724 return offset + byteLength
ebd8d4e8
IC
3725}
3726
ab78acc6
IC
3727Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3728 value = +value
3729 offset = offset | 0
3730 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3731 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3732 this[offset] = value
3733 return offset + 1
ebd8d4e8
IC
3734}
3735
ab78acc6
IC
3736function objectWriteUInt16 (buf, value, offset, littleEndian) {
3737 if (value < 0) value = 0xffff + value + 1
3738 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3739 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3740 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3741 }
ebd8d4e8
IC
3742}
3743
ab78acc6
IC
3744Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3745 value = +value
3746 offset = offset | 0
3747 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3748 if (Buffer.TYPED_ARRAY_SUPPORT) {
3749 this[offset] = value
3750 this[offset + 1] = (value >>> 8)
3751 } else {
3752 objectWriteUInt16(this, value, offset, true)
3753 }
3754 return offset + 2
ebd8d4e8
IC
3755}
3756
ab78acc6
IC
3757Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3758 value = +value
3759 offset = offset | 0
3760 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3761 if (Buffer.TYPED_ARRAY_SUPPORT) {
3762 this[offset] = (value >>> 8)
3763 this[offset + 1] = value
3764 } else {
3765 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3766 }
ab78acc6 3767 return offset + 2
ebd8d4e8
IC
3768}
3769
ab78acc6
IC
3770function objectWriteUInt32 (buf, value, offset, littleEndian) {
3771 if (value < 0) value = 0xffffffff + value + 1
3772 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3773 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3774 }
ebd8d4e8
IC
3775}
3776
ab78acc6
IC
3777Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3778 value = +value
3779 offset = offset | 0
3780 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3781 if (Buffer.TYPED_ARRAY_SUPPORT) {
3782 this[offset + 3] = (value >>> 24)
3783 this[offset + 2] = (value >>> 16)
3784 this[offset + 1] = (value >>> 8)
3785 this[offset] = value
3786 } else {
3787 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3788 }
ab78acc6 3789 return offset + 4
ebd8d4e8
IC
3790}
3791
ab78acc6
IC
3792Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3793 value = +value
3794 offset = offset | 0
3795 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3796 if (Buffer.TYPED_ARRAY_SUPPORT) {
3797 this[offset] = (value >>> 24)
3798 this[offset + 1] = (value >>> 16)
3799 this[offset + 2] = (value >>> 8)
3800 this[offset + 3] = value
3801 } else {
3802 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3803 }
ab78acc6
IC
3804 return offset + 4
3805}
3806
3807Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3808 value = +value
3809 offset = offset | 0
3810 if (!noAssert) {
3811 var limit = Math.pow(2, 8 * byteLength - 1)
3812
3813 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3814 }
ab78acc6
IC
3815
3816 var i = 0
3817 var mul = 1
3818 var sub = value < 0 ? 1 : 0
3819 this[offset] = value & 0xFF
3820 while (++i < byteLength && (mul *= 0x100)) {
3821 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3822 }
ebd8d4e8 3823
ab78acc6 3824 return offset + byteLength
ebd8d4e8
IC
3825}
3826
ab78acc6
IC
3827Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3828 value = +value
3829 offset = offset | 0
3830 if (!noAssert) {
3831 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3832
ab78acc6
IC
3833 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3834 }
ebd8d4e8 3835
ab78acc6
IC
3836 var i = byteLength - 1
3837 var mul = 1
3838 var sub = value < 0 ? 1 : 0
3839 this[offset + i] = value & 0xFF
3840 while (--i >= 0 && (mul *= 0x100)) {
3841 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3842 }
3843
3844 return offset + byteLength
ebd8d4e8
IC
3845}
3846
ab78acc6
IC
3847Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3848 value = +value
3849 offset = offset | 0
3850 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3851 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3852 if (value < 0) value = 0xff + value + 1
3853 this[offset] = value
3854 return offset + 1
ebd8d4e8
IC
3855}
3856
ab78acc6
IC
3857Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3858 value = +value
3859 offset = offset | 0
3860 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3861 if (Buffer.TYPED_ARRAY_SUPPORT) {
3862 this[offset] = value
3863 this[offset + 1] = (value >>> 8)
3864 } else {
3865 objectWriteUInt16(this, value, offset, true)
3866 }
3867 return offset + 2
ebd8d4e8
IC
3868}
3869
ab78acc6
IC
3870Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3871 value = +value
3872 offset = offset | 0
3873 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3874 if (Buffer.TYPED_ARRAY_SUPPORT) {
3875 this[offset] = (value >>> 8)
3876 this[offset + 1] = value
3877 } else {
3878 objectWriteUInt16(this, value, offset, false)
3879 }
3880 return offset + 2
ebd8d4e8
IC
3881}
3882
ab78acc6
IC
3883Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3884 value = +value
3885 offset = offset | 0
3886 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3887 if (Buffer.TYPED_ARRAY_SUPPORT) {
3888 this[offset] = value
3889 this[offset + 1] = (value >>> 8)
3890 this[offset + 2] = (value >>> 16)
3891 this[offset + 3] = (value >>> 24)
3892 } else {
3893 objectWriteUInt32(this, value, offset, true)
3894 }
3895 return offset + 4
3896}
3897
3898Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3899 value = +value
3900 offset = offset | 0
3901 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3902 if (value < 0) value = 0xffffffff + value + 1
3903 if (Buffer.TYPED_ARRAY_SUPPORT) {
3904 this[offset] = (value >>> 24)
3905 this[offset + 1] = (value >>> 16)
3906 this[offset + 2] = (value >>> 8)
3907 this[offset + 3] = value
3908 } else {
3909 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3910 }
ab78acc6 3911 return offset + 4
ebd8d4e8
IC
3912}
3913
ab78acc6
IC
3914function checkIEEE754 (buf, value, offset, ext, max, min) {
3915 if (value > max || value < min) throw new RangeError('value is out of bounds')
3916 if (offset + ext > buf.length) throw new RangeError('index out of range')
3917 if (offset < 0) throw new RangeError('index out of range')
3918}
ebd8d4e8 3919
ab78acc6
IC
3920function writeFloat (buf, value, offset, littleEndian, noAssert) {
3921 if (!noAssert) {
3922 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3923 }
3924 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3925 return offset + 4
3926}
ebd8d4e8 3927
ab78acc6
IC
3928Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3929 return writeFloat(this, value, offset, true, noAssert)
3930}
ebd8d4e8 3931
ab78acc6
IC
3932Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3933 return writeFloat(this, value, offset, false, noAssert)
3934}
ebd8d4e8 3935
ab78acc6
IC
3936function writeDouble (buf, value, offset, littleEndian, noAssert) {
3937 if (!noAssert) {
3938 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3939 }
ab78acc6
IC
3940 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3941 return offset + 8
ebd8d4e8
IC
3942}
3943
ab78acc6
IC
3944Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3945 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3946}
3947
ab78acc6
IC
3948Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3949 return writeDouble(this, value, offset, false, noAssert)
3950}
ebd8d4e8 3951
ab78acc6
IC
3952// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3953Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3954 if (!start) start = 0
3955 if (!end && end !== 0) end = this.length
3956 if (targetStart >= target.length) targetStart = target.length
3957 if (!targetStart) targetStart = 0
3958 if (end > 0 && end < start) end = start
3959
3960 // Copy 0 bytes; we're done
3961 if (end === start) return 0
3962 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3963
ab78acc6
IC
3964 // Fatal error conditions
3965 if (targetStart < 0) {
3966 throw new RangeError('targetStart out of bounds')
3967 }
3968 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3969 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3970
ab78acc6
IC
3971 // Are we oob?
3972 if (end > this.length) end = this.length
3973 if (target.length - targetStart < end - start) {
3974 end = target.length - targetStart + start
3975 }
ebd8d4e8 3976
ab78acc6
IC
3977 var len = end - start
3978 var i
ebd8d4e8 3979
ab78acc6
IC
3980 if (this === target && start < targetStart && targetStart < end) {
3981 // descending copy from end
3982 for (i = len - 1; i >= 0; i--) {
3983 target[i + targetStart] = this[i + start]
3984 }
3985 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3986 // ascending copy from start
3987 for (i = 0; i < len; i++) {
3988 target[i + targetStart] = this[i + start]
3989 }
3990 } else {
3991 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3992 }
ebd8d4e8 3993
ab78acc6
IC
3994 return len
3995}
ebd8d4e8 3996
ab78acc6
IC
3997// fill(value, start=0, end=buffer.length)
3998Buffer.prototype.fill = function fill (value, start, end) {
3999 if (!value) value = 0
4000 if (!start) start = 0
4001 if (!end) end = this.length
ebd8d4e8 4002
ab78acc6 4003 if (end < start) throw new RangeError('end < start')
ebd8d4e8 4004
ab78acc6
IC
4005 // Fill 0 bytes; we're done
4006 if (end === start) return
4007 if (this.length === 0) return
ebd8d4e8 4008
ab78acc6
IC
4009 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4010 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 4011
ab78acc6
IC
4012 var i
4013 if (typeof value === 'number') {
4014 for (i = start; i < end; i++) {
4015 this[i] = value
ebd8d4e8 4016 }
ab78acc6
IC
4017 } else {
4018 var bytes = utf8ToBytes(value.toString())
4019 var len = bytes.length
4020 for (i = start; i < end; i++) {
4021 this[i] = bytes[i % len]
ebd8d4e8
IC
4022 }
4023 }
ebd8d4e8 4024
ab78acc6 4025 return this
ebd8d4e8
IC
4026}
4027
ab78acc6
IC
4028/**
4029 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4030 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4031 */
4032Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4033 if (typeof Uint8Array !== 'undefined') {
4034 if (Buffer.TYPED_ARRAY_SUPPORT) {
4035 return (new Buffer(this)).buffer
4036 } else {
4037 var buf = new Uint8Array(this.length)
4038 for (var i = 0, len = buf.length; i < len; i += 1) {
4039 buf[i] = this[i]
ebd8d4e8 4040 }
ab78acc6 4041 return buf.buffer
ebd8d4e8 4042 }
ab78acc6
IC
4043 } else {
4044 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 4045 }
ebd8d4e8
IC
4046}
4047
ab78acc6
IC
4048// HELPER FUNCTIONS
4049// ================
ebd8d4e8 4050
ab78acc6 4051var BP = Buffer.prototype
ebd8d4e8 4052
ab78acc6
IC
4053/**
4054 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4055 */
4056Buffer._augment = function _augment (arr) {
4057 arr.constructor = Buffer
4058 arr._isBuffer = true
ebd8d4e8 4059
ab78acc6
IC
4060 // save reference to original Uint8Array set method before overwriting
4061 arr._set = arr.set
ebd8d4e8 4062
ab78acc6
IC
4063 // deprecated
4064 arr.get = BP.get
4065 arr.set = BP.set
ebd8d4e8 4066
ab78acc6
IC
4067 arr.write = BP.write
4068 arr.toString = BP.toString
4069 arr.toLocaleString = BP.toString
4070 arr.toJSON = BP.toJSON
4071 arr.equals = BP.equals
4072 arr.compare = BP.compare
4073 arr.indexOf = BP.indexOf
4074 arr.copy = BP.copy
4075 arr.slice = BP.slice
4076 arr.readUIntLE = BP.readUIntLE
4077 arr.readUIntBE = BP.readUIntBE
4078 arr.readUInt8 = BP.readUInt8
4079 arr.readUInt16LE = BP.readUInt16LE
4080 arr.readUInt16BE = BP.readUInt16BE
4081 arr.readUInt32LE = BP.readUInt32LE
4082 arr.readUInt32BE = BP.readUInt32BE
4083 arr.readIntLE = BP.readIntLE
4084 arr.readIntBE = BP.readIntBE
4085 arr.readInt8 = BP.readInt8
4086 arr.readInt16LE = BP.readInt16LE
4087 arr.readInt16BE = BP.readInt16BE
4088 arr.readInt32LE = BP.readInt32LE
4089 arr.readInt32BE = BP.readInt32BE
4090 arr.readFloatLE = BP.readFloatLE
4091 arr.readFloatBE = BP.readFloatBE
4092 arr.readDoubleLE = BP.readDoubleLE
4093 arr.readDoubleBE = BP.readDoubleBE
4094 arr.writeUInt8 = BP.writeUInt8
4095 arr.writeUIntLE = BP.writeUIntLE
4096 arr.writeUIntBE = BP.writeUIntBE
4097 arr.writeUInt16LE = BP.writeUInt16LE
4098 arr.writeUInt16BE = BP.writeUInt16BE
4099 arr.writeUInt32LE = BP.writeUInt32LE
4100 arr.writeUInt32BE = BP.writeUInt32BE
4101 arr.writeIntLE = BP.writeIntLE
4102 arr.writeIntBE = BP.writeIntBE
4103 arr.writeInt8 = BP.writeInt8
4104 arr.writeInt16LE = BP.writeInt16LE
4105 arr.writeInt16BE = BP.writeInt16BE
4106 arr.writeInt32LE = BP.writeInt32LE
4107 arr.writeInt32BE = BP.writeInt32BE
4108 arr.writeFloatLE = BP.writeFloatLE
4109 arr.writeFloatBE = BP.writeFloatBE
4110 arr.writeDoubleLE = BP.writeDoubleLE
4111 arr.writeDoubleBE = BP.writeDoubleBE
4112 arr.fill = BP.fill
4113 arr.inspect = BP.inspect
4114 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4115
ab78acc6 4116 return arr
ebd8d4e8
IC
4117}
4118
ab78acc6 4119var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4120
ab78acc6
IC
4121function base64clean (str) {
4122 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4123 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4124 // Node converts strings with length < 2 to ''
4125 if (str.length < 2) return ''
4126 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4127 while (str.length % 4 !== 0) {
4128 str = str + '='
4129 }
4130 return str
ebd8d4e8
IC
4131}
4132
ab78acc6
IC
4133function stringtrim (str) {
4134 if (str.trim) return str.trim()
4135 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4136}
4137
ab78acc6
IC
4138function toHex (n) {
4139 if (n < 16) return '0' + n.toString(16)
4140 return n.toString(16)
ebd8d4e8
IC
4141}
4142
ab78acc6
IC
4143function utf8ToBytes (string, units) {
4144 units = units || Infinity
4145 var codePoint
4146 var length = string.length
4147 var leadSurrogate = null
4148 var bytes = []
ebd8d4e8 4149
ab78acc6
IC
4150 for (var i = 0; i < length; i++) {
4151 codePoint = string.charCodeAt(i)
ebd8d4e8 4152
ab78acc6
IC
4153 // is surrogate component
4154 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4155 // last char was a lead
4156 if (!leadSurrogate) {
4157 // no lead yet
4158 if (codePoint > 0xDBFF) {
4159 // unexpected trail
4160 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4161 continue
ebd8d4e8 4162
ab78acc6
IC
4163 } else if (i + 1 === length) {
4164 // unpaired lead
4165 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4166 continue
4167 }
ebd8d4e8 4168
ab78acc6
IC
4169 // valid lead
4170 leadSurrogate = codePoint
ebd8d4e8 4171
ab78acc6
IC
4172 continue
4173 }
ebd8d4e8 4174
ab78acc6
IC
4175 // 2 leads in a row
4176 if (codePoint < 0xDC00) {
4177 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4178 leadSurrogate = codePoint
4179 continue
4180 }
ebd8d4e8 4181
ab78acc6
IC
4182 // valid surrogate pair
4183 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4184
4185 } else if (leadSurrogate) {
4186 // valid bmp char, but last char was a lead
4187 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4188 }
4189
4190 leadSurrogate = null
4191
4192 // encode utf8
4193 if (codePoint < 0x80) {
4194 if ((units -= 1) < 0) break
4195 bytes.push(codePoint)
4196 } else if (codePoint < 0x800) {
4197 if ((units -= 2) < 0) break
4198 bytes.push(
4199 codePoint >> 0x6 | 0xC0,
4200 codePoint & 0x3F | 0x80
4201 )
4202 } else if (codePoint < 0x10000) {
4203 if ((units -= 3) < 0) break
4204 bytes.push(
4205 codePoint >> 0xC | 0xE0,
4206 codePoint >> 0x6 & 0x3F | 0x80,
4207 codePoint & 0x3F | 0x80
4208 )
4209 } else if (codePoint < 0x110000) {
4210 if ((units -= 4) < 0) break
4211 bytes.push(
4212 codePoint >> 0x12 | 0xF0,
4213 codePoint >> 0xC & 0x3F | 0x80,
4214 codePoint >> 0x6 & 0x3F | 0x80,
4215 codePoint & 0x3F | 0x80
4216 )
4217 } else {
4218 throw new Error('Invalid code point')
ebd8d4e8 4219 }
ebd8d4e8 4220 }
ab78acc6
IC
4221
4222 return bytes
4223}
4224
4225function asciiToBytes (str) {
4226 var byteArray = []
4227 for (var i = 0; i < str.length; i++) {
4228 // Node's code seems to be doing this and not & 0x7F..
4229 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4230 }
ab78acc6 4231 return byteArray
ebd8d4e8
IC
4232}
4233
ab78acc6
IC
4234function utf16leToBytes (str, units) {
4235 var c, hi, lo
4236 var byteArray = []
4237 for (var i = 0; i < str.length; i++) {
4238 if ((units -= 2) < 0) break
ebd8d4e8 4239
ab78acc6
IC
4240 c = str.charCodeAt(i)
4241 hi = c >> 8
4242 lo = c % 256
4243 byteArray.push(lo)
4244 byteArray.push(hi)
4245 }
ebd8d4e8 4246
ab78acc6
IC
4247 return byteArray
4248}
ebd8d4e8 4249
ab78acc6
IC
4250function base64ToBytes (str) {
4251 return base64.toByteArray(base64clean(str))
4252}
ebd8d4e8 4253
ab78acc6
IC
4254function blitBuffer (src, dst, offset, length) {
4255 for (var i = 0; i < length; i++) {
4256 if ((i + offset >= dst.length) || (i >= src.length)) break
4257 dst[i + offset] = src[i]
4258 }
4259 return i
4260}
4261
4262},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4263var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4264
4265;(function (exports) {
4266 'use strict';
4267
4268 var Arr = (typeof Uint8Array !== 'undefined')
4269 ? Uint8Array
4270 : Array
ebd8d4e8 4271
ab78acc6
IC
4272 var PLUS = '+'.charCodeAt(0)
4273 var SLASH = '/'.charCodeAt(0)
4274 var NUMBER = '0'.charCodeAt(0)
4275 var LOWER = 'a'.charCodeAt(0)
4276 var UPPER = 'A'.charCodeAt(0)
4277 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4278 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4279
ab78acc6
IC
4280 function decode (elt) {
4281 var code = elt.charCodeAt(0)
4282 if (code === PLUS ||
4283 code === PLUS_URL_SAFE)
4284 return 62 // '+'
4285 if (code === SLASH ||
4286 code === SLASH_URL_SAFE)
4287 return 63 // '/'
4288 if (code < NUMBER)
4289 return -1 //no match
4290 if (code < NUMBER + 10)
4291 return code - NUMBER + 26 + 26
4292 if (code < UPPER + 26)
4293 return code - UPPER
4294 if (code < LOWER + 26)
4295 return code - LOWER + 26
4296 }
ebd8d4e8 4297
ab78acc6
IC
4298 function b64ToByteArray (b64) {
4299 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4300
ab78acc6
IC
4301 if (b64.length % 4 > 0) {
4302 throw new Error('Invalid string. Length must be a multiple of 4')
4303 }
ebd8d4e8 4304
ab78acc6
IC
4305 // the number of equal signs (place holders)
4306 // if there are two placeholders, than the two characters before it
4307 // represent one byte
4308 // if there is only one, then the three characters before it represent 2 bytes
4309 // this is just a cheap hack to not do indexOf twice
4310 var len = b64.length
4311 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4312
ab78acc6
IC
4313 // base64 is 4/3 + up to two characters of the original data
4314 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4315
ab78acc6
IC
4316 // if there are placeholders, only get up to the last complete 4 chars
4317 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4318
ab78acc6 4319 var L = 0
ebd8d4e8 4320
ab78acc6
IC
4321 function push (v) {
4322 arr[L++] = v
4323 }
ebd8d4e8 4324
ab78acc6
IC
4325 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4326 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4327 push((tmp & 0xFF0000) >> 16)
4328 push((tmp & 0xFF00) >> 8)
4329 push(tmp & 0xFF)
4330 }
ebd8d4e8 4331
ab78acc6
IC
4332 if (placeHolders === 2) {
4333 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4334 push(tmp & 0xFF)
4335 } else if (placeHolders === 1) {
4336 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4337 push((tmp >> 8) & 0xFF)
4338 push(tmp & 0xFF)
4339 }
ebd8d4e8 4340
ab78acc6
IC
4341 return arr
4342 }
ebd8d4e8 4343
ab78acc6
IC
4344 function uint8ToBase64 (uint8) {
4345 var i,
4346 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4347 output = "",
4348 temp, length
ebd8d4e8 4349
ab78acc6
IC
4350 function encode (num) {
4351 return lookup.charAt(num)
4352 }
ebd8d4e8 4353
ab78acc6
IC
4354 function tripletToBase64 (num) {
4355 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4356 }
ebd8d4e8 4357
ab78acc6
IC
4358 // go through the array every three bytes, we'll deal with trailing stuff later
4359 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4360 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4361 output += tripletToBase64(temp)
4362 }
ebd8d4e8 4363
ab78acc6
IC
4364 // pad the end with zeros, but make sure to not forget the extra bytes
4365 switch (extraBytes) {
4366 case 1:
4367 temp = uint8[uint8.length - 1]
4368 output += encode(temp >> 2)
4369 output += encode((temp << 4) & 0x3F)
4370 output += '=='
4371 break
4372 case 2:
4373 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4374 output += encode(temp >> 10)
4375 output += encode((temp >> 4) & 0x3F)
4376 output += encode((temp << 2) & 0x3F)
4377 output += '='
4378 break
4379 }
ebd8d4e8 4380
ab78acc6
IC
4381 return output
4382 }
ebd8d4e8 4383
ab78acc6
IC
4384 exports.toByteArray = b64ToByteArray
4385 exports.fromByteArray = uint8ToBase64
4386}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4387
ab78acc6
IC
4388},{}],9:[function(require,module,exports){
4389exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4390 var e, m
4391 var eLen = nBytes * 8 - mLen - 1
4392 var eMax = (1 << eLen) - 1
4393 var eBias = eMax >> 1
4394 var nBits = -7
4395 var i = isLE ? (nBytes - 1) : 0
4396 var d = isLE ? -1 : 1
4397 var s = buffer[offset + i]
4398
4399 i += d
4400
4401 e = s & ((1 << (-nBits)) - 1)
4402 s >>= (-nBits)
4403 nBits += eLen
4404 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4405
4406 m = e & ((1 << (-nBits)) - 1)
4407 e >>= (-nBits)
4408 nBits += mLen
4409 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4410
ab78acc6
IC
4411 if (e === 0) {
4412 e = 1 - eBias
4413 } else if (e === eMax) {
4414 return m ? NaN : ((s ? -1 : 1) * Infinity)
4415 } else {
4416 m = m + Math.pow(2, mLen)
4417 e = e - eBias
ebd8d4e8 4418 }
ab78acc6 4419 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4420}
4421
ab78acc6
IC
4422exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4423 var e, m, c
4424 var eLen = nBytes * 8 - mLen - 1
4425 var eMax = (1 << eLen) - 1
4426 var eBias = eMax >> 1
4427 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4428 var i = isLE ? 0 : (nBytes - 1)
4429 var d = isLE ? 1 : -1
4430 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4431
ab78acc6 4432 value = Math.abs(value)
ebd8d4e8 4433
ab78acc6
IC
4434 if (isNaN(value) || value === Infinity) {
4435 m = isNaN(value) ? 1 : 0
4436 e = eMax
4437 } else {
4438 e = Math.floor(Math.log(value) / Math.LN2)
4439 if (value * (c = Math.pow(2, -e)) < 1) {
4440 e--
4441 c *= 2
ebd8d4e8 4442 }
ab78acc6
IC
4443 if (e + eBias >= 1) {
4444 value += rt / c
4445 } else {
4446 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4447 }
ab78acc6
IC
4448 if (value * c >= 2) {
4449 e++
4450 c /= 2
ebd8d4e8 4451 }
ab78acc6
IC
4452
4453 if (e + eBias >= eMax) {
4454 m = 0
4455 e = eMax
4456 } else if (e + eBias >= 1) {
4457 m = (value * c - 1) * Math.pow(2, mLen)
4458 e = e + eBias
4459 } else {
4460 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4461 e = 0
ebd8d4e8
IC
4462 }
4463 }
ebd8d4e8 4464
ab78acc6 4465 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4466
ab78acc6
IC
4467 e = (e << mLen) | m
4468 eLen += mLen
4469 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4470
ab78acc6
IC
4471 buffer[offset + i - d] |= s * 128
4472}
ebd8d4e8 4473
ab78acc6 4474},{}],10:[function(require,module,exports){
ebd8d4e8 4475
ab78acc6
IC
4476/**
4477 * isArray
4478 */
ebd8d4e8 4479
ab78acc6 4480var isArray = Array.isArray;
ebd8d4e8
IC
4481
4482/**
ab78acc6 4483 * toString
ebd8d4e8 4484 */
ebd8d4e8 4485
ab78acc6 4486var str = Object.prototype.toString;
ebd8d4e8
IC
4487
4488/**
ab78acc6
IC
4489 * Whether or not the given `val`
4490 * is an array.
ebd8d4e8 4491 *
ab78acc6
IC
4492 * example:
4493 *
4494 * isArray([]);
4495 * // > true
4496 * isArray(arguments);
4497 * // > false
4498 * isArray('');
4499 * // > false
4500 *
4501 * @param {mixed} val
4502 * @return {bool}
ebd8d4e8 4503 */
ebd8d4e8 4504
ab78acc6
IC
4505module.exports = isArray || function (val) {
4506 return !! val && '[object Array]' == str.call(val);
4507};
4508
4509},{}],11:[function(require,module,exports){
4510// Copyright Joyent, Inc. and other Node contributors.
4511//
4512// Permission is hereby granted, free of charge, to any person obtaining a
4513// copy of this software and associated documentation files (the
4514// "Software"), to deal in the Software without restriction, including
4515// without limitation the rights to use, copy, modify, merge, publish,
4516// distribute, sublicense, and/or sell copies of the Software, and to permit
4517// persons to whom the Software is furnished to do so, subject to the
4518// following conditions:
4519//
4520// The above copyright notice and this permission notice shall be included
4521// in all copies or substantial portions of the Software.
4522//
4523// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4524// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4525// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4526// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4527// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4528// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4529// USE OR OTHER DEALINGS IN THE SOFTWARE.
4530
4531function EventEmitter() {
4532 this._events = this._events || {};
4533 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4534}
ab78acc6 4535module.exports = EventEmitter;
ebd8d4e8 4536
ab78acc6
IC
4537// Backwards-compat with node 0.10.x
4538EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4539
ab78acc6
IC
4540EventEmitter.prototype._events = undefined;
4541EventEmitter.prototype._maxListeners = undefined;
4542
4543// By default EventEmitters will print a warning if more than 10 listeners are
4544// added to it. This is a useful default which helps finding memory leaks.
4545EventEmitter.defaultMaxListeners = 10;
4546
4547// Obviously not all Emitters should be limited to 10. This function allows
4548// that to be increased. Set to zero for unlimited.
4549EventEmitter.prototype.setMaxListeners = function(n) {
4550 if (!isNumber(n) || n < 0 || isNaN(n))
4551 throw TypeError('n must be a positive number');
4552 this._maxListeners = n;
4553 return this;
4554};
4555
4556EventEmitter.prototype.emit = function(type) {
4557 var er, handler, len, args, i, listeners;
4558
4559 if (!this._events)
4560 this._events = {};
4561
4562 // If there is no 'error' event listener then throw.
4563 if (type === 'error') {
4564 if (!this._events.error ||
4565 (isObject(this._events.error) && !this._events.error.length)) {
4566 er = arguments[1];
4567 if (er instanceof Error) {
4568 throw er; // Unhandled 'error' event
4569 }
4570 throw TypeError('Uncaught, unspecified "error" event.');
4571 }
4572 }
4573
4574 handler = this._events[type];
4575
4576 if (isUndefined(handler))
4577 return false;
4578
4579 if (isFunction(handler)) {
4580 switch (arguments.length) {
4581 // fast cases
4582 case 1:
4583 handler.call(this);
4584 break;
4585 case 2:
4586 handler.call(this, arguments[1]);
4587 break;
4588 case 3:
4589 handler.call(this, arguments[1], arguments[2]);
4590 break;
4591 // slower
4592 default:
4593 len = arguments.length;
4594 args = new Array(len - 1);
4595 for (i = 1; i < len; i++)
4596 args[i - 1] = arguments[i];
4597 handler.apply(this, args);
4598 }
4599 } else if (isObject(handler)) {
4600 len = arguments.length;
4601 args = new Array(len - 1);
4602 for (i = 1; i < len; i++)
4603 args[i - 1] = arguments[i];
ebd8d4e8 4604
ab78acc6
IC
4605 listeners = handler.slice();
4606 len = listeners.length;
4607 for (i = 0; i < len; i++)
4608 listeners[i].apply(this, args);
ebd8d4e8
IC
4609 }
4610
ab78acc6
IC
4611 return true;
4612};
ebd8d4e8 4613
ab78acc6
IC
4614EventEmitter.prototype.addListener = function(type, listener) {
4615 var m;
ebd8d4e8 4616
ab78acc6
IC
4617 if (!isFunction(listener))
4618 throw TypeError('listener must be a function');
ebd8d4e8 4619
ab78acc6
IC
4620 if (!this._events)
4621 this._events = {};
ebd8d4e8 4622
ab78acc6
IC
4623 // To avoid recursion in the case that type === "newListener"! Before
4624 // adding it to the listeners, first emit "newListener".
4625 if (this._events.newListener)
4626 this.emit('newListener', type,
4627 isFunction(listener.listener) ?
4628 listener.listener : listener);
ebd8d4e8 4629
ab78acc6
IC
4630 if (!this._events[type])
4631 // Optimize the case of one listener. Don't need the extra array object.
4632 this._events[type] = listener;
4633 else if (isObject(this._events[type]))
4634 // If we've already got an array, just append.
4635 this._events[type].push(listener);
4636 else
4637 // Adding the second element, need to change to array.
4638 this._events[type] = [this._events[type], listener];
4639
4640 // Check for listener leak
4641 if (isObject(this._events[type]) && !this._events[type].warned) {
4642 var m;
4643 if (!isUndefined(this._maxListeners)) {
4644 m = this._maxListeners;
4645 } else {
4646 m = EventEmitter.defaultMaxListeners;
4647 }
4648
4649 if (m && m > 0 && this._events[type].length > m) {
4650 this._events[type].warned = true;
4651 console.error('(node) warning: possible EventEmitter memory ' +
4652 'leak detected. %d listeners added. ' +
4653 'Use emitter.setMaxListeners() to increase limit.',
4654 this._events[type].length);
4655 if (typeof console.trace === 'function') {
4656 // not supported in IE 10
4657 console.trace();
4658 }
4659 }
4660 }
ebd8d4e8 4661
ab78acc6
IC
4662 return this;
4663};
ebd8d4e8 4664
ab78acc6 4665EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4666
ab78acc6
IC
4667EventEmitter.prototype.once = function(type, listener) {
4668 if (!isFunction(listener))
4669 throw TypeError('listener must be a function');
ebd8d4e8 4670
ab78acc6 4671 var fired = false;
ebd8d4e8 4672
ab78acc6
IC
4673 function g() {
4674 this.removeListener(type, g);
ebd8d4e8 4675
ab78acc6
IC
4676 if (!fired) {
4677 fired = true;
4678 listener.apply(this, arguments);
4679 }
4680 }
ebd8d4e8 4681
ab78acc6
IC
4682 g.listener = listener;
4683 this.on(type, g);
ebd8d4e8 4684
ab78acc6
IC
4685 return this;
4686};
ebd8d4e8 4687
ab78acc6
IC
4688// emits a 'removeListener' event iff the listener was removed
4689EventEmitter.prototype.removeListener = function(type, listener) {
4690 var list, position, length, i;
ebd8d4e8 4691
ab78acc6
IC
4692 if (!isFunction(listener))
4693 throw TypeError('listener must be a function');
ebd8d4e8 4694
ab78acc6
IC
4695 if (!this._events || !this._events[type])
4696 return this;
ebd8d4e8 4697
ab78acc6
IC
4698 list = this._events[type];
4699 length = list.length;
4700 position = -1;
4701
4702 if (list === listener ||
4703 (isFunction(list.listener) && list.listener === listener)) {
4704 delete this._events[type];
4705 if (this._events.removeListener)
4706 this.emit('removeListener', type, listener);
4707
4708 } else if (isObject(list)) {
4709 for (i = length; i-- > 0;) {
4710 if (list[i] === listener ||
4711 (list[i].listener && list[i].listener === listener)) {
4712 position = i;
4713 break;
ebd8d4e8 4714 }
ab78acc6 4715 }
ebd8d4e8 4716
ab78acc6
IC
4717 if (position < 0)
4718 return this;
4719
4720 if (list.length === 1) {
4721 list.length = 0;
4722 delete this._events[type];
4723 } else {
4724 list.splice(position, 1);
ebd8d4e8 4725 }
ab78acc6
IC
4726
4727 if (this._events.removeListener)
4728 this.emit('removeListener', type, listener);
ebd8d4e8 4729 }
ab78acc6
IC
4730
4731 return this;
ebd8d4e8
IC
4732};
4733
ab78acc6
IC
4734EventEmitter.prototype.removeAllListeners = function(type) {
4735 var key, listeners;
ebd8d4e8 4736
ab78acc6
IC
4737 if (!this._events)
4738 return this;
4739
4740 // not listening for removeListener, no need to emit
4741 if (!this._events.removeListener) {
4742 if (arguments.length === 0)
4743 this._events = {};
4744 else if (this._events[type])
4745 delete this._events[type];
4746 return this;
ebd8d4e8 4747 }
ab78acc6
IC
4748
4749 // emit removeListener for all listeners on all events
4750 if (arguments.length === 0) {
4751 for (key in this._events) {
4752 if (key === 'removeListener') continue;
4753 this.removeAllListeners(key);
4754 }
4755 this.removeAllListeners('removeListener');
4756 this._events = {};
4757 return this;
ebd8d4e8 4758 }
ebd8d4e8 4759
ab78acc6
IC
4760 listeners = this._events[type];
4761
4762 if (isFunction(listeners)) {
4763 this.removeListener(type, listeners);
ebd8d4e8 4764 } else {
ab78acc6
IC
4765 // LIFO order
4766 while (listeners.length)
4767 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4768 }
ab78acc6 4769 delete this._events[type];
ebd8d4e8 4770
ab78acc6
IC
4771 return this;
4772};
ebd8d4e8 4773
ab78acc6
IC
4774EventEmitter.prototype.listeners = function(type) {
4775 var ret;
4776 if (!this._events || !this._events[type])
4777 ret = [];
4778 else if (isFunction(this._events[type]))
4779 ret = [this._events[type]];
4780 else
4781 ret = this._events[type].slice();
4782 return ret;
4783};
ebd8d4e8 4784
ab78acc6
IC
4785EventEmitter.listenerCount = function(emitter, type) {
4786 var ret;
4787 if (!emitter._events || !emitter._events[type])
4788 ret = 0;
4789 else if (isFunction(emitter._events[type]))
4790 ret = 1;
4791 else
4792 ret = emitter._events[type].length;
4793 return ret;
4794};
ebd8d4e8 4795
ab78acc6
IC
4796function isFunction(arg) {
4797 return typeof arg === 'function';
ebd8d4e8
IC
4798}
4799
ab78acc6
IC
4800function isNumber(arg) {
4801 return typeof arg === 'number';
4802}
ebd8d4e8 4803
ab78acc6
IC
4804function isObject(arg) {
4805 return typeof arg === 'object' && arg !== null;
4806}
ebd8d4e8 4807
ab78acc6
IC
4808function isUndefined(arg) {
4809 return arg === void 0;
ebd8d4e8 4810}
ebd8d4e8 4811
ab78acc6
IC
4812},{}],12:[function(require,module,exports){
4813if (typeof Object.create === 'function') {
4814 // implementation from standard node.js 'util' module
4815 module.exports = function inherits(ctor, superCtor) {
4816 ctor.super_ = superCtor
4817 ctor.prototype = Object.create(superCtor.prototype, {
4818 constructor: {
4819 value: ctor,
4820 enumerable: false,
4821 writable: true,
4822 configurable: true
4823 }
4824 });
4825 };
4826} else {
4827 // old school shim for old browsers
4828 module.exports = function inherits(ctor, superCtor) {
4829 ctor.super_ = superCtor
4830 var TempCtor = function () {}
4831 TempCtor.prototype = superCtor.prototype
4832 ctor.prototype = new TempCtor()
4833 ctor.prototype.constructor = ctor
4834 }
4835}
ebd8d4e8 4836
ab78acc6
IC
4837},{}],13:[function(require,module,exports){
4838module.exports = Array.isArray || function (arr) {
4839 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4840};
4841
ab78acc6
IC
4842},{}],14:[function(require,module,exports){
4843// shim for using process in browser
ebd8d4e8 4844
ab78acc6
IC
4845var process = module.exports = {};
4846var queue = [];
4847var draining = false;
4848var currentQueue;
4849var queueIndex = -1;
4850
4851function cleanUpNextTick() {
4852 draining = false;
4853 if (currentQueue.length) {
4854 queue = currentQueue.concat(queue);
4855 } else {
4856 queueIndex = -1;
4857 }
4858 if (queue.length) {
4859 drainQueue();
4860 }
4861}
ebd8d4e8 4862
ab78acc6
IC
4863function drainQueue() {
4864 if (draining) {
4865 return;
4866 }
4867 var timeout = setTimeout(cleanUpNextTick);
4868 draining = true;
ebd8d4e8 4869
ab78acc6
IC
4870 var len = queue.length;
4871 while(len) {
4872 currentQueue = queue;
4873 queue = [];
4874 while (++queueIndex < len) {
4875 currentQueue[queueIndex].run();
4876 }
4877 queueIndex = -1;
4878 len = queue.length;
4879 }
4880 currentQueue = null;
4881 draining = false;
4882 clearTimeout(timeout);
4883}
4884
4885process.nextTick = function (fun) {
4886 var args = new Array(arguments.length - 1);
4887 if (arguments.length > 1) {
4888 for (var i = 1; i < arguments.length; i++) {
4889 args[i - 1] = arguments[i];
4890 }
4891 }
4892 queue.push(new Item(fun, args));
4893 if (queue.length === 1 && !draining) {
4894 setTimeout(drainQueue, 0);
4895 }
ebd8d4e8
IC
4896};
4897
ab78acc6
IC
4898// v8 likes predictible objects
4899function Item(fun, array) {
4900 this.fun = fun;
4901 this.array = array;
4902}
4903Item.prototype.run = function () {
4904 this.fun.apply(null, this.array);
4905};
4906process.title = 'browser';
4907process.browser = true;
4908process.env = {};
4909process.argv = [];
4910process.version = ''; // empty string to avoid regexp issues
4911process.versions = {};
ebd8d4e8 4912
ab78acc6
IC
4913function noop() {}
4914
4915process.on = noop;
4916process.addListener = noop;
4917process.once = noop;
4918process.off = noop;
4919process.removeListener = noop;
4920process.removeAllListeners = noop;
4921process.emit = noop;
4922
4923process.binding = function (name) {
4924 throw new Error('process.binding is not supported');
4925};
ebd8d4e8 4926
ab78acc6
IC
4927// TODO(shtylman)
4928process.cwd = function () { return '/' };
4929process.chdir = function (dir) {
4930 throw new Error('process.chdir is not supported');
4931};
4932process.umask = function() { return 0; };
ebd8d4e8 4933
ab78acc6
IC
4934},{}],15:[function(require,module,exports){
4935module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4936
ab78acc6
IC
4937},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4938(function (process){
4939// Copyright Joyent, Inc. and other Node contributors.
4940//
4941// Permission is hereby granted, free of charge, to any person obtaining a
4942// copy of this software and associated documentation files (the
4943// "Software"), to deal in the Software without restriction, including
4944// without limitation the rights to use, copy, modify, merge, publish,
4945// distribute, sublicense, and/or sell copies of the Software, and to permit
4946// persons to whom the Software is furnished to do so, subject to the
4947// following conditions:
4948//
4949// The above copyright notice and this permission notice shall be included
4950// in all copies or substantial portions of the Software.
4951//
4952// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4953// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4954// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4955// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4956// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4957// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4958// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4959
ab78acc6
IC
4960// a duplex stream is just a stream that is both readable and writable.
4961// Since JS doesn't have multiple prototypal inheritance, this class
4962// prototypally inherits from Readable, and then parasitically from
4963// Writable.
ebd8d4e8 4964
ab78acc6 4965module.exports = Duplex;
ebd8d4e8 4966
ab78acc6
IC
4967/*<replacement>*/
4968var objectKeys = Object.keys || function (obj) {
4969 var keys = [];
4970 for (var key in obj) keys.push(key);
4971 return keys;
ebd8d4e8 4972}
ab78acc6 4973/*</replacement>*/
ebd8d4e8 4974
ebd8d4e8 4975
ab78acc6
IC
4976/*<replacement>*/
4977var util = require('core-util-is');
4978util.inherits = require('inherits');
4979/*</replacement>*/
ebd8d4e8 4980
ab78acc6
IC
4981var Readable = require('./_stream_readable');
4982var Writable = require('./_stream_writable');
ebd8d4e8 4983
ab78acc6 4984util.inherits(Duplex, Readable);
ebd8d4e8 4985
ab78acc6
IC
4986forEach(objectKeys(Writable.prototype), function(method) {
4987 if (!Duplex.prototype[method])
4988 Duplex.prototype[method] = Writable.prototype[method];
4989});
ebd8d4e8 4990
ab78acc6
IC
4991function Duplex(options) {
4992 if (!(this instanceof Duplex))
4993 return new Duplex(options);
ebd8d4e8 4994
ab78acc6
IC
4995 Readable.call(this, options);
4996 Writable.call(this, options);
ebd8d4e8 4997
ab78acc6
IC
4998 if (options && options.readable === false)
4999 this.readable = false;
ebd8d4e8 5000
ab78acc6
IC
5001 if (options && options.writable === false)
5002 this.writable = false;
ebd8d4e8 5003
ab78acc6
IC
5004 this.allowHalfOpen = true;
5005 if (options && options.allowHalfOpen === false)
5006 this.allowHalfOpen = false;
ebd8d4e8 5007
ab78acc6 5008 this.once('end', onend);
ebd8d4e8
IC
5009}
5010
ab78acc6
IC
5011// the no-half-open enforcer
5012function onend() {
5013 // if we allow half-open state, or if the writable side ended,
5014 // then we're ok.
5015 if (this.allowHalfOpen || this._writableState.ended)
5016 return;
ebd8d4e8 5017
ab78acc6
IC
5018 // no more data can be written.
5019 // But allow more writes to happen in this tick.
5020 process.nextTick(this.end.bind(this));
5021}
ebd8d4e8 5022
ab78acc6
IC
5023function forEach (xs, f) {
5024 for (var i = 0, l = xs.length; i < l; i++) {
5025 f(xs[i], i);
ebd8d4e8 5026 }
ab78acc6 5027}
ebd8d4e8 5028
ab78acc6
IC
5029}).call(this,require('_process'))
5030},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5031// Copyright Joyent, Inc. and other Node contributors.
5032//
5033// Permission is hereby granted, free of charge, to any person obtaining a
5034// copy of this software and associated documentation files (the
5035// "Software"), to deal in the Software without restriction, including
5036// without limitation the rights to use, copy, modify, merge, publish,
5037// distribute, sublicense, and/or sell copies of the Software, and to permit
5038// persons to whom the Software is furnished to do so, subject to the
5039// following conditions:
5040//
5041// The above copyright notice and this permission notice shall be included
5042// in all copies or substantial portions of the Software.
5043//
5044// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5045// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5046// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5047// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5048// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5049// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5050// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5051
ab78acc6
IC
5052// a passthrough stream.
5053// basically just the most minimal sort of Transform stream.
5054// Every written chunk gets output as-is.
ebd8d4e8 5055
ab78acc6 5056module.exports = PassThrough;
ebd8d4e8 5057
ab78acc6 5058var Transform = require('./_stream_transform');
ebd8d4e8 5059
ab78acc6
IC
5060/*<replacement>*/
5061var util = require('core-util-is');
5062util.inherits = require('inherits');
5063/*</replacement>*/
ebd8d4e8 5064
ab78acc6 5065util.inherits(PassThrough, Transform);
ebd8d4e8 5066
ab78acc6
IC
5067function PassThrough(options) {
5068 if (!(this instanceof PassThrough))
5069 return new PassThrough(options);
ebd8d4e8 5070
ab78acc6
IC
5071 Transform.call(this, options);
5072}
ebd8d4e8 5073
ab78acc6
IC
5074PassThrough.prototype._transform = function(chunk, encoding, cb) {
5075 cb(null, chunk);
ebd8d4e8
IC
5076};
5077
ab78acc6
IC
5078},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5079(function (process){
ebd8d4e8
IC
5080// Copyright Joyent, Inc. and other Node contributors.
5081//
5082// Permission is hereby granted, free of charge, to any person obtaining a
5083// copy of this software and associated documentation files (the
5084// "Software"), to deal in the Software without restriction, including
5085// without limitation the rights to use, copy, modify, merge, publish,
5086// distribute, sublicense, and/or sell copies of the Software, and to permit
5087// persons to whom the Software is furnished to do so, subject to the
5088// following conditions:
5089//
5090// The above copyright notice and this permission notice shall be included
5091// in all copies or substantial portions of the Software.
5092//
5093// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5094// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5095// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5096// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5097// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5098// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5099// USE OR OTHER DEALINGS IN THE SOFTWARE.
5100
ab78acc6 5101module.exports = Readable;
ebd8d4e8 5102
ab78acc6
IC
5103/*<replacement>*/
5104var isArray = require('isarray');
5105/*</replacement>*/
5106
5107
5108/*<replacement>*/
5109var Buffer = require('buffer').Buffer;
5110/*</replacement>*/
5111
5112Readable.ReadableState = ReadableState;
5113
5114var EE = require('events').EventEmitter;
5115
5116/*<replacement>*/
5117if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5118 return emitter.listeners(type).length;
ebd8d4e8 5119};
ab78acc6
IC
5120/*</replacement>*/
5121
5122var Stream = require('stream');
5123
5124/*<replacement>*/
5125var util = require('core-util-is');
5126util.inherits = require('inherits');
5127/*</replacement>*/
5128
5129var StringDecoder;
5130
5131
5132/*<replacement>*/
5133var debug = require('util');
5134if (debug && debug.debuglog) {
5135 debug = debug.debuglog('stream');
5136} else {
5137 debug = function () {};
5138}
5139/*</replacement>*/
5140
5141
5142util.inherits(Readable, Stream);
5143
5144function ReadableState(options, stream) {
5145 var Duplex = require('./_stream_duplex');
5146
5147 options = options || {};
5148
5149 // the point at which it stops calling _read() to fill the buffer
5150 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5151 var hwm = options.highWaterMark;
5152 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5153 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5154
5155 // cast to ints.
5156 this.highWaterMark = ~~this.highWaterMark;
5157
5158 this.buffer = [];
5159 this.length = 0;
5160 this.pipes = null;
5161 this.pipesCount = 0;
5162 this.flowing = null;
5163 this.ended = false;
5164 this.endEmitted = false;
5165 this.reading = false;
ebd8d4e8 5166
ab78acc6
IC
5167 // a flag to be able to tell if the onwrite cb is called immediately,
5168 // or on a later tick. We set this to true at first, because any
5169 // actions that shouldn't happen until "later" should generally also
5170 // not happen before the first write call.
5171 this.sync = true;
ebd8d4e8 5172
ab78acc6
IC
5173 // whenever we return null, then we set a flag to say
5174 // that we're awaiting a 'readable' event emission.
5175 this.needReadable = false;
5176 this.emittedReadable = false;
5177 this.readableListening = false;
ebd8d4e8 5178
ab78acc6
IC
5179
5180 // object stream flag. Used to make read(n) ignore n and to
5181 // make all the buffer merging and length checks go away
5182 this.objectMode = !!options.objectMode;
5183
5184 if (stream instanceof Duplex)
5185 this.objectMode = this.objectMode || !!options.readableObjectMode;
5186
5187 // Crypto is kind of old and crusty. Historically, its default string
5188 // encoding is 'binary' so we have to make this configurable.
5189 // Everything else in the universe uses 'utf8', though.
5190 this.defaultEncoding = options.defaultEncoding || 'utf8';
5191
5192 // when piping, we only care about 'readable' events that happen
5193 // after read()ing all the bytes and not getting any pushback.
5194 this.ranOut = false;
5195
5196 // the number of writers that are awaiting a drain event in .pipe()s
5197 this.awaitDrain = 0;
5198
5199 // if true, a maybeReadMore has been scheduled
5200 this.readingMore = false;
5201
5202 this.decoder = null;
5203 this.encoding = null;
5204 if (options.encoding) {
5205 if (!StringDecoder)
5206 StringDecoder = require('string_decoder/').StringDecoder;
5207 this.decoder = new StringDecoder(options.encoding);
5208 this.encoding = options.encoding;
ebd8d4e8 5209 }
ab78acc6 5210}
ebd8d4e8 5211
ab78acc6
IC
5212function Readable(options) {
5213 var Duplex = require('./_stream_duplex');
5214
5215 if (!(this instanceof Readable))
5216 return new Readable(options);
5217
5218 this._readableState = new ReadableState(options, this);
5219
5220 // legacy
5221 this.readable = true;
5222
5223 Stream.call(this);
5224}
5225
5226// Manually shove something into the read() buffer.
5227// This returns true if the highWaterMark has not been hit yet,
5228// similar to how Writable.write() returns true if you should
5229// write() some more.
5230Readable.prototype.push = function(chunk, encoding) {
5231 var state = this._readableState;
5232
5233 if (util.isString(chunk) && !state.objectMode) {
5234 encoding = encoding || state.defaultEncoding;
5235 if (encoding !== state.encoding) {
5236 chunk = new Buffer(chunk, encoding);
5237 encoding = '';
ebd8d4e8 5238 }
ebd8d4e8
IC
5239 }
5240
ab78acc6 5241 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5242};
5243
ab78acc6
IC
5244// Unshift should *always* be something directly out of read()
5245Readable.prototype.unshift = function(chunk) {
5246 var state = this._readableState;
5247 return readableAddChunk(this, state, chunk, '', true);
5248};
ebd8d4e8 5249
ab78acc6
IC
5250function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5251 var er = chunkInvalid(state, chunk);
5252 if (er) {
5253 stream.emit('error', er);
5254 } else if (util.isNullOrUndefined(chunk)) {
5255 state.reading = false;
5256 if (!state.ended)
5257 onEofChunk(stream, state);
5258 } else if (state.objectMode || chunk && chunk.length > 0) {
5259 if (state.ended && !addToFront) {
5260 var e = new Error('stream.push() after EOF');
5261 stream.emit('error', e);
5262 } else if (state.endEmitted && addToFront) {
5263 var e = new Error('stream.unshift() after end event');
5264 stream.emit('error', e);
ebd8d4e8 5265 } else {
ab78acc6
IC
5266 if (state.decoder && !addToFront && !encoding)
5267 chunk = state.decoder.write(chunk);
5268
5269 if (!addToFront)
5270 state.reading = false;
5271
5272 // if we want the data now, just emit it.
5273 if (state.flowing && state.length === 0 && !state.sync) {
5274 stream.emit('data', chunk);
5275 stream.read(0);
5276 } else {
5277 // update the buffer info.
5278 state.length += state.objectMode ? 1 : chunk.length;
5279 if (addToFront)
5280 state.buffer.unshift(chunk);
5281 else
5282 state.buffer.push(chunk);
5283
5284 if (state.needReadable)
5285 emitReadable(stream);
5286 }
5287
5288 maybeReadMore(stream, state);
ebd8d4e8 5289 }
ab78acc6
IC
5290 } else if (!addToFront) {
5291 state.reading = false;
ebd8d4e8 5292 }
ebd8d4e8 5293
ab78acc6
IC
5294 return needMoreData(state);
5295}
ebd8d4e8 5296
ab78acc6
IC
5297
5298
5299// if it's past the high water mark, we can push in some more.
5300// Also, if we have no data yet, we can stand some
5301// more bytes. This is to work around cases where hwm=0,
5302// such as the repl. Also, if the push() triggered a
5303// readable event, and the user called read(largeNumber) such that
5304// needReadable was set, then we ought to push more, so that another
5305// 'readable' event will be triggered.
5306function needMoreData(state) {
5307 return !state.ended &&
5308 (state.needReadable ||
5309 state.length < state.highWaterMark ||
5310 state.length === 0);
5311}
5312
5313// backwards compatibility.
5314Readable.prototype.setEncoding = function(enc) {
5315 if (!StringDecoder)
5316 StringDecoder = require('string_decoder/').StringDecoder;
5317 this._readableState.decoder = new StringDecoder(enc);
5318 this._readableState.encoding = enc;
5319 return this;
5320};
5321
5322// Don't raise the hwm > 128MB
5323var MAX_HWM = 0x800000;
5324function roundUpToNextPowerOf2(n) {
5325 if (n >= MAX_HWM) {
5326 n = MAX_HWM;
5327 } else {
5328 // Get the next highest power of 2
5329 n--;
5330 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5331 n++;
ebd8d4e8 5332 }
ab78acc6 5333 return n;
ebd8d4e8 5334}
ebd8d4e8 5335
ab78acc6
IC
5336function howMuchToRead(n, state) {
5337 if (state.length === 0 && state.ended)
5338 return 0;
ebd8d4e8 5339
ab78acc6
IC
5340 if (state.objectMode)
5341 return n === 0 ? 0 : 1;
ebd8d4e8 5342
ab78acc6
IC
5343 if (isNaN(n) || util.isNull(n)) {
5344 // only flow one buffer at a time
5345 if (state.flowing && state.buffer.length)
5346 return state.buffer[0].length;
5347 else
5348 return state.length;
5349 }
ebd8d4e8 5350
ab78acc6
IC
5351 if (n <= 0)
5352 return 0;
ebd8d4e8 5353
ab78acc6
IC
5354 // If we're asking for more than the target buffer level,
5355 // then raise the water mark. Bump up to the next highest
5356 // power of 2, to prevent increasing it excessively in tiny
5357 // amounts.
5358 if (n > state.highWaterMark)
5359 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5360
ab78acc6
IC
5361 // don't have that much. return null, unless we've ended.
5362 if (n > state.length) {
5363 if (!state.ended) {
5364 state.needReadable = true;
5365 return 0;
5366 } else
5367 return state.length;
ebd8d4e8 5368 }
ab78acc6
IC
5369
5370 return n;
ebd8d4e8
IC
5371}
5372
ab78acc6
IC
5373// you can override either this method, or the async _read(n) below.
5374Readable.prototype.read = function(n) {
5375 debug('read', n);
5376 var state = this._readableState;
5377 var nOrig = n;
ebd8d4e8 5378
ab78acc6
IC
5379 if (!util.isNumber(n) || n > 0)
5380 state.emittedReadable = false;
5381
5382 // if we're doing read(0) to trigger a readable event, but we
5383 // already have a bunch of data in the buffer, then just trigger
5384 // the 'readable' event and move on.
5385 if (n === 0 &&
5386 state.needReadable &&
5387 (state.length >= state.highWaterMark || state.ended)) {
5388 debug('read: emitReadable', state.length, state.ended);
5389 if (state.length === 0 && state.ended)
5390 endReadable(this);
5391 else
5392 emitReadable(this);
5393 return null;
5394 }
5395
5396 n = howMuchToRead(n, state);
5397
5398 // if we've ended, and we're now clear, then finish it up.
5399 if (n === 0 && state.ended) {
5400 if (state.length === 0)
5401 endReadable(this);
5402 return null;
5403 }
5404
5405 // All the actual chunk generation logic needs to be
5406 // *below* the call to _read. The reason is that in certain
5407 // synthetic stream cases, such as passthrough streams, _read
5408 // may be a completely synchronous operation which may change
5409 // the state of the read buffer, providing enough data when
5410 // before there was *not* enough.
5411 //
5412 // So, the steps are:
5413 // 1. Figure out what the state of things will be after we do
5414 // a read from the buffer.
5415 //
5416 // 2. If that resulting state will trigger a _read, then call _read.
5417 // Note that this may be asynchronous, or synchronous. Yes, it is
5418 // deeply ugly to write APIs this way, but that still doesn't mean
5419 // that the Readable class should behave improperly, as streams are
5420 // designed to be sync/async agnostic.
5421 // Take note if the _read call is sync or async (ie, if the read call
5422 // has returned yet), so that we know whether or not it's safe to emit
5423 // 'readable' etc.
5424 //
5425 // 3. Actually pull the requested chunks out of the buffer and return.
5426
5427 // if we need a readable event, then we need to do some reading.
5428 var doRead = state.needReadable;
5429 debug('need readable', doRead);
5430
5431 // if we currently have less than the highWaterMark, then also read some
5432 if (state.length === 0 || state.length - n < state.highWaterMark) {
5433 doRead = true;
5434 debug('length less than watermark', doRead);
5435 }
5436
5437 // however, if we've ended, then there's no point, and if we're already
5438 // reading, then it's unnecessary.
5439 if (state.ended || state.reading) {
5440 doRead = false;
5441 debug('reading or ended', doRead);
5442 }
5443
5444 if (doRead) {
5445 debug('do read');
5446 state.reading = true;
5447 state.sync = true;
5448 // if the length is currently zero, then we *need* a readable event.
5449 if (state.length === 0)
5450 state.needReadable = true;
5451 // call internal read method
5452 this._read(state.highWaterMark);
5453 state.sync = false;
5454 }
5455
5456 // If _read pushed data synchronously, then `reading` will be false,
5457 // and we need to re-evaluate how much data we can return to the user.
5458 if (doRead && !state.reading)
5459 n = howMuchToRead(nOrig, state);
5460
5461 var ret;
5462 if (n > 0)
5463 ret = fromList(n, state);
5464 else
5465 ret = null;
ebd8d4e8 5466
ab78acc6
IC
5467 if (util.isNull(ret)) {
5468 state.needReadable = true;
5469 n = 0;
5470 }
ebd8d4e8 5471
ab78acc6 5472 state.length -= n;
ebd8d4e8 5473
ab78acc6
IC
5474 // If we have nothing in the buffer, then we want to know
5475 // as soon as we *do* get something into the buffer.
5476 if (state.length === 0 && !state.ended)
5477 state.needReadable = true;
ebd8d4e8 5478
ab78acc6
IC
5479 // If we tried to read() past the EOF, then emit end on the next tick.
5480 if (nOrig !== n && state.ended && state.length === 0)
5481 endReadable(this);
5482
5483 if (!util.isNull(ret))
5484 this.emit('data', ret);
5485
5486 return ret;
5487};
5488
5489function chunkInvalid(state, chunk) {
5490 var er = null;
5491 if (!util.isBuffer(chunk) &&
5492 !util.isString(chunk) &&
5493 !util.isNullOrUndefined(chunk) &&
5494 !state.objectMode) {
5495 er = new TypeError('Invalid non-string/buffer chunk');
5496 }
5497 return er;
ebd8d4e8
IC
5498}
5499
5500
ab78acc6
IC
5501function onEofChunk(stream, state) {
5502 if (state.decoder && !state.ended) {
5503 var chunk = state.decoder.end();
5504 if (chunk && chunk.length) {
5505 state.buffer.push(chunk);
5506 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5507 }
ebd8d4e8 5508 }
ab78acc6 5509 state.ended = true;
ebd8d4e8 5510
ab78acc6
IC
5511 // emit 'readable' now to make sure it gets picked up.
5512 emitReadable(stream);
5513}
5514
5515// Don't emit readable right away in sync mode, because this can trigger
5516// another read() call => stack overflow. This way, it might trigger
5517// a nextTick recursion warning, but that's not so bad.
5518function emitReadable(stream) {
5519 var state = stream._readableState;
5520 state.needReadable = false;
5521 if (!state.emittedReadable) {
5522 debug('emitReadable', state.flowing);
5523 state.emittedReadable = true;
5524 if (state.sync)
5525 process.nextTick(function() {
5526 emitReadable_(stream);
5527 });
5528 else
5529 emitReadable_(stream);
ebd8d4e8 5530 }
ab78acc6 5531}
ebd8d4e8 5532
ab78acc6
IC
5533function emitReadable_(stream) {
5534 debug('emit readable');
5535 stream.emit('readable');
5536 flow(stream);
5537}
ebd8d4e8 5538
ab78acc6
IC
5539
5540// at this point, the user has presumably seen the 'readable' event,
5541// and called read() to consume some data. that may have triggered
5542// in turn another _read(n) call, in which case reading = true if
5543// it's in progress.
5544// However, if we're not ended, or reading, and the length < hwm,
5545// then go ahead and try to read some more preemptively.
5546function maybeReadMore(stream, state) {
5547 if (!state.readingMore) {
5548 state.readingMore = true;
5549 process.nextTick(function() {
5550 maybeReadMore_(stream, state);
5551 });
ebd8d4e8 5552 }
ab78acc6 5553}
ebd8d4e8 5554
ab78acc6
IC
5555function maybeReadMore_(stream, state) {
5556 var len = state.length;
5557 while (!state.reading && !state.flowing && !state.ended &&
5558 state.length < state.highWaterMark) {
5559 debug('maybeReadMore read 0');
5560 stream.read(0);
5561 if (len === state.length)
5562 // didn't get any data, stop spinning.
5563 break;
5564 else
5565 len = state.length;
ebd8d4e8 5566 }
ab78acc6
IC
5567 state.readingMore = false;
5568}
ebd8d4e8 5569
ab78acc6
IC
5570// abstract method. to be overridden in specific implementation classes.
5571// call cb(er, data) where data is <= n in length.
5572// for virtual (non-string, non-buffer) streams, "length" is somewhat
5573// arbitrary, and perhaps not very meaningful.
5574Readable.prototype._read = function(n) {
5575 this.emit('error', new Error('not implemented'));
5576};
5577
5578Readable.prototype.pipe = function(dest, pipeOpts) {
5579 var src = this;
5580 var state = this._readableState;
5581
5582 switch (state.pipesCount) {
5583 case 0:
5584 state.pipes = dest;
5585 break;
5586 case 1:
5587 state.pipes = [state.pipes, dest];
5588 break;
5589 default:
5590 state.pipes.push(dest);
5591 break;
ebd8d4e8 5592 }
ab78acc6
IC
5593 state.pipesCount += 1;
5594 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5595
ab78acc6
IC
5596 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5597 dest !== process.stdout &&
5598 dest !== process.stderr;
ebd8d4e8 5599
ab78acc6
IC
5600 var endFn = doEnd ? onend : cleanup;
5601 if (state.endEmitted)
5602 process.nextTick(endFn);
5603 else
5604 src.once('end', endFn);
5605
5606 dest.on('unpipe', onunpipe);
5607 function onunpipe(readable) {
5608 debug('onunpipe');
5609 if (readable === src) {
5610 cleanup();
5611 }
5612 }
5613
5614 function onend() {
5615 debug('onend');
5616 dest.end();
5617 }
5618
5619 // when the dest drains, it reduces the awaitDrain counter
5620 // on the source. This would be more elegant with a .once()
5621 // handler in flow(), but adding and removing repeatedly is
5622 // too slow.
5623 var ondrain = pipeOnDrain(src);
5624 dest.on('drain', ondrain);
5625
5626 function cleanup() {
5627 debug('cleanup');
5628 // cleanup event handlers once the pipe is broken
5629 dest.removeListener('close', onclose);
5630 dest.removeListener('finish', onfinish);
5631 dest.removeListener('drain', ondrain);
5632 dest.removeListener('error', onerror);
5633 dest.removeListener('unpipe', onunpipe);
5634 src.removeListener('end', onend);
5635 src.removeListener('end', cleanup);
5636 src.removeListener('data', ondata);
5637
5638 // if the reader is waiting for a drain event from this
5639 // specific writer, then it would cause it to never start
5640 // flowing again.
5641 // So, if this is awaiting a drain, then we just call it now.
5642 // If we don't know, then assume that we are waiting for one.
5643 if (state.awaitDrain &&
5644 (!dest._writableState || dest._writableState.needDrain))
5645 ondrain();
5646 }
5647
5648 src.on('data', ondata);
5649 function ondata(chunk) {
5650 debug('ondata');
5651 var ret = dest.write(chunk);
5652 if (false === ret) {
5653 debug('false write response, pause',
5654 src._readableState.awaitDrain);
5655 src._readableState.awaitDrain++;
5656 src.pause();
5657 }
5658 }
5659
5660 // if the dest has an error, then stop piping into it.
5661 // however, don't suppress the throwing behavior for this.
5662 function onerror(er) {
5663 debug('onerror', er);
5664 unpipe();
5665 dest.removeListener('error', onerror);
5666 if (EE.listenerCount(dest, 'error') === 0)
5667 dest.emit('error', er);
5668 }
5669 // This is a brutally ugly hack to make sure that our error handler
5670 // is attached before any userland ones. NEVER DO THIS.
5671 if (!dest._events || !dest._events.error)
5672 dest.on('error', onerror);
5673 else if (isArray(dest._events.error))
5674 dest._events.error.unshift(onerror);
5675 else
5676 dest._events.error = [onerror, dest._events.error];
5677
5678
5679
5680 // Both close and finish should trigger unpipe, but only once.
5681 function onclose() {
5682 dest.removeListener('finish', onfinish);
5683 unpipe();
ebd8d4e8 5684 }
ab78acc6
IC
5685 dest.once('close', onclose);
5686 function onfinish() {
5687 debug('onfinish');
5688 dest.removeListener('close', onclose);
5689 unpipe();
5690 }
5691 dest.once('finish', onfinish);
ebd8d4e8 5692
ab78acc6
IC
5693 function unpipe() {
5694 debug('unpipe');
5695 src.unpipe(dest);
ebd8d4e8
IC
5696 }
5697
ab78acc6
IC
5698 // tell the dest that it's being piped to
5699 dest.emit('pipe', src);
5700
5701 // start the flow if it hasn't been started already.
5702 if (!state.flowing) {
5703 debug('pipe resume');
5704 src.resume();
ebd8d4e8
IC
5705 }
5706
ab78acc6
IC
5707 return dest;
5708};
5709
5710function pipeOnDrain(src) {
5711 return function() {
5712 var state = src._readableState;
5713 debug('pipeOnDrain', state.awaitDrain);
5714 if (state.awaitDrain)
5715 state.awaitDrain--;
5716 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5717 state.flowing = true;
5718 flow(src);
5719 }
5720 };
5721}
5722
5723
5724Readable.prototype.unpipe = function(dest) {
5725 var state = this._readableState;
5726
5727 // if we're not piping anywhere, then do nothing.
5728 if (state.pipesCount === 0)
5729 return this;
5730
5731 // just one destination. most common case.
5732 if (state.pipesCount === 1) {
5733 // passed in one, but it's not the right one.
5734 if (dest && dest !== state.pipes)
5735 return this;
5736
5737 if (!dest)
5738 dest = state.pipes;
5739
5740 // got a match.
5741 state.pipes = null;
5742 state.pipesCount = 0;
5743 state.flowing = false;
5744 if (dest)
5745 dest.emit('unpipe', this);
5746 return this;
ebd8d4e8
IC
5747 }
5748
ab78acc6
IC
5749 // slow case. multiple pipe destinations.
5750
5751 if (!dest) {
5752 // remove all.
5753 var dests = state.pipes;
5754 var len = state.pipesCount;
5755 state.pipes = null;
5756 state.pipesCount = 0;
5757 state.flowing = false;
5758
5759 for (var i = 0; i < len; i++)
5760 dests[i].emit('unpipe', this);
5761 return this;
ebd8d4e8
IC
5762 }
5763
ab78acc6
IC
5764 // try to find the right one.
5765 var i = indexOf(state.pipes, dest);
5766 if (i === -1)
5767 return this;
5768
5769 state.pipes.splice(i, 1);
5770 state.pipesCount -= 1;
5771 if (state.pipesCount === 1)
5772 state.pipes = state.pipes[0];
5773
5774 dest.emit('unpipe', this);
ebd8d4e8 5775
ab78acc6
IC
5776 return this;
5777};
5778
5779// set up data events if they are asked for
5780// Ensure readable listeners eventually get something
5781Readable.prototype.on = function(ev, fn) {
5782 var res = Stream.prototype.on.call(this, ev, fn);
5783
5784 // If listening to data, and it has not explicitly been paused,
5785 // then call resume to start the flow of data on the next tick.
5786 if (ev === 'data' && false !== this._readableState.flowing) {
5787 this.resume();
5788 }
5789
5790 if (ev === 'readable' && this.readable) {
5791 var state = this._readableState;
5792 if (!state.readableListening) {
5793 state.readableListening = true;
5794 state.emittedReadable = false;
5795 state.needReadable = true;
5796 if (!state.reading) {
5797 var self = this;
5798 process.nextTick(function() {
5799 debug('readable nexttick read 0');
5800 self.read(0);
5801 });
5802 } else if (state.length) {
5803 emitReadable(this, state);
5804 }
ebd8d4e8
IC
5805 }
5806 }
5807
ab78acc6
IC
5808 return res;
5809};
5810Readable.prototype.addListener = Readable.prototype.on;
5811
5812// pause() and resume() are remnants of the legacy readable stream API
5813// If the user uses them, then switch into old mode.
5814Readable.prototype.resume = function() {
5815 var state = this._readableState;
5816 if (!state.flowing) {
5817 debug('resume');
5818 state.flowing = true;
5819 if (!state.reading) {
5820 debug('resume read 0');
5821 this.read(0);
5822 }
5823 resume(this, state);
5824 }
5825 return this;
5826};
ebd8d4e8 5827
ab78acc6
IC
5828function resume(stream, state) {
5829 if (!state.resumeScheduled) {
5830 state.resumeScheduled = true;
5831 process.nextTick(function() {
5832 resume_(stream, state);
ebd8d4e8
IC
5833 });
5834 }
ebd8d4e8
IC
5835}
5836
ab78acc6
IC
5837function resume_(stream, state) {
5838 state.resumeScheduled = false;
5839 stream.emit('resume');
5840 flow(stream);
5841 if (state.flowing && !state.reading)
5842 stream.read(0);
ebd8d4e8
IC
5843}
5844
ab78acc6
IC
5845Readable.prototype.pause = function() {
5846 debug('call pause flowing=%j', this._readableState.flowing);
5847 if (false !== this._readableState.flowing) {
5848 debug('pause');
5849 this._readableState.flowing = false;
5850 this.emit('pause');
5851 }
5852 return this;
5853};
ebd8d4e8 5854
ab78acc6
IC
5855function flow(stream) {
5856 var state = stream._readableState;
5857 debug('flow', state.flowing);
5858 if (state.flowing) {
5859 do {
5860 var chunk = stream.read();
5861 } while (null !== chunk && state.flowing);
5862 }
ebd8d4e8
IC
5863}
5864
ab78acc6
IC
5865// wrap an old-style stream as the async data source.
5866// This is *not* part of the readable stream interface.
5867// It is an ugly unfortunate mess of history.
5868Readable.prototype.wrap = function(stream) {
5869 var state = this._readableState;
5870 var paused = false;
ebd8d4e8 5871
ab78acc6
IC
5872 var self = this;
5873 stream.on('end', function() {
5874 debug('wrapped end');
5875 if (state.decoder && !state.ended) {
5876 var chunk = state.decoder.end();
5877 if (chunk && chunk.length)
5878 self.push(chunk);
ebd8d4e8 5879 }
ab78acc6
IC
5880
5881 self.push(null);
ebd8d4e8 5882 });
ebd8d4e8 5883
ab78acc6
IC
5884 stream.on('data', function(chunk) {
5885 debug('wrapped data');
5886 if (state.decoder)
5887 chunk = state.decoder.write(chunk);
5888 if (!chunk || !state.objectMode && !chunk.length)
5889 return;
ebd8d4e8 5890
ab78acc6
IC
5891 var ret = self.push(chunk);
5892 if (!ret) {
5893 paused = true;
5894 stream.pause();
ebd8d4e8 5895 }
ab78acc6
IC
5896 });
5897
5898 // proxy all the other methods.
5899 // important when wrapping filters and duplexes.
5900 for (var i in stream) {
5901 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5902 this[i] = function(method) { return function() {
5903 return stream[method].apply(stream, arguments);
5904 }}(i);
ebd8d4e8
IC
5905 }
5906 }
ab78acc6
IC
5907
5908 // proxy certain important events.
5909 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5910 forEach(events, function(ev) {
5911 stream.on(ev, self.emit.bind(self, ev));
5912 });
5913
5914 // when we try to consume some more bytes, simply unpause the
5915 // underlying stream.
5916 self._read = function(n) {
5917 debug('wrapped _read', n);
5918 if (paused) {
5919 paused = false;
5920 stream.resume();
ebd8d4e8 5921 }
ab78acc6
IC
5922 };
5923
5924 return self;
5925};
5926
5927
5928
5929// exposed for testing purposes only.
5930Readable._fromList = fromList;
5931
5932// Pluck off n bytes from an array of buffers.
5933// Length is the combined lengths of all the buffers in the list.
5934function fromList(n, state) {
5935 var list = state.buffer;
5936 var length = state.length;
5937 var stringMode = !!state.decoder;
5938 var objectMode = !!state.objectMode;
5939 var ret;
5940
5941 // nothing in the list, definitely empty.
5942 if (list.length === 0)
5943 return null;
5944
5945 if (length === 0)
5946 ret = null;
5947 else if (objectMode)
5948 ret = list.shift();
5949 else if (!n || n >= length) {
5950 // read it all, truncate the array.
5951 if (stringMode)
5952 ret = list.join('');
5953 else
5954 ret = Buffer.concat(list, length);
5955 list.length = 0;
5956 } else {
5957 // read just some of it.
5958 if (n < list[0].length) {
5959 // just take a part of the first list item.
5960 // slice is the same for buffers and strings.
5961 var buf = list[0];
5962 ret = buf.slice(0, n);
5963 list[0] = buf.slice(n);
5964 } else if (n === list[0].length) {
5965 // first list is a perfect match
5966 ret = list.shift();
ebd8d4e8 5967 } else {
ab78acc6
IC
5968 // complex case.
5969 // we have enough to cover it, but it spans past the first buffer.
5970 if (stringMode)
5971 ret = '';
5972 else
5973 ret = new Buffer(n);
ebd8d4e8 5974
ab78acc6
IC
5975 var c = 0;
5976 for (var i = 0, l = list.length; i < l && c < n; i++) {
5977 var buf = list[0];
5978 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5979
ab78acc6
IC
5980 if (stringMode)
5981 ret += buf.slice(0, cpy);
5982 else
5983 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5984
ab78acc6
IC
5985 if (cpy < buf.length)
5986 list[0] = buf.slice(cpy);
5987 else
5988 list.shift();
ebd8d4e8 5989
ab78acc6
IC
5990 c += cpy;
5991 }
5992 }
ebd8d4e8
IC
5993 }
5994
ab78acc6 5995 return ret;
ebd8d4e8
IC
5996}
5997
ab78acc6
IC
5998function endReadable(stream) {
5999 var state = stream._readableState;
ebd8d4e8 6000
ab78acc6
IC
6001 // If we get here before consuming all the bytes, then that is a
6002 // bug in node. Should never happen.
6003 if (state.length > 0)
6004 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 6005
ab78acc6
IC
6006 if (!state.endEmitted) {
6007 state.ended = true;
6008 process.nextTick(function() {
6009 // Check that we didn't get one last unshift.
6010 if (!state.endEmitted && state.length === 0) {
6011 state.endEmitted = true;
6012 stream.readable = false;
6013 stream.emit('end');
6014 }
6015 });
6016 }
ebd8d4e8 6017}
ebd8d4e8 6018
ab78acc6
IC
6019function forEach (xs, f) {
6020 for (var i = 0, l = xs.length; i < l; i++) {
6021 f(xs[i], i);
6022 }
ebd8d4e8 6023}
ebd8d4e8 6024
ab78acc6
IC
6025function indexOf (xs, x) {
6026 for (var i = 0, l = xs.length; i < l; i++) {
6027 if (xs[i] === x) return i;
6028 }
6029 return -1;
ebd8d4e8 6030}
ebd8d4e8 6031
ab78acc6
IC
6032}).call(this,require('_process'))
6033},{"./_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){
6034// Copyright Joyent, Inc. and other Node contributors.
6035//
6036// Permission is hereby granted, free of charge, to any person obtaining a
6037// copy of this software and associated documentation files (the
6038// "Software"), to deal in the Software without restriction, including
6039// without limitation the rights to use, copy, modify, merge, publish,
6040// distribute, sublicense, and/or sell copies of the Software, and to permit
6041// persons to whom the Software is furnished to do so, subject to the
6042// following conditions:
6043//
6044// The above copyright notice and this permission notice shall be included
6045// in all copies or substantial portions of the Software.
6046//
6047// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6048// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6049// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6050// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6051// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6052// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6053// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6054
ebd8d4e8 6055
ab78acc6
IC
6056// a transform stream is a readable/writable stream where you do
6057// something with the data. Sometimes it's called a "filter",
6058// but that's not a great name for it, since that implies a thing where
6059// some bits pass through, and others are simply ignored. (That would
6060// be a valid example of a transform, of course.)
6061//
6062// While the output is causally related to the input, it's not a
6063// necessarily symmetric or synchronous transformation. For example,
6064// a zlib stream might take multiple plain-text writes(), and then
6065// emit a single compressed chunk some time in the future.
6066//
6067// Here's how this works:
6068//
6069// The Transform stream has all the aspects of the readable and writable
6070// stream classes. When you write(chunk), that calls _write(chunk,cb)
6071// internally, and returns false if there's a lot of pending writes
6072// buffered up. When you call read(), that calls _read(n) until
6073// there's enough pending readable data buffered up.
6074//
6075// In a transform stream, the written data is placed in a buffer. When
6076// _read(n) is called, it transforms the queued up data, calling the
6077// buffered _write cb's as it consumes chunks. If consuming a single
6078// written chunk would result in multiple output chunks, then the first
6079// outputted bit calls the readcb, and subsequent chunks just go into
6080// the read buffer, and will cause it to emit 'readable' if necessary.
6081//
6082// This way, back-pressure is actually determined by the reading side,
6083// since _read has to be called to start processing a new chunk. However,
6084// a pathological inflate type of transform can cause excessive buffering
6085// here. For example, imagine a stream where every byte of input is
6086// interpreted as an integer from 0-255, and then results in that many
6087// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6088// 1kb of data being output. In this case, you could write a very small
6089// amount of input, and end up with a very large amount of output. In
6090// such a pathological inflating mechanism, there'd be no way to tell
6091// the system to stop doing the transform. A single 4MB write could
6092// cause the system to run out of memory.
6093//
6094// However, even in such a pathological case, only a single written chunk
6095// would be consumed, and then the rest would wait (un-transformed) until
6096// the results of the previous transformed chunk were consumed.
ebd8d4e8 6097
ab78acc6 6098module.exports = Transform;
ebd8d4e8 6099
ab78acc6 6100var Duplex = require('./_stream_duplex');
ebd8d4e8 6101
ab78acc6
IC
6102/*<replacement>*/
6103var util = require('core-util-is');
6104util.inherits = require('inherits');
6105/*</replacement>*/
6106
6107util.inherits(Transform, Duplex);
6108
6109
6110function TransformState(options, stream) {
6111 this.afterTransform = function(er, data) {
6112 return afterTransform(stream, er, data);
6113 };
6114
6115 this.needTransform = false;
6116 this.transforming = false;
6117 this.writecb = null;
6118 this.writechunk = null;
ebd8d4e8 6119}
ebd8d4e8 6120
ab78acc6
IC
6121function afterTransform(stream, er, data) {
6122 var ts = stream._transformState;
6123 ts.transforming = false;
6124
6125 var cb = ts.writecb;
6126
6127 if (!cb)
6128 return stream.emit('error', new Error('no writecb in Transform class'));
6129
6130 ts.writechunk = null;
6131 ts.writecb = null;
6132
6133 if (!util.isNullOrUndefined(data))
6134 stream.push(data);
6135
6136 if (cb)
6137 cb(er);
6138
6139 var rs = stream._readableState;
6140 rs.reading = false;
6141 if (rs.needReadable || rs.length < rs.highWaterMark) {
6142 stream._read(rs.highWaterMark);
6143 }
ebd8d4e8 6144}
ebd8d4e8 6145
ab78acc6
IC
6146
6147function Transform(options) {
6148 if (!(this instanceof Transform))
6149 return new Transform(options);
6150
6151 Duplex.call(this, options);
6152
6153 this._transformState = new TransformState(options, this);
6154
6155 // when the writable side finishes, then flush out anything remaining.
6156 var stream = this;
6157
6158 // start out asking for a readable event once data is transformed.
6159 this._readableState.needReadable = true;
6160
6161 // we have implemented the _read method, and done the other things
6162 // that Readable wants before the first _read call, so unset the
6163 // sync guard flag.
6164 this._readableState.sync = false;
6165
6166 this.once('prefinish', function() {
6167 if (util.isFunction(this._flush))
6168 this._flush(function(er) {
6169 done(stream, er);
6170 });
6171 else
6172 done(stream);
6173 });
ebd8d4e8 6174}
ebd8d4e8 6175
ab78acc6
IC
6176Transform.prototype.push = function(chunk, encoding) {
6177 this._transformState.needTransform = false;
6178 return Duplex.prototype.push.call(this, chunk, encoding);
6179};
6180
6181// This is the part where you do stuff!
6182// override this function in implementation classes.
6183// 'chunk' is an input chunk.
6184//
6185// Call `push(newChunk)` to pass along transformed output
6186// to the readable side. You may call 'push' zero or more times.
6187//
6188// Call `cb(err)` when you are done with this chunk. If you pass
6189// an error, then that'll put the hurt on the whole operation. If you
6190// never call cb(), then you'll never get another chunk.
6191Transform.prototype._transform = function(chunk, encoding, cb) {
6192 throw new Error('not implemented');
6193};
6194
6195Transform.prototype._write = function(chunk, encoding, cb) {
6196 var ts = this._transformState;
6197 ts.writecb = cb;
6198 ts.writechunk = chunk;
6199 ts.writeencoding = encoding;
6200 if (!ts.transforming) {
6201 var rs = this._readableState;
6202 if (ts.needTransform ||
6203 rs.needReadable ||
6204 rs.length < rs.highWaterMark)
6205 this._read(rs.highWaterMark);
6206 }
6207};
6208
6209// Doesn't matter what the args are here.
6210// _transform does all the work.
6211// That we got here means that the readable side wants more data.
6212Transform.prototype._read = function(n) {
6213 var ts = this._transformState;
ebd8d4e8 6214
ab78acc6
IC
6215 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6216 ts.transforming = true;
6217 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6218 } else {
6219 // mark that we need a transform, so that any data that comes in
6220 // will get processed, now that we've asked for it.
6221 ts.needTransform = true;
6222 }
6223};
ebd8d4e8 6224
ebd8d4e8 6225
ab78acc6
IC
6226function done(stream, er) {
6227 if (er)
6228 return stream.emit('error', er);
ebd8d4e8 6229
ab78acc6
IC
6230 // if there's nothing in the write buffer, then that means
6231 // that nothing more will ever be provided
6232 var ws = stream._writableState;
6233 var ts = stream._transformState;
ebd8d4e8 6234
ab78acc6
IC
6235 if (ws.length)
6236 throw new Error('calling transform done when ws.length != 0');
6237
6238 if (ts.transforming)
6239 throw new Error('calling transform done when still transforming');
6240
6241 return stream.push(null);
ebd8d4e8
IC
6242}
6243
ab78acc6
IC
6244},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6245(function (process){
6246// Copyright Joyent, Inc. and other Node contributors.
6247//
6248// Permission is hereby granted, free of charge, to any person obtaining a
6249// copy of this software and associated documentation files (the
6250// "Software"), to deal in the Software without restriction, including
6251// without limitation the rights to use, copy, modify, merge, publish,
6252// distribute, sublicense, and/or sell copies of the Software, and to permit
6253// persons to whom the Software is furnished to do so, subject to the
6254// following conditions:
6255//
6256// The above copyright notice and this permission notice shall be included
6257// in all copies or substantial portions of the Software.
6258//
6259// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6260// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6261// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6262// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6263// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6264// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6265// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6266
ab78acc6
IC
6267// A bit simpler than readable streams.
6268// Implement an async ._write(chunk, cb), and it'll handle all
6269// the drain event emission and buffering.
ebd8d4e8 6270
ab78acc6 6271module.exports = Writable;
ebd8d4e8 6272
ab78acc6
IC
6273/*<replacement>*/
6274var Buffer = require('buffer').Buffer;
6275/*</replacement>*/
ebd8d4e8 6276
ab78acc6 6277Writable.WritableState = WritableState;
ebd8d4e8
IC
6278
6279
ab78acc6
IC
6280/*<replacement>*/
6281var util = require('core-util-is');
6282util.inherits = require('inherits');
6283/*</replacement>*/
ebd8d4e8 6284
ab78acc6 6285var Stream = require('stream');
ebd8d4e8 6286
ab78acc6 6287util.inherits(Writable, Stream);
ebd8d4e8 6288
ab78acc6
IC
6289function WriteReq(chunk, encoding, cb) {
6290 this.chunk = chunk;
6291 this.encoding = encoding;
6292 this.callback = cb;
ebd8d4e8
IC
6293}
6294
ab78acc6
IC
6295function WritableState(options, stream) {
6296 var Duplex = require('./_stream_duplex');
ebd8d4e8 6297
ab78acc6 6298 options = options || {};
ebd8d4e8 6299
ab78acc6
IC
6300 // the point at which write() starts returning false
6301 // Note: 0 is a valid value, means that we always return false if
6302 // the entire buffer is not flushed immediately on write()
6303 var hwm = options.highWaterMark;
6304 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6305 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6306
ab78acc6
IC
6307 // object stream flag to indicate whether or not this stream
6308 // contains buffers or objects.
6309 this.objectMode = !!options.objectMode;
ebd8d4e8 6310
ab78acc6
IC
6311 if (stream instanceof Duplex)
6312 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6313
ab78acc6
IC
6314 // cast to ints.
6315 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6316
ab78acc6
IC
6317 this.needDrain = false;
6318 // at the start of calling end()
6319 this.ending = false;
6320 // when end() has been called, and returned
6321 this.ended = false;
6322 // when 'finish' is emitted
6323 this.finished = false;
ebd8d4e8 6324
ab78acc6
IC
6325 // should we decode strings into buffers before passing to _write?
6326 // this is here so that some node-core streams can optimize string
6327 // handling at a lower level.
6328 var noDecode = options.decodeStrings === false;
6329 this.decodeStrings = !noDecode;
ebd8d4e8 6330
ab78acc6
IC
6331 // Crypto is kind of old and crusty. Historically, its default string
6332 // encoding is 'binary' so we have to make this configurable.
6333 // Everything else in the universe uses 'utf8', though.
6334 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6335
ab78acc6
IC
6336 // not an actual buffer we keep track of, but a measurement
6337 // of how much we're waiting to get pushed to some underlying
6338 // socket or file.
6339 this.length = 0;
ebd8d4e8 6340
ab78acc6
IC
6341 // a flag to see when we're in the middle of a write.
6342 this.writing = false;
ebd8d4e8 6343
ab78acc6
IC
6344 // when true all writes will be buffered until .uncork() call
6345 this.corked = 0;
ebd8d4e8 6346
ab78acc6
IC
6347 // a flag to be able to tell if the onwrite cb is called immediately,
6348 // or on a later tick. We set this to true at first, because any
6349 // actions that shouldn't happen until "later" should generally also
6350 // not happen before the first write call.
6351 this.sync = true;
ebd8d4e8 6352
ab78acc6
IC
6353 // a flag to know if we're processing previously buffered items, which
6354 // may call the _write() callback in the same tick, so that we don't
6355 // end up in an overlapped onwrite situation.
6356 this.bufferProcessing = false;
ebd8d4e8 6357
ab78acc6
IC
6358 // the callback that's passed to _write(chunk,cb)
6359 this.onwrite = function(er) {
6360 onwrite(stream, er);
6361 };
ebd8d4e8 6362
ab78acc6
IC
6363 // the callback that the user supplies to write(chunk,encoding,cb)
6364 this.writecb = null;
ebd8d4e8 6365
ab78acc6
IC
6366 // the amount that is being written when _write is called.
6367 this.writelen = 0;
ebd8d4e8 6368
ab78acc6 6369 this.buffer = [];
ebd8d4e8 6370
ab78acc6
IC
6371 // number of pending user-supplied write callbacks
6372 // this must be 0 before 'finish' can be emitted
6373 this.pendingcb = 0;
ebd8d4e8 6374
ab78acc6
IC
6375 // emit prefinish if the only thing we're waiting for is _write cbs
6376 // This is relevant for synchronous Transform streams
6377 this.prefinished = false;
ebd8d4e8 6378
ab78acc6
IC
6379 // True if the error was already emitted and should not be thrown again
6380 this.errorEmitted = false;
ebd8d4e8
IC
6381}
6382
ab78acc6
IC
6383function Writable(options) {
6384 var Duplex = require('./_stream_duplex');
ebd8d4e8 6385
ab78acc6
IC
6386 // Writable ctor is applied to Duplexes, though they're not
6387 // instanceof Writable, they're instanceof Readable.
6388 if (!(this instanceof Writable) && !(this instanceof Duplex))
6389 return new Writable(options);
ebd8d4e8 6390
ab78acc6 6391 this._writableState = new WritableState(options, this);
ebd8d4e8 6392
ab78acc6
IC
6393 // legacy.
6394 this.writable = true;
ebd8d4e8 6395
ab78acc6 6396 Stream.call(this);
ebd8d4e8
IC
6397}
6398
ab78acc6
IC
6399// Otherwise people can pipe Writable streams, which is just wrong.
6400Writable.prototype.pipe = function() {
6401 this.emit('error', new Error('Cannot pipe. Not readable.'));
6402};
ebd8d4e8 6403
ebd8d4e8 6404
ab78acc6
IC
6405function writeAfterEnd(stream, state, cb) {
6406 var er = new Error('write after end');
6407 // TODO: defer error events consistently everywhere, not just the cb
6408 stream.emit('error', er);
6409 process.nextTick(function() {
6410 cb(er);
6411 });
ebd8d4e8
IC
6412}
6413
ab78acc6
IC
6414// If we get something that is not a buffer, string, null, or undefined,
6415// and we're not in objectMode, then that's an error.
6416// Otherwise stream chunks are all considered to be of length=1, and the
6417// watermarks determine how many objects to keep in the buffer, rather than
6418// how many bytes or characters.
6419function validChunk(stream, state, chunk, cb) {
6420 var valid = true;
6421 if (!util.isBuffer(chunk) &&
6422 !util.isString(chunk) &&
6423 !util.isNullOrUndefined(chunk) &&
6424 !state.objectMode) {
6425 var er = new TypeError('Invalid non-string/buffer chunk');
6426 stream.emit('error', er);
6427 process.nextTick(function() {
6428 cb(er);
6429 });
6430 valid = false;
6431 }
6432 return valid;
ebd8d4e8
IC
6433}
6434
ab78acc6
IC
6435Writable.prototype.write = function(chunk, encoding, cb) {
6436 var state = this._writableState;
6437 var ret = false;
ebd8d4e8 6438
ab78acc6
IC
6439 if (util.isFunction(encoding)) {
6440 cb = encoding;
6441 encoding = null;
ebd8d4e8 6442 }
ebd8d4e8 6443
ab78acc6
IC
6444 if (util.isBuffer(chunk))
6445 encoding = 'buffer';
6446 else if (!encoding)
6447 encoding = state.defaultEncoding;
6448
6449 if (!util.isFunction(cb))
6450 cb = function() {};
6451
6452 if (state.ended)
6453 writeAfterEnd(this, state, cb);
6454 else if (validChunk(this, state, chunk, cb)) {
6455 state.pendingcb++;
6456 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6457 }
ebd8d4e8 6458
ab78acc6
IC
6459 return ret;
6460};
6461
6462Writable.prototype.cork = function() {
6463 var state = this._writableState;
6464
6465 state.corked++;
6466};
ebd8d4e8 6467
ab78acc6
IC
6468Writable.prototype.uncork = function() {
6469 var state = this._writableState;
ebd8d4e8 6470
ab78acc6
IC
6471 if (state.corked) {
6472 state.corked--;
ebd8d4e8 6473
ab78acc6
IC
6474 if (!state.writing &&
6475 !state.corked &&
6476 !state.finished &&
6477 !state.bufferProcessing &&
6478 state.buffer.length)
6479 clearBuffer(this, state);
ebd8d4e8 6480 }
ab78acc6 6481};
ebd8d4e8 6482
ab78acc6
IC
6483function decodeChunk(state, chunk, encoding) {
6484 if (!state.objectMode &&
6485 state.decodeStrings !== false &&
6486 util.isString(chunk)) {
6487 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6488 }
ab78acc6 6489 return chunk;
ebd8d4e8
IC
6490}
6491
ab78acc6
IC
6492// if we're already writing something, then just put this
6493// in the queue, and wait our turn. Otherwise, call _write
6494// If we return false, then we need a drain event, so set that flag.
6495function writeOrBuffer(stream, state, chunk, encoding, cb) {
6496 chunk = decodeChunk(state, chunk, encoding);
6497 if (util.isBuffer(chunk))
6498 encoding = 'buffer';
6499 var len = state.objectMode ? 1 : chunk.length;
6500
6501 state.length += len;
6502
6503 var ret = state.length < state.highWaterMark;
6504 // we must ensure that previous needDrain will not be reset to false.
6505 if (!ret)
6506 state.needDrain = true;
6507
6508 if (state.writing || state.corked)
6509 state.buffer.push(new WriteReq(chunk, encoding, cb));
6510 else
6511 doWrite(stream, state, false, len, chunk, encoding, cb);
6512
6513 return ret;
ebd8d4e8
IC
6514}
6515
ab78acc6
IC
6516function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6517 state.writelen = len;
6518 state.writecb = cb;
6519 state.writing = true;
6520 state.sync = true;
6521 if (writev)
6522 stream._writev(chunk, state.onwrite);
6523 else
6524 stream._write(chunk, encoding, state.onwrite);
6525 state.sync = false;
ebd8d4e8
IC
6526}
6527
ab78acc6
IC
6528function onwriteError(stream, state, sync, er, cb) {
6529 if (sync)
6530 process.nextTick(function() {
6531 state.pendingcb--;
6532 cb(er);
6533 });
6534 else {
6535 state.pendingcb--;
6536 cb(er);
6537 }
ebd8d4e8 6538
ab78acc6
IC
6539 stream._writableState.errorEmitted = true;
6540 stream.emit('error', er);
6541}
ebd8d4e8 6542
ab78acc6
IC
6543function onwriteStateUpdate(state) {
6544 state.writing = false;
6545 state.writecb = null;
6546 state.length -= state.writelen;
6547 state.writelen = 0;
6548}
ebd8d4e8 6549
ab78acc6
IC
6550function onwrite(stream, er) {
6551 var state = stream._writableState;
6552 var sync = state.sync;
6553 var cb = state.writecb;
ebd8d4e8 6554
ab78acc6 6555 onwriteStateUpdate(state);
ebd8d4e8 6556
ab78acc6
IC
6557 if (er)
6558 onwriteError(stream, state, sync, er, cb);
6559 else {
6560 // Check if we're actually ready to finish, but don't emit yet
6561 var finished = needFinish(stream, state);
ebd8d4e8 6562
ab78acc6
IC
6563 if (!finished &&
6564 !state.corked &&
6565 !state.bufferProcessing &&
6566 state.buffer.length) {
6567 clearBuffer(stream, state);
6568 }
6569
6570 if (sync) {
6571 process.nextTick(function() {
6572 afterWrite(stream, state, finished, cb);
6573 });
6574 } else {
6575 afterWrite(stream, state, finished, cb);
ebd8d4e8 6576 }
ebd8d4e8
IC
6577 }
6578}
6579
ab78acc6
IC
6580function afterWrite(stream, state, finished, cb) {
6581 if (!finished)
6582 onwriteDrain(stream, state);
6583 state.pendingcb--;
6584 cb();
6585 finishMaybe(stream, state);
6586}
6587
6588// Must force callback to be called on nextTick, so that we don't
6589// emit 'drain' before the write() consumer gets the 'false' return
6590// value, and has a chance to attach a 'drain' listener.
6591function onwriteDrain(stream, state) {
6592 if (state.length === 0 && state.needDrain) {
6593 state.needDrain = false;
6594 stream.emit('drain');
ebd8d4e8
IC
6595 }
6596}
6597
ebd8d4e8 6598
ab78acc6
IC
6599// if there's something in the buffer waiting, then process it
6600function clearBuffer(stream, state) {
6601 state.bufferProcessing = true;
6602
6603 if (stream._writev && state.buffer.length > 1) {
6604 // Fast case, write everything using _writev()
6605 var cbs = [];
6606 for (var c = 0; c < state.buffer.length; c++)
6607 cbs.push(state.buffer[c].callback);
6608
6609 // count the one we are adding, as well.
6610 // TODO(isaacs) clean this up
6611 state.pendingcb++;
6612 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6613 for (var i = 0; i < cbs.length; i++) {
6614 state.pendingcb--;
6615 cbs[i](err);
6616 }
6617 });
6618
6619 // Clear buffer
6620 state.buffer = [];
6621 } else {
6622 // Slow case, write chunks one-by-one
6623 for (var c = 0; c < state.buffer.length; c++) {
6624 var entry = state.buffer[c];
6625 var chunk = entry.chunk;
6626 var encoding = entry.encoding;
6627 var cb = entry.callback;
6628 var len = state.objectMode ? 1 : chunk.length;
6629
6630 doWrite(stream, state, false, len, chunk, encoding, cb);
6631
6632 // if we didn't call the onwrite immediately, then
6633 // it means that we need to wait until it does.
6634 // also, that means that the chunk and cb are currently
6635 // being processed, so move the buffer counter past them.
6636 if (state.writing) {
6637 c++;
6638 break;
6639 }
ebd8d4e8 6640 }
ab78acc6
IC
6641
6642 if (c < state.buffer.length)
6643 state.buffer = state.buffer.slice(c);
6644 else
6645 state.buffer.length = 0;
ebd8d4e8
IC
6646 }
6647
ab78acc6 6648 state.bufferProcessing = false;
ebd8d4e8
IC
6649}
6650
ab78acc6
IC
6651Writable.prototype._write = function(chunk, encoding, cb) {
6652 cb(new Error('not implemented'));
ebd8d4e8 6653
ab78acc6 6654};
ebd8d4e8 6655
ab78acc6 6656Writable.prototype._writev = null;
ebd8d4e8 6657
ab78acc6
IC
6658Writable.prototype.end = function(chunk, encoding, cb) {
6659 var state = this._writableState;
ebd8d4e8 6660
ab78acc6
IC
6661 if (util.isFunction(chunk)) {
6662 cb = chunk;
6663 chunk = null;
6664 encoding = null;
6665 } else if (util.isFunction(encoding)) {
6666 cb = encoding;
6667 encoding = null;
6668 }
ebd8d4e8 6669
ab78acc6
IC
6670 if (!util.isNullOrUndefined(chunk))
6671 this.write(chunk, encoding);
6672
6673 // .end() fully uncorks
6674 if (state.corked) {
6675 state.corked = 1;
6676 this.uncork();
ebd8d4e8 6677 }
ab78acc6
IC
6678
6679 // ignore unnecessary end() calls.
6680 if (!state.ending && !state.finished)
6681 endWritable(this, state, cb);
6682};
6683
6684
6685function needFinish(stream, state) {
6686 return (state.ending &&
6687 state.length === 0 &&
6688 !state.finished &&
6689 !state.writing);
ebd8d4e8
IC
6690}
6691
ab78acc6
IC
6692function prefinish(stream, state) {
6693 if (!state.prefinished) {
6694 state.prefinished = true;
6695 stream.emit('prefinish');
ebd8d4e8 6696 }
ebd8d4e8
IC
6697}
6698
ab78acc6
IC
6699function finishMaybe(stream, state) {
6700 var need = needFinish(stream, state);
6701 if (need) {
6702 if (state.pendingcb === 0) {
6703 prefinish(stream, state);
6704 state.finished = true;
6705 stream.emit('finish');
6706 } else
6707 prefinish(stream, state);
6708 }
6709 return need;
6710}
ebd8d4e8 6711
ab78acc6
IC
6712function endWritable(stream, state, cb) {
6713 state.ending = true;
6714 finishMaybe(stream, state);
6715 if (cb) {
6716 if (state.finished)
6717 process.nextTick(cb);
6718 else
6719 stream.once('finish', cb);
ebd8d4e8 6720 }
ab78acc6 6721 state.ended = true;
ebd8d4e8
IC
6722}
6723
ab78acc6
IC
6724}).call(this,require('_process'))
6725},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6726(function (Buffer){
6727// Copyright Joyent, Inc. and other Node contributors.
6728//
6729// Permission is hereby granted, free of charge, to any person obtaining a
6730// copy of this software and associated documentation files (the
6731// "Software"), to deal in the Software without restriction, including
6732// without limitation the rights to use, copy, modify, merge, publish,
6733// distribute, sublicense, and/or sell copies of the Software, and to permit
6734// persons to whom the Software is furnished to do so, subject to the
6735// following conditions:
6736//
6737// The above copyright notice and this permission notice shall be included
6738// in all copies or substantial portions of the Software.
6739//
6740// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6741// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6742// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6743// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6744// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6745// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6746// USE OR OTHER DEALINGS IN THE SOFTWARE.
6747
6748// NOTE: These type checking functions intentionally don't use `instanceof`
6749// because it is fragile and can be easily faked with `Object.create()`.
6750function isArray(ar) {
6751 return Array.isArray(ar);
ebd8d4e8 6752}
ab78acc6 6753exports.isArray = isArray;
ebd8d4e8 6754
ab78acc6
IC
6755function isBoolean(arg) {
6756 return typeof arg === 'boolean';
ebd8d4e8 6757}
ab78acc6 6758exports.isBoolean = isBoolean;
ebd8d4e8 6759
ab78acc6
IC
6760function isNull(arg) {
6761 return arg === null;
6762}
6763exports.isNull = isNull;
ebd8d4e8 6764
ab78acc6
IC
6765function isNullOrUndefined(arg) {
6766 return arg == null;
6767}
6768exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6769
ab78acc6
IC
6770function isNumber(arg) {
6771 return typeof arg === 'number';
ebd8d4e8 6772}
ab78acc6 6773exports.isNumber = isNumber;
ebd8d4e8 6774
ab78acc6
IC
6775function isString(arg) {
6776 return typeof arg === 'string';
6777}
6778exports.isString = isString;
ebd8d4e8 6779
ab78acc6
IC
6780function isSymbol(arg) {
6781 return typeof arg === 'symbol';
6782}
6783exports.isSymbol = isSymbol;
ebd8d4e8 6784
ab78acc6
IC
6785function isUndefined(arg) {
6786 return arg === void 0;
ebd8d4e8 6787}
ab78acc6 6788exports.isUndefined = isUndefined;
ebd8d4e8 6789
ab78acc6
IC
6790function isRegExp(re) {
6791 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6792}
ab78acc6 6793exports.isRegExp = isRegExp;
ebd8d4e8 6794
ab78acc6
IC
6795function isObject(arg) {
6796 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6797}
ab78acc6 6798exports.isObject = isObject;
ebd8d4e8 6799
ab78acc6
IC
6800function isDate(d) {
6801 return isObject(d) && objectToString(d) === '[object Date]';
6802}
6803exports.isDate = isDate;
ebd8d4e8 6804
ab78acc6
IC
6805function isError(e) {
6806 return isObject(e) &&
6807 (objectToString(e) === '[object Error]' || e instanceof Error);
6808}
6809exports.isError = isError;
ebd8d4e8 6810
ab78acc6
IC
6811function isFunction(arg) {
6812 return typeof arg === 'function';
6813}
6814exports.isFunction = isFunction;
6815
6816function isPrimitive(arg) {
6817 return arg === null ||
6818 typeof arg === 'boolean' ||
6819 typeof arg === 'number' ||
6820 typeof arg === 'string' ||
6821 typeof arg === 'symbol' || // ES6 symbol
6822 typeof arg === 'undefined';
ebd8d4e8 6823}
ab78acc6 6824exports.isPrimitive = isPrimitive;
ebd8d4e8 6825
ab78acc6
IC
6826function isBuffer(arg) {
6827 return Buffer.isBuffer(arg);
ebd8d4e8 6828}
ab78acc6 6829exports.isBuffer = isBuffer;
ebd8d4e8 6830
ab78acc6
IC
6831function objectToString(o) {
6832 return Object.prototype.toString.call(o);
ebd8d4e8 6833}
ab78acc6
IC
6834}).call(this,require("buffer").Buffer)
6835},{"buffer":7}],22:[function(require,module,exports){
6836module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6837
ab78acc6
IC
6838},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6839exports = module.exports = require('./lib/_stream_readable.js');
6840exports.Stream = require('stream');
6841exports.Readable = exports;
6842exports.Writable = require('./lib/_stream_writable.js');
6843exports.Duplex = require('./lib/_stream_duplex.js');
6844exports.Transform = require('./lib/_stream_transform.js');
6845exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6846
ab78acc6
IC
6847},{"./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){
6848module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6849
ab78acc6
IC
6850},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6851module.exports = require("./lib/_stream_writable.js")
6852
6853},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6854// Copyright Joyent, Inc. and other Node contributors.
6855//
6856// Permission is hereby granted, free of charge, to any person obtaining a
6857// copy of this software and associated documentation files (the
6858// "Software"), to deal in the Software without restriction, including
6859// without limitation the rights to use, copy, modify, merge, publish,
6860// distribute, sublicense, and/or sell copies of the Software, and to permit
6861// persons to whom the Software is furnished to do so, subject to the
6862// following conditions:
6863//
6864// The above copyright notice and this permission notice shall be included
6865// in all copies or substantial portions of the Software.
6866//
6867// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6868// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6869// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6870// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6871// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6872// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6873// USE OR OTHER DEALINGS IN THE SOFTWARE.
6874
6875module.exports = Stream;
6876
6877var EE = require('events').EventEmitter;
6878var inherits = require('inherits');
6879
6880inherits(Stream, EE);
6881Stream.Readable = require('readable-stream/readable.js');
6882Stream.Writable = require('readable-stream/writable.js');
6883Stream.Duplex = require('readable-stream/duplex.js');
6884Stream.Transform = require('readable-stream/transform.js');
6885Stream.PassThrough = require('readable-stream/passthrough.js');
6886
6887// Backwards-compat with node 0.4.x
6888Stream.Stream = Stream;
6889
6890
6891
6892// old-style streams. Note that the pipe method (the only relevant
6893// part of this class) is overridden in the Readable class.
6894
6895function Stream() {
6896 EE.call(this);
ebd8d4e8
IC
6897}
6898
ab78acc6
IC
6899Stream.prototype.pipe = function(dest, options) {
6900 var source = this;
ebd8d4e8 6901
ab78acc6
IC
6902 function ondata(chunk) {
6903 if (dest.writable) {
6904 if (false === dest.write(chunk) && source.pause) {
6905 source.pause();
6906 }
6907 }
6908 }
ebd8d4e8 6909
ab78acc6 6910 source.on('data', ondata);
ebd8d4e8 6911
ab78acc6
IC
6912 function ondrain() {
6913 if (source.readable && source.resume) {
6914 source.resume();
6915 }
6916 }
ebd8d4e8 6917
ab78acc6 6918 dest.on('drain', ondrain);
ebd8d4e8 6919
ab78acc6
IC
6920 // If the 'end' option is not supplied, dest.end() will be called when
6921 // source gets the 'end' or 'close' events. Only dest.end() once.
6922 if (!dest._isStdio && (!options || options.end !== false)) {
6923 source.on('end', onend);
6924 source.on('close', onclose);
ebd8d4e8
IC
6925 }
6926
ab78acc6
IC
6927 var didOnEnd = false;
6928 function onend() {
6929 if (didOnEnd) return;
6930 didOnEnd = true;
ebd8d4e8 6931
ab78acc6
IC
6932 dest.end();
6933 }
ebd8d4e8 6934
ebd8d4e8 6935
ab78acc6
IC
6936 function onclose() {
6937 if (didOnEnd) return;
6938 didOnEnd = true;
ebd8d4e8 6939
ab78acc6 6940 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6941 }
6942
ab78acc6
IC
6943 // don't leave dangling pipes when there are errors.
6944 function onerror(er) {
6945 cleanup();
6946 if (EE.listenerCount(this, 'error') === 0) {
6947 throw er; // Unhandled stream error in pipe.
6948 }
6949 }
ebd8d4e8 6950
ab78acc6
IC
6951 source.on('error', onerror);
6952 dest.on('error', onerror);
ebd8d4e8 6953
ab78acc6
IC
6954 // remove all the event listeners that were added.
6955 function cleanup() {
6956 source.removeListener('data', ondata);
6957 dest.removeListener('drain', ondrain);
ebd8d4e8 6958
ab78acc6
IC
6959 source.removeListener('end', onend);
6960 source.removeListener('close', onclose);
6961
6962 source.removeListener('error', onerror);
6963 dest.removeListener('error', onerror);
6964
6965 source.removeListener('end', cleanup);
6966 source.removeListener('close', cleanup);
6967
6968 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6969 }
6970
ab78acc6
IC
6971 source.on('end', cleanup);
6972 source.on('close', cleanup);
ebd8d4e8 6973
ab78acc6 6974 dest.on('close', cleanup);
ebd8d4e8 6975
ab78acc6 6976 dest.emit('pipe', source);
ebd8d4e8 6977
ab78acc6
IC
6978 // Allow for unix-like usage: A.pipe(B).pipe(C)
6979 return dest;
6980};
ebd8d4e8 6981
ab78acc6
IC
6982},{"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){
6983// Copyright Joyent, Inc. and other Node contributors.
6984//
6985// Permission is hereby granted, free of charge, to any person obtaining a
6986// copy of this software and associated documentation files (the
6987// "Software"), to deal in the Software without restriction, including
6988// without limitation the rights to use, copy, modify, merge, publish,
6989// distribute, sublicense, and/or sell copies of the Software, and to permit
6990// persons to whom the Software is furnished to do so, subject to the
6991// following conditions:
6992//
6993// The above copyright notice and this permission notice shall be included
6994// in all copies or substantial portions of the Software.
6995//
6996// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6997// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6998// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6999// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7000// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7001// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7002// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7003
ab78acc6 7004var Buffer = require('buffer').Buffer;
ebd8d4e8 7005
ab78acc6
IC
7006var isBufferEncoding = Buffer.isEncoding
7007 || function(encoding) {
7008 switch (encoding && encoding.toLowerCase()) {
7009 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;
7010 default: return false;
7011 }
7012 }
ebd8d4e8 7013
ebd8d4e8 7014
ab78acc6
IC
7015function assertEncoding(encoding) {
7016 if (encoding && !isBufferEncoding(encoding)) {
7017 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 7018 }
ebd8d4e8
IC
7019}
7020
ab78acc6
IC
7021// StringDecoder provides an interface for efficiently splitting a series of
7022// buffers into a series of JS strings without breaking apart multi-byte
7023// characters. CESU-8 is handled as part of the UTF-8 encoding.
7024//
7025// @TODO Handling all encodings inside a single object makes it very difficult
7026// to reason about this code, so it should be split up in the future.
7027// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7028// points as used by CESU-8.
7029var StringDecoder = exports.StringDecoder = function(encoding) {
7030 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7031 assertEncoding(encoding);
7032 switch (this.encoding) {
7033 case 'utf8':
7034 // CESU-8 represents each of Surrogate Pair by 3-bytes
7035 this.surrogateSize = 3;
7036 break;
7037 case 'ucs2':
7038 case 'utf16le':
7039 // UTF-16 represents each of Surrogate Pair by 2-bytes
7040 this.surrogateSize = 2;
7041 this.detectIncompleteChar = utf16DetectIncompleteChar;
7042 break;
7043 case 'base64':
7044 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7045 this.surrogateSize = 3;
7046 this.detectIncompleteChar = base64DetectIncompleteChar;
7047 break;
7048 default:
7049 this.write = passThroughWrite;
7050 return;
7051 }
ebd8d4e8 7052
ab78acc6
IC
7053 // Enough space to store all bytes of a single character. UTF-8 needs 4
7054 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7055 this.charBuffer = new Buffer(6);
7056 // Number of bytes received for the current incomplete multi-byte character.
7057 this.charReceived = 0;
7058 // Number of bytes expected for the current incomplete multi-byte character.
7059 this.charLength = 0;
7060};
ebd8d4e8 7061
ebd8d4e8 7062
ab78acc6
IC
7063// write decodes the given buffer and returns it as JS string that is
7064// guaranteed to not contain any partial multi-byte characters. Any partial
7065// character found at the end of the buffer is buffered up, and will be
7066// returned when calling write again with the remaining bytes.
7067//
7068// Note: Converting a Buffer containing an orphan surrogate to a String
7069// currently works, but converting a String to a Buffer (via `new Buffer`, or
7070// Buffer#write) will replace incomplete surrogates with the unicode
7071// replacement character. See https://codereview.chromium.org/121173009/ .
7072StringDecoder.prototype.write = function(buffer) {
7073 var charStr = '';
7074 // if our last write ended with an incomplete multibyte character
7075 while (this.charLength) {
7076 // determine how many remaining bytes this buffer has to offer for this char
7077 var available = (buffer.length >= this.charLength - this.charReceived) ?
7078 this.charLength - this.charReceived :
7079 buffer.length;
7080
7081 // add the new bytes to the char buffer
7082 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7083 this.charReceived += available;
7084
7085 if (this.charReceived < this.charLength) {
7086 // still not enough chars in this buffer? wait for more ...
7087 return '';
7088 }
7089
7090 // remove bytes belonging to the current character from the buffer
7091 buffer = buffer.slice(available, buffer.length);
7092
7093 // get the character that was split
7094 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7095
7096 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7097 var charCode = charStr.charCodeAt(charStr.length - 1);
7098 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7099 this.charLength += this.surrogateSize;
7100 charStr = '';
7101 continue;
7102 }
7103 this.charReceived = this.charLength = 0;
ebd8d4e8 7104
ab78acc6
IC
7105 // if there are no more bytes in this buffer, just emit our char
7106 if (buffer.length === 0) {
7107 return charStr;
7108 }
7109 break;
ebd8d4e8 7110 }
ebd8d4e8 7111
ab78acc6
IC
7112 // determine and set charLength / charReceived
7113 this.detectIncompleteChar(buffer);
ebd8d4e8 7114
ab78acc6
IC
7115 var end = buffer.length;
7116 if (this.charLength) {
7117 // buffer the incomplete character bytes we got
7118 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7119 end -= this.charReceived;
ebd8d4e8
IC
7120 }
7121
ab78acc6 7122 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7123
ab78acc6
IC
7124 var end = charStr.length - 1;
7125 var charCode = charStr.charCodeAt(end);
7126 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7127 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7128 var size = this.surrogateSize;
7129 this.charLength += size;
7130 this.charReceived += size;
7131 this.charBuffer.copy(this.charBuffer, size, 0, size);
7132 buffer.copy(this.charBuffer, 0, 0, size);
7133 return charStr.substring(0, end);
ebd8d4e8
IC
7134 }
7135
ab78acc6
IC
7136 // or just emit the charStr
7137 return charStr;
7138};
ebd8d4e8 7139
ab78acc6
IC
7140// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7141// the end of the given buffer. If so, it sets this.charLength to the byte
7142// length that character, and sets this.charReceived to the number of bytes
7143// that are available for this character.
7144StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7145 // determine how many bytes we have to check at the end of this buffer
7146 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7147
ab78acc6
IC
7148 // Figure out if one of the last i bytes of our buffer announces an
7149 // incomplete char.
7150 for (; i > 0; i--) {
7151 var c = buffer[buffer.length - i];
ebd8d4e8 7152
ab78acc6 7153 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7154
ab78acc6
IC
7155 // 110XXXXX
7156 if (i == 1 && c >> 5 == 0x06) {
7157 this.charLength = 2;
7158 break;
7159 }
ebd8d4e8 7160
ab78acc6
IC
7161 // 1110XXXX
7162 if (i <= 2 && c >> 4 == 0x0E) {
7163 this.charLength = 3;
7164 break;
7165 }
ebd8d4e8 7166
ab78acc6
IC
7167 // 11110XXX
7168 if (i <= 3 && c >> 3 == 0x1E) {
7169 this.charLength = 4;
7170 break;
7171 }
7172 }
7173 this.charReceived = i;
7174};
ebd8d4e8 7175
ab78acc6
IC
7176StringDecoder.prototype.end = function(buffer) {
7177 var res = '';
7178 if (buffer && buffer.length)
7179 res = this.write(buffer);
ebd8d4e8 7180
ab78acc6
IC
7181 if (this.charReceived) {
7182 var cr = this.charReceived;
7183 var buf = this.charBuffer;
7184 var enc = this.encoding;
7185 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7186 }
7187
ab78acc6
IC
7188 return res;
7189};
ebd8d4e8 7190
ab78acc6
IC
7191function passThroughWrite(buffer) {
7192 return buffer.toString(this.encoding);
ebd8d4e8
IC
7193}
7194
ab78acc6
IC
7195function utf16DetectIncompleteChar(buffer) {
7196 this.charReceived = buffer.length % 2;
7197 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7198}
7199
ab78acc6
IC
7200function base64DetectIncompleteChar(buffer) {
7201 this.charReceived = buffer.length % 3;
7202 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7203}
7204
ab78acc6
IC
7205},{"buffer":7}],28:[function(require,module,exports){
7206module.exports = function isBuffer(arg) {
7207 return arg && typeof arg === 'object'
7208 && typeof arg.copy === 'function'
7209 && typeof arg.fill === 'function'
7210 && typeof arg.readUInt8 === 'function';
7211}
7212},{}],29:[function(require,module,exports){
7213(function (process,global){
7214// Copyright Joyent, Inc. and other Node contributors.
7215//
7216// Permission is hereby granted, free of charge, to any person obtaining a
7217// copy of this software and associated documentation files (the
7218// "Software"), to deal in the Software without restriction, including
7219// without limitation the rights to use, copy, modify, merge, publish,
7220// distribute, sublicense, and/or sell copies of the Software, and to permit
7221// persons to whom the Software is furnished to do so, subject to the
7222// following conditions:
7223//
7224// The above copyright notice and this permission notice shall be included
7225// in all copies or substantial portions of the Software.
7226//
7227// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7228// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7229// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7230// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7231// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7232// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7233// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7234
ab78acc6
IC
7235var formatRegExp = /%[sdj%]/g;
7236exports.format = function(f) {
7237 if (!isString(f)) {
7238 var objects = [];
7239 for (var i = 0; i < arguments.length; i++) {
7240 objects.push(inspect(arguments[i]));
7241 }
7242 return objects.join(' ');
7243 }
ebd8d4e8 7244
ab78acc6
IC
7245 var i = 1;
7246 var args = arguments;
7247 var len = args.length;
7248 var str = String(f).replace(formatRegExp, function(x) {
7249 if (x === '%%') return '%';
7250 if (i >= len) return x;
7251 switch (x) {
7252 case '%s': return String(args[i++]);
7253 case '%d': return Number(args[i++]);
7254 case '%j':
7255 try {
7256 return JSON.stringify(args[i++]);
7257 } catch (_) {
7258 return '[Circular]';
7259 }
7260 default:
7261 return x;
7262 }
7263 });
7264 for (var x = args[i]; i < len; x = args[++i]) {
7265 if (isNull(x) || !isObject(x)) {
7266 str += ' ' + x;
7267 } else {
7268 str += ' ' + inspect(x);
7269 }
7270 }
7271 return str;
7272};
ebd8d4e8 7273
ebd8d4e8 7274
ab78acc6
IC
7275// Mark that a method should not be used.
7276// Returns a modified function which warns once by default.
7277// If --no-deprecation is set, then it is a no-op.
7278exports.deprecate = function(fn, msg) {
7279 // Allow for deprecating things in the process of starting up.
7280 if (isUndefined(global.process)) {
7281 return function() {
7282 return exports.deprecate(fn, msg).apply(this, arguments);
7283 };
7284 }
ebd8d4e8 7285
ab78acc6
IC
7286 if (process.noDeprecation === true) {
7287 return fn;
7288 }
ebd8d4e8 7289
ab78acc6
IC
7290 var warned = false;
7291 function deprecated() {
7292 if (!warned) {
7293 if (process.throwDeprecation) {
7294 throw new Error(msg);
7295 } else if (process.traceDeprecation) {
7296 console.trace(msg);
7297 } else {
7298 console.error(msg);
7299 }
7300 warned = true;
7301 }
7302 return fn.apply(this, arguments);
7303 }
ebd8d4e8 7304
ab78acc6
IC
7305 return deprecated;
7306};
ebd8d4e8 7307
ebd8d4e8 7308
ab78acc6
IC
7309var debugs = {};
7310var debugEnviron;
7311exports.debuglog = function(set) {
7312 if (isUndefined(debugEnviron))
7313 debugEnviron = process.env.NODE_DEBUG || '';
7314 set = set.toUpperCase();
7315 if (!debugs[set]) {
7316 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7317 var pid = process.pid;
7318 debugs[set] = function() {
7319 var msg = exports.format.apply(exports, arguments);
7320 console.error('%s %d: %s', set, pid, msg);
7321 };
7322 } else {
7323 debugs[set] = function() {};
ebd8d4e8
IC
7324 }
7325 }
ab78acc6
IC
7326 return debugs[set];
7327};
ebd8d4e8 7328
ebd8d4e8
IC
7329
7330/**
ab78acc6
IC
7331 * Echos the value of a value. Trys to print the value out
7332 * in the best way possible given the different types.
7333 *
7334 * @param {Object} obj The object to print out.
7335 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7336 */
ab78acc6
IC
7337/* legacy: obj, showHidden, depth, colors*/
7338function inspect(obj, opts) {
7339 // default options
7340 var ctx = {
7341 seen: [],
7342 stylize: stylizeNoColor
7343 };
7344 // legacy...
7345 if (arguments.length >= 3) ctx.depth = arguments[2];
7346 if (arguments.length >= 4) ctx.colors = arguments[3];
7347 if (isBoolean(opts)) {
7348 // legacy...
7349 ctx.showHidden = opts;
7350 } else if (opts) {
7351 // got an "options" object
7352 exports._extend(ctx, opts);
ebd8d4e8 7353 }
ab78acc6
IC
7354 // set default options
7355 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7356 if (isUndefined(ctx.depth)) ctx.depth = 2;
7357 if (isUndefined(ctx.colors)) ctx.colors = false;
7358 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7359 if (ctx.colors) ctx.stylize = stylizeWithColor;
7360 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7361}
ab78acc6 7362exports.inspect = inspect;
ebd8d4e8 7363
ebd8d4e8 7364
ab78acc6
IC
7365// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7366inspect.colors = {
7367 'bold' : [1, 22],
7368 'italic' : [3, 23],
7369 'underline' : [4, 24],
7370 'inverse' : [7, 27],
7371 'white' : [37, 39],
7372 'grey' : [90, 39],
7373 'black' : [30, 39],
7374 'blue' : [34, 39],
7375 'cyan' : [36, 39],
7376 'green' : [32, 39],
7377 'magenta' : [35, 39],
7378 'red' : [31, 39],
7379 'yellow' : [33, 39]
7380};
ebd8d4e8 7381
ab78acc6
IC
7382// Don't use 'blue' not visible on cmd.exe
7383inspect.styles = {
7384 'special': 'cyan',
7385 'number': 'yellow',
7386 'boolean': 'yellow',
7387 'undefined': 'grey',
7388 'null': 'bold',
7389 'string': 'green',
7390 'date': 'magenta',
7391 // "name": intentionally not styling
7392 'regexp': 'red'
7393};
ebd8d4e8 7394
ebd8d4e8 7395
ab78acc6
IC
7396function stylizeWithColor(str, styleType) {
7397 var style = inspect.styles[styleType];
ebd8d4e8 7398
ab78acc6
IC
7399 if (style) {
7400 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7401 '\u001b[' + inspect.colors[style][1] + 'm';
7402 } else {
7403 return str;
ebd8d4e8 7404 }
ebd8d4e8
IC
7405}
7406
ebd8d4e8 7407
ab78acc6
IC
7408function stylizeNoColor(str, styleType) {
7409 return str;
ebd8d4e8
IC
7410}
7411
ebd8d4e8 7412
ab78acc6
IC
7413function arrayToHash(array) {
7414 var hash = {};
ebd8d4e8 7415
ab78acc6
IC
7416 array.forEach(function(val, idx) {
7417 hash[val] = true;
7418 });
ebd8d4e8 7419
ab78acc6 7420 return hash;
ebd8d4e8
IC
7421}
7422
ebd8d4e8 7423
ab78acc6
IC
7424function formatValue(ctx, value, recurseTimes) {
7425 // Provide a hook for user-specified inspect functions.
7426 // Check that value is an object with an inspect function on it
7427 if (ctx.customInspect &&
7428 value &&
7429 isFunction(value.inspect) &&
7430 // Filter out the util module, it's inspect function is special
7431 value.inspect !== exports.inspect &&
7432 // Also filter out any prototype objects using the circular check.
7433 !(value.constructor && value.constructor.prototype === value)) {
7434 var ret = value.inspect(recurseTimes, ctx);
7435 if (!isString(ret)) {
7436 ret = formatValue(ctx, ret, recurseTimes);
7437 }
7438 return ret;
ebd8d4e8 7439 }
ebd8d4e8 7440
ab78acc6
IC
7441 // Primitive types cannot have properties
7442 var primitive = formatPrimitive(ctx, value);
7443 if (primitive) {
7444 return primitive;
ebd8d4e8
IC
7445 }
7446
ab78acc6
IC
7447 // Look up the keys of the object.
7448 var keys = Object.keys(value);
7449 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7450
ab78acc6
IC
7451 if (ctx.showHidden) {
7452 keys = Object.getOwnPropertyNames(value);
7453 }
ebd8d4e8 7454
ab78acc6
IC
7455 // IE doesn't make error fields non-enumerable
7456 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7457 if (isError(value)
7458 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7459 return formatError(value);
ebd8d4e8 7460 }
ebd8d4e8 7461
ab78acc6
IC
7462 // Some type of object without properties can be shortcutted.
7463 if (keys.length === 0) {
7464 if (isFunction(value)) {
7465 var name = value.name ? ': ' + value.name : '';
7466 return ctx.stylize('[Function' + name + ']', 'special');
7467 }
7468 if (isRegExp(value)) {
7469 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7470 }
7471 if (isDate(value)) {
7472 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7473 }
7474 if (isError(value)) {
7475 return formatError(value);
7476 }
ebd8d4e8 7477 }
ebd8d4e8 7478
ab78acc6 7479 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7480
ab78acc6
IC
7481 // Make Array say that they are Array
7482 if (isArray(value)) {
7483 array = true;
7484 braces = ['[', ']'];
7485 }
ebd8d4e8 7486
ab78acc6
IC
7487 // Make functions say that they are functions
7488 if (isFunction(value)) {
7489 var n = value.name ? ': ' + value.name : '';
7490 base = ' [Function' + n + ']';
7491 }
ebd8d4e8 7492
ab78acc6
IC
7493 // Make RegExps say that they are RegExps
7494 if (isRegExp(value)) {
7495 base = ' ' + RegExp.prototype.toString.call(value);
7496 }
ebd8d4e8 7497
ab78acc6
IC
7498 // Make dates with properties first say the date
7499 if (isDate(value)) {
7500 base = ' ' + Date.prototype.toUTCString.call(value);
7501 }
ebd8d4e8 7502
ab78acc6
IC
7503 // Make error with message first say the error
7504 if (isError(value)) {
7505 base = ' ' + formatError(value);
7506 }
ebd8d4e8 7507
ab78acc6
IC
7508 if (keys.length === 0 && (!array || value.length == 0)) {
7509 return braces[0] + base + braces[1];
7510 }
ebd8d4e8 7511
ab78acc6
IC
7512 if (recurseTimes < 0) {
7513 if (isRegExp(value)) {
7514 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7515 } else {
7516 return ctx.stylize('[Object]', 'special');
7517 }
7518 }
ebd8d4e8 7519
ab78acc6 7520 ctx.seen.push(value);
ebd8d4e8 7521
ab78acc6
IC
7522 var output;
7523 if (array) {
7524 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7525 } else {
7526 output = keys.map(function(key) {
7527 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7528 });
7529 }
ebd8d4e8 7530
ab78acc6 7531 ctx.seen.pop();
ebd8d4e8 7532
ab78acc6
IC
7533 return reduceToSingleString(output, base, braces);
7534}
ebd8d4e8 7535
ebd8d4e8 7536
ab78acc6
IC
7537function formatPrimitive(ctx, value) {
7538 if (isUndefined(value))
7539 return ctx.stylize('undefined', 'undefined');
7540 if (isString(value)) {
7541 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7542 .replace(/'/g, "\\'")
7543 .replace(/\\"/g, '"') + '\'';
7544 return ctx.stylize(simple, 'string');
7545 }
7546 if (isNumber(value))
7547 return ctx.stylize('' + value, 'number');
7548 if (isBoolean(value))
7549 return ctx.stylize('' + value, 'boolean');
7550 // For some reason typeof null is "object", so special case here.
7551 if (isNull(value))
7552 return ctx.stylize('null', 'null');
7553}
ebd8d4e8 7554
ebd8d4e8 7555
ab78acc6
IC
7556function formatError(value) {
7557 return '[' + Error.prototype.toString.call(value) + ']';
7558}
ebd8d4e8 7559
ebd8d4e8 7560
ab78acc6
IC
7561function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7562 var output = [];
7563 for (var i = 0, l = value.length; i < l; ++i) {
7564 if (hasOwnProperty(value, String(i))) {
7565 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7566 String(i), true));
7567 } else {
7568 output.push('');
7569 }
7570 }
7571 keys.forEach(function(key) {
7572 if (!key.match(/^\d+$/)) {
7573 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7574 key, true));
7575 }
7576 });
7577 return output;
7578}
ebd8d4e8 7579
ebd8d4e8 7580
ab78acc6
IC
7581function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7582 var name, str, desc;
7583 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7584 if (desc.get) {
7585 if (desc.set) {
7586 str = ctx.stylize('[Getter/Setter]', 'special');
7587 } else {
7588 str = ctx.stylize('[Getter]', 'special');
7589 }
7590 } else {
7591 if (desc.set) {
7592 str = ctx.stylize('[Setter]', 'special');
7593 }
7594 }
7595 if (!hasOwnProperty(visibleKeys, key)) {
7596 name = '[' + key + ']';
7597 }
7598 if (!str) {
7599 if (ctx.seen.indexOf(desc.value) < 0) {
7600 if (isNull(recurseTimes)) {
7601 str = formatValue(ctx, desc.value, null);
7602 } else {
7603 str = formatValue(ctx, desc.value, recurseTimes - 1);
7604 }
7605 if (str.indexOf('\n') > -1) {
7606 if (array) {
7607 str = str.split('\n').map(function(line) {
7608 return ' ' + line;
7609 }).join('\n').substr(2);
7610 } else {
7611 str = '\n' + str.split('\n').map(function(line) {
7612 return ' ' + line;
7613 }).join('\n');
7614 }
7615 }
7616 } else {
7617 str = ctx.stylize('[Circular]', 'special');
7618 }
7619 }
7620 if (isUndefined(name)) {
7621 if (array && key.match(/^\d+$/)) {
7622 return str;
7623 }
7624 name = JSON.stringify('' + key);
7625 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7626 name = name.substr(1, name.length - 2);
7627 name = ctx.stylize(name, 'name');
7628 } else {
7629 name = name.replace(/'/g, "\\'")
7630 .replace(/\\"/g, '"')
7631 .replace(/(^"|"$)/g, "'");
7632 name = ctx.stylize(name, 'string');
7633 }
7634 }
ebd8d4e8 7635
ab78acc6
IC
7636 return name + ': ' + str;
7637}
ebd8d4e8 7638
ebd8d4e8 7639
ab78acc6
IC
7640function reduceToSingleString(output, base, braces) {
7641 var numLinesEst = 0;
7642 var length = output.reduce(function(prev, cur) {
7643 numLinesEst++;
7644 if (cur.indexOf('\n') >= 0) numLinesEst++;
7645 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7646 }, 0);
ebd8d4e8 7647
ab78acc6
IC
7648 if (length > 60) {
7649 return braces[0] +
7650 (base === '' ? '' : base + '\n ') +
7651 ' ' +
7652 output.join(',\n ') +
7653 ' ' +
7654 braces[1];
7655 }
ebd8d4e8 7656
ab78acc6
IC
7657 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7658}
ebd8d4e8 7659
ebd8d4e8 7660
ab78acc6
IC
7661// NOTE: These type checking functions intentionally don't use `instanceof`
7662// because it is fragile and can be easily faked with `Object.create()`.
7663function isArray(ar) {
7664 return Array.isArray(ar);
7665}
7666exports.isArray = isArray;
ebd8d4e8 7667
ab78acc6
IC
7668function isBoolean(arg) {
7669 return typeof arg === 'boolean';
7670}
7671exports.isBoolean = isBoolean;
ebd8d4e8 7672
ab78acc6
IC
7673function isNull(arg) {
7674 return arg === null;
7675}
7676exports.isNull = isNull;
ebd8d4e8 7677
ab78acc6
IC
7678function isNullOrUndefined(arg) {
7679 return arg == null;
7680}
7681exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7682
ab78acc6
IC
7683function isNumber(arg) {
7684 return typeof arg === 'number';
7685}
7686exports.isNumber = isNumber;
ebd8d4e8 7687
ab78acc6
IC
7688function isString(arg) {
7689 return typeof arg === 'string';
7690}
7691exports.isString = isString;
ebd8d4e8 7692
ab78acc6
IC
7693function isSymbol(arg) {
7694 return typeof arg === 'symbol';
7695}
7696exports.isSymbol = isSymbol;
ebd8d4e8 7697
ab78acc6
IC
7698function isUndefined(arg) {
7699 return arg === void 0;
7700}
7701exports.isUndefined = isUndefined;
ebd8d4e8 7702
ab78acc6
IC
7703function isRegExp(re) {
7704 return isObject(re) && objectToString(re) === '[object RegExp]';
7705}
7706exports.isRegExp = isRegExp;
ebd8d4e8 7707
ab78acc6
IC
7708function isObject(arg) {
7709 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7710}
ab78acc6 7711exports.isObject = isObject;
ebd8d4e8 7712
ab78acc6
IC
7713function isDate(d) {
7714 return isObject(d) && objectToString(d) === '[object Date]';
7715}
7716exports.isDate = isDate;
ebd8d4e8 7717
ab78acc6
IC
7718function isError(e) {
7719 return isObject(e) &&
7720 (objectToString(e) === '[object Error]' || e instanceof Error);
7721}
7722exports.isError = isError;
ebd8d4e8 7723
ab78acc6
IC
7724function isFunction(arg) {
7725 return typeof arg === 'function';
7726}
7727exports.isFunction = isFunction;
ebd8d4e8 7728
ab78acc6
IC
7729function isPrimitive(arg) {
7730 return arg === null ||
7731 typeof arg === 'boolean' ||
7732 typeof arg === 'number' ||
7733 typeof arg === 'string' ||
7734 typeof arg === 'symbol' || // ES6 symbol
7735 typeof arg === 'undefined';
7736}
7737exports.isPrimitive = isPrimitive;
ebd8d4e8 7738
ab78acc6 7739exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7740
ab78acc6
IC
7741function objectToString(o) {
7742 return Object.prototype.toString.call(o);
7743}
ebd8d4e8 7744
ebd8d4e8 7745
ab78acc6
IC
7746function pad(n) {
7747 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7748}
ebd8d4e8 7749
ebd8d4e8 7750
ab78acc6
IC
7751var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7752 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7753
ab78acc6
IC
7754// 26 Feb 16:19:34
7755function timestamp() {
7756 var d = new Date();
7757 var time = [pad(d.getHours()),
7758 pad(d.getMinutes()),
7759 pad(d.getSeconds())].join(':');
7760 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7761}
7762
ab78acc6
IC
7763
7764// log is just a thin wrapper to console.log that prepends a timestamp
7765exports.log = function() {
7766 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7767};
7768
ab78acc6
IC
7769
7770/**
7771 * Inherit the prototype methods from one constructor into another.
7772 *
7773 * The Function.prototype.inherits from lang.js rewritten as a standalone
7774 * function (not on Function.prototype). NOTE: If this file is to be loaded
7775 * during bootstrapping this function needs to be rewritten using some native
7776 * functions as prototype setup using normal JavaScript does not work as
7777 * expected during bootstrapping (see mirror.js in r114903).
7778 *
7779 * @param {function} ctor Constructor function which needs to inherit the
7780 * prototype.
7781 * @param {function} superCtor Constructor function to inherit prototype from.
7782 */
7783exports.inherits = require('inherits');
7784
7785exports._extend = function(origin, add) {
7786 // Don't do anything if add isn't an object
7787 if (!add || !isObject(add)) return origin;
7788
7789 var keys = Object.keys(add);
7790 var i = keys.length;
7791 while (i--) {
7792 origin[keys[i]] = add[keys[i]];
7793 }
7794 return origin;
7795};
7796
7797function hasOwnProperty(obj, prop) {
7798 return Object.prototype.hasOwnProperty.call(obj, prop);
7799}
7800
7801}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7802},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7803// Base58 encoding/decoding
7804// Originally written by Mike Hearn for BitcoinJ
7805// Copyright (c) 2011 Google Inc
7806// Ported to JavaScript by Stefan Thomas
7807// Merged Buffer refactorings from base58-native by Stephen Pair
7808// Copyright (c) 2013 BitPay Inc
7809
ebd8d4e8 7810var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7811var ALPHABET_MAP = {}
7812for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7813 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7814}
ab78acc6 7815var BASE = 58
ebd8d4e8
IC
7816
7817function encode(buffer) {
ab78acc6
IC
7818 if (buffer.length === 0) return ''
7819
7820 var i, j, digits = [0]
7821 for (i = 0; i < buffer.length; i++) {
7822 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7823
7824 digits[0] += buffer[i]
ebd8d4e8 7825
ab78acc6
IC
7826 var carry = 0
7827 for (j = 0; j < digits.length; ++j) {
7828 digits[j] += carry
ebd8d4e8 7829
ab78acc6
IC
7830 carry = (digits[j] / BASE) | 0
7831 digits[j] %= BASE
7832 }
7833
7834 while (carry) {
7835 digits.push(carry % BASE)
7836
7837 carry = (carry / BASE) | 0
7838 }
ebd8d4e8
IC
7839 }
7840
7841 // deal with leading zeros
ab78acc6 7842 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7843
ab78acc6
IC
7844 // convert digits to a string
7845 var stringOutput = ""
7846 for (var i = digits.length - 1; i >= 0; i--) {
7847 stringOutput = stringOutput + ALPHABET[digits[i]]
7848 }
7849 return stringOutput
ebd8d4e8
IC
7850}
7851
7852function decode(string) {
ab78acc6 7853 if (string.length === 0) return []
ebd8d4e8 7854
ab78acc6
IC
7855 var i, j, bytes = [0]
7856 for (i = 0; i < string.length; i++) {
7857 var c = string[i]
7858 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7859
ab78acc6
IC
7860 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7861 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7862
ab78acc6
IC
7863 var carry = 0
7864 for (j = 0; j < bytes.length; ++j) {
7865 bytes[j] += carry
ebd8d4e8 7866
ab78acc6
IC
7867 carry = bytes[j] >> 8
7868 bytes[j] &= 0xff
7869 }
ebd8d4e8 7870
ab78acc6
IC
7871 while (carry) {
7872 bytes.push(carry & 0xff)
7873
7874 carry >>= 8
7875 }
ebd8d4e8
IC
7876 }
7877
ab78acc6
IC
7878 // deal with leading zeros
7879 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7880
ab78acc6 7881 return bytes.reverse()
ebd8d4e8
IC
7882}
7883
7884module.exports = {
7885 encode: encode,
7886 decode: decode
7887}
7888
ab78acc6 7889},{}],31:[function(require,module,exports){
ebd8d4e8 7890(function (Buffer){
ab78acc6
IC
7891'use strict'
7892
7893var base58 = require('bs58')
7894var createHash = require('create-hash')
7895
7896// SHA256(SHA256(buffer))
7897function sha256x2 (buffer) {
7898 buffer = createHash('sha256').update(buffer).digest()
7899 return createHash('sha256').update(buffer).digest()
7900}
7901
7902// Encode a buffer as a base58-check encoded string
7903function encode (payload) {
7904 var checksum = sha256x2(payload).slice(0, 4)
7905
7906 return base58.encode(Buffer.concat([
7907 payload,
7908 checksum
7909 ]))
7910}
7911
7912// Decode a base58-check encoded string to a buffer
7913function decode (string) {
7914 var buffer = new Buffer(base58.decode(string))
7915
7916 var payload = buffer.slice(0, -4)
7917 var checksum = buffer.slice(-4)
7918 var newChecksum = sha256x2(payload).slice(0, 4)
7919
7920 for (var i = 0; i < newChecksum.length; ++i) {
7921 if (newChecksum[i] === checksum[i]) continue
7922
7923 throw new Error('Invalid checksum')
ebd8d4e8 7924 }
ab78acc6
IC
7925
7926 return payload
ebd8d4e8
IC
7927}
7928
ab78acc6
IC
7929module.exports = {
7930 encode: encode,
7931 decode: decode
ebd8d4e8
IC
7932}
7933
ab78acc6
IC
7934}).call(this,require("buffer").Buffer)
7935},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7936(function (Buffer){
ab78acc6
IC
7937'use strict';
7938var inherits = require('inherits')
7939var md5 = require('./md5')
7940var rmd160 = require('ripemd160')
7941var sha = require('sha.js')
ebd8d4e8 7942
ab78acc6 7943var Transform = require('stream').Transform
ebd8d4e8 7944
ab78acc6
IC
7945function HashNoConstructor(hash) {
7946 Transform.call(this)
ebd8d4e8 7947
ab78acc6
IC
7948 this._hash = hash
7949 this.buffers = []
7950}
ebd8d4e8 7951
ab78acc6 7952inherits(HashNoConstructor, Transform)
ebd8d4e8 7953
ab78acc6
IC
7954HashNoConstructor.prototype._transform = function (data, _, next) {
7955 this.buffers.push(data)
ebd8d4e8 7956
ab78acc6
IC
7957 next()
7958}
ebd8d4e8 7959
ab78acc6
IC
7960HashNoConstructor.prototype._flush = function (next) {
7961 this.push(this.digest())
7962 next()
7963}
7964
7965HashNoConstructor.prototype.update = function (data, enc) {
7966 if (typeof data === 'string') {
7967 data = new Buffer(data, enc)
ebd8d4e8
IC
7968 }
7969
ab78acc6
IC
7970 this.buffers.push(data)
7971 return this
7972}
7973
7974HashNoConstructor.prototype.digest = function (enc) {
7975 var buf = Buffer.concat(this.buffers)
7976 var r = this._hash(buf)
7977 this.buffers = null
7978
7979 return enc ? r.toString(enc) : r
7980}
7981
7982function Hash(hash) {
7983 Transform.call(this)
7984
7985 this._hash = hash
7986}
7987
7988inherits(Hash, Transform)
7989
7990Hash.prototype._transform = function (data, enc, next) {
7991 if (enc) data = new Buffer(data, enc)
7992
7993 this._hash.update(data)
7994
7995 next()
ebd8d4e8
IC
7996}
7997
ab78acc6
IC
7998Hash.prototype._flush = function (next) {
7999 this.push(this._hash.digest())
8000 this._hash = null
8001
8002 next()
8003}
8004
8005Hash.prototype.update = function (data, enc) {
8006 if (typeof data === 'string') {
8007 data = new Buffer(data, enc)
8008 }
8009
8010 this._hash.update(data)
ebd8d4e8
IC
8011 return this
8012}
8013
ab78acc6
IC
8014Hash.prototype.digest = function (enc) {
8015 var outData = this._hash.digest()
8016
8017 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
8018}
8019
ab78acc6
IC
8020module.exports = function createHash (alg) {
8021 if ('md5' === alg) return new HashNoConstructor(md5)
8022 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8023
8024 return new Hash(sha(alg))
8025}
ebd8d4e8 8026
ab78acc6
IC
8027}).call(this,require("buffer").Buffer)
8028},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 8029(function (Buffer){
ab78acc6 8030'use strict';
ebd8d4e8
IC
8031var intSize = 4;
8032var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8033var chrsz = 8;
8034
8035function toArray(buf, bigEndian) {
8036 if ((buf.length % intSize) !== 0) {
8037 var len = buf.length + (intSize - (buf.length % intSize));
8038 buf = Buffer.concat([buf, zeroBuffer], len);
8039 }
8040
8041 var arr = [];
8042 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8043 for (var i = 0; i < buf.length; i += intSize) {
8044 arr.push(fn.call(buf, i));
8045 }
8046 return arr;
8047}
8048
8049function toBuffer(arr, size, bigEndian) {
8050 var buf = new Buffer(size);
8051 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8052 for (var i = 0; i < arr.length; i++) {
8053 fn.call(buf, arr[i], i * 4, true);
8054 }
8055 return buf;
8056}
8057
8058function hash(buf, fn, hashSize, bigEndian) {
8059 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8060 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8061 return toBuffer(arr, hashSize, bigEndian);
8062}
ab78acc6
IC
8063exports.hash = hash;
8064}).call(this,require("buffer").Buffer)
8065},{"buffer":7}],34:[function(require,module,exports){
8066'use strict';
ebd8d4e8
IC
8067/*
8068 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8069 * Digest Algorithm, as defined in RFC 1321.
8070 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8071 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8072 * Distributed under the BSD License
8073 * See http://pajhome.org.uk/crypt/md5 for more info.
8074 */
8075
ab78acc6 8076var helpers = require('./helpers');
ebd8d4e8
IC
8077
8078/*
8079 * Calculate the MD5 of an array of little-endian words, and a bit length
8080 */
8081function core_md5(x, len)
8082{
8083 /* append padding */
8084 x[len >> 5] |= 0x80 << ((len) % 32);
8085 x[(((len + 64) >>> 9) << 4) + 14] = len;
8086
8087 var a = 1732584193;
8088 var b = -271733879;
8089 var c = -1732584194;
8090 var d = 271733878;
8091
8092 for(var i = 0; i < x.length; i += 16)
8093 {
8094 var olda = a;
8095 var oldb = b;
8096 var oldc = c;
8097 var oldd = d;
8098
8099 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8100 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8101 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8102 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8103 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8104 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8105 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8106 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8107 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8108 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8109 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8110 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8111 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8112 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8113 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8114 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8115
8116 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8117 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8118 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8119 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8120 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8121 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8122 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8123 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8124 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8125 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8126 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8127 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8128 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8129 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8130 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8131 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8132
8133 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8134 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8135 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8136 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8137 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8138 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8139 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8140 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8141 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8142 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8143 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8144 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8145 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8146 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8147 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8148 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8149
8150 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8151 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8152 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8153 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8154 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8155 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8156 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8157 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8158 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8159 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8160 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8161 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8162 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8163 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8164 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8165 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8166
8167 a = safe_add(a, olda);
8168 b = safe_add(b, oldb);
8169 c = safe_add(c, oldc);
8170 d = safe_add(d, oldd);
8171 }
8172 return Array(a, b, c, d);
8173
8174}
8175
8176/*
8177 * These functions implement the four basic operations the algorithm uses.
8178 */
8179function md5_cmn(q, a, b, x, s, t)
8180{
8181 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8182}
8183function md5_ff(a, b, c, d, x, s, t)
8184{
8185 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8186}
8187function md5_gg(a, b, c, d, x, s, t)
8188{
8189 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8190}
8191function md5_hh(a, b, c, d, x, s, t)
8192{
8193 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8194}
8195function md5_ii(a, b, c, d, x, s, t)
8196{
8197 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8198}
8199
8200/*
8201 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8202 * to work around bugs in some JS interpreters.
8203 */
8204function safe_add(x, y)
8205{
8206 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8207 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8208 return (msw << 16) | (lsw & 0xFFFF);
8209}
8210
8211/*
8212 * Bitwise rotate a 32-bit number to the left.
8213 */
8214function bit_rol(num, cnt)
8215{
8216 return (num << cnt) | (num >>> (32 - cnt));
8217}
8218
8219module.exports = function md5(buf) {
8220 return helpers.hash(buf, core_md5, 16);
8221};
ab78acc6
IC
8222},{"./helpers":33}],35:[function(require,module,exports){
8223arguments[4][12][0].apply(exports,arguments)
8224},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8225(function (Buffer){
ebd8d4e8
IC
8226/*
8227CryptoJS v3.1.2
8228code.google.com/p/crypto-js
8229(c) 2009-2013 by Jeff Mott. All rights reserved.
8230code.google.com/p/crypto-js/wiki/License
8231*/
8232/** @preserve
8233(c) 2012 by Cédric Mesnil. All rights reserved.
8234
8235Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8236
8237 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8238 - 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.
8239
8240THIS 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.
8241*/
8242
ab78acc6 8243// constants table
ebd8d4e8 8244var zl = [
ab78acc6
IC
8245 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8246 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8247 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8248 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8249 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8250]
8251
ebd8d4e8 8252var zr = [
ab78acc6
IC
8253 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8254 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8255 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8256 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8257 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8258]
8259
ebd8d4e8 8260var sl = [
ab78acc6
IC
8261 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8262 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8263 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8264 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8265 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8266]
8267
ebd8d4e8 8268var sr = [
ab78acc6
IC
8269 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8270 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8271 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8272 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8273 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8274]
ebd8d4e8 8275
ab78acc6
IC
8276var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8277var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8278
ab78acc6
IC
8279function bytesToWords (bytes) {
8280 var words = []
ebd8d4e8 8281 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8282 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8283 }
ab78acc6
IC
8284 return words
8285}
ebd8d4e8 8286
ab78acc6
IC
8287function wordsToBytes (words) {
8288 var bytes = []
ebd8d4e8 8289 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8290 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8291 }
ab78acc6
IC
8292 return bytes
8293}
ebd8d4e8 8294
ab78acc6
IC
8295function processBlock (H, M, offset) {
8296 // swap endian
ebd8d4e8 8297 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8298 var offset_i = offset + i
8299 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8300
8301 // Swap
8302 M[offset_i] = (
ab78acc6
IC
8303 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8304 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8305 )
ebd8d4e8
IC
8306 }
8307
8308 // Working variables
ab78acc6
IC
8309 var al, bl, cl, dl, el
8310 var ar, br, cr, dr, er
8311
8312 ar = al = H[0]
8313 br = bl = H[1]
8314 cr = cl = H[2]
8315 dr = dl = H[3]
8316 er = el = H[4]
8317
8318 // computation
8319 var t
8320 for (i = 0; i < 80; i += 1) {
8321 t = (al + M[offset + zl[i]]) | 0
8322 if (i < 16) {
8323 t += f1(bl, cl, dl) + hl[0]
8324 } else if (i < 32) {
8325 t += f2(bl, cl, dl) + hl[1]
8326 } else if (i < 48) {
8327 t += f3(bl, cl, dl) + hl[2]
8328 } else if (i < 64) {
8329 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8330 } else {// if (i<80) {
ab78acc6
IC
8331 t += f5(bl, cl, dl) + hl[4]
8332 }
8333 t = t | 0
8334 t = rotl(t, sl[i])
8335 t = (t + el) | 0
8336 al = el
8337 el = dl
8338 dl = rotl(cl, 10)
8339 cl = bl
8340 bl = t
8341
8342 t = (ar + M[offset + zr[i]]) | 0
8343 if (i < 16) {
8344 t += f5(br, cr, dr) + hr[0]
8345 } else if (i < 32) {
8346 t += f4(br, cr, dr) + hr[1]
8347 } else if (i < 48) {
8348 t += f3(br, cr, dr) + hr[2]
8349 } else if (i < 64) {
8350 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8351 } else {// if (i<80) {
ab78acc6 8352 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8353 }
ebd8d4e8 8354
ab78acc6
IC
8355 t = t | 0
8356 t = rotl(t, sr[i])
8357 t = (t + er) | 0
8358 ar = er
8359 er = dr
8360 dr = rotl(cr, 10)
8361 cr = br
8362 br = t
8363 }
8364
8365 // intermediate hash value
8366 t = (H[1] + cl + dr) | 0
8367 H[1] = (H[2] + dl + er) | 0
8368 H[2] = (H[3] + el + ar) | 0
8369 H[3] = (H[4] + al + br) | 0
8370 H[4] = (H[0] + bl + cr) | 0
8371 H[0] = t
ebd8d4e8
IC
8372}
8373
ab78acc6
IC
8374function f1 (x, y, z) {
8375 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8376}
8377
ab78acc6
IC
8378function f2 (x, y, z) {
8379 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8380}
8381
ab78acc6
IC
8382function f3 (x, y, z) {
8383 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8384}
8385
ab78acc6
IC
8386function f4 (x, y, z) {
8387 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8388}
8389
ab78acc6
IC
8390function f5 (x, y, z) {
8391 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8392}
8393
ab78acc6
IC
8394function rotl (x, n) {
8395 return (x << n) | (x >>> (32 - n))
8396}
8397
8398function ripemd160 (message) {
8399 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8400
ab78acc6
IC
8401 if (typeof message === 'string') {
8402 message = new Buffer(message, 'utf8')
8403 }
ebd8d4e8 8404
ab78acc6 8405 var m = bytesToWords(message)
ebd8d4e8 8406
ab78acc6
IC
8407 var nBitsLeft = message.length * 8
8408 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8409
8410 // Add padding
ab78acc6 8411 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8412 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8413 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8414 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8415 )
ebd8d4e8 8416
ab78acc6
IC
8417 for (var i = 0; i < m.length; i += 16) {
8418 processBlock(H, m, i)
ebd8d4e8
IC
8419 }
8420
ab78acc6
IC
8421 // swap endian
8422 for (i = 0; i < 5; i++) {
8423 // shortcut
8424 var H_i = H[i]
ebd8d4e8
IC
8425
8426 // Swap
ab78acc6
IC
8427 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8428 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8429 }
8430
ab78acc6
IC
8431 var digestbytes = wordsToBytes(H)
8432 return new Buffer(digestbytes)
ebd8d4e8
IC
8433}
8434
ab78acc6
IC
8435module.exports = ripemd160
8436
8437}).call(this,require("buffer").Buffer)
8438},{"buffer":7}],37:[function(require,module,exports){
8439(function (Buffer){
8440// prototype class for hash functions
8441function Hash (blockSize, finalSize) {
8442 this._block = new Buffer(blockSize)
8443 this._finalSize = finalSize
8444 this._blockSize = blockSize
8445 this._len = 0
8446 this._s = 0
8447}
ebd8d4e8 8448
ab78acc6
IC
8449Hash.prototype.update = function (data, enc) {
8450 if (typeof data === 'string') {
8451 enc = enc || 'utf8'
8452 data = new Buffer(data, enc)
8453 }
ebd8d4e8 8454
ab78acc6
IC
8455 var l = this._len += data.length
8456 var s = this._s || 0
8457 var f = 0
8458 var buffer = this._block
ebd8d4e8 8459
ab78acc6
IC
8460 while (s < l) {
8461 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8462 var ch = (t - f)
ebd8d4e8 8463
ab78acc6
IC
8464 for (var i = 0; i < ch; i++) {
8465 buffer[(s % this._blockSize) + i] = data[i + f]
8466 }
8467
8468 s += ch
8469 f += ch
ebd8d4e8 8470
ab78acc6
IC
8471 if ((s % this._blockSize) === 0) {
8472 this._update(buffer)
8473 }
ebd8d4e8 8474 }
ab78acc6
IC
8475 this._s = s
8476
8477 return this
8478}
ebd8d4e8 8479
ab78acc6
IC
8480Hash.prototype.digest = function (enc) {
8481 // Suppose the length of the message M, in bits, is l
8482 var l = this._len * 8
8483
8484 // Append the bit 1 to the end of the message
8485 this._block[this._len % this._blockSize] = 0x80
8486
8487 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8488 this._block.fill(0, this._len % this._blockSize + 1)
8489
8490 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8491 this._update(this._block)
8492 this._block.fill(0)
ebd8d4e8
IC
8493 }
8494
ab78acc6
IC
8495 // to this append the block which is equal to the number l written in binary
8496 // TODO: handle case where l is > Math.pow(2, 29)
8497 this._block.writeInt32BE(l, this._blockSize - 4)
8498
8499 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8500
ab78acc6
IC
8501 return enc ? hash.toString(enc) : hash
8502}
ebd8d4e8 8503
ab78acc6
IC
8504Hash.prototype._update = function () {
8505 throw new Error('_update must be implemented by subclass')
8506}
ebd8d4e8 8507
ab78acc6 8508module.exports = Hash
ebd8d4e8 8509
ab78acc6
IC
8510}).call(this,require("buffer").Buffer)
8511},{"buffer":7}],38:[function(require,module,exports){
8512var exports = module.exports = function SHA (algorithm) {
8513 algorithm = algorithm.toLowerCase()
ebd8d4e8 8514
ab78acc6
IC
8515 var Algorithm = exports[algorithm]
8516 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8517
ab78acc6
IC
8518 return new Algorithm()
8519}
8520
8521exports.sha = require('./sha')
8522exports.sha1 = require('./sha1')
8523exports.sha224 = require('./sha224')
8524exports.sha256 = require('./sha256')
8525exports.sha384 = require('./sha384')
8526exports.sha512 = require('./sha512')
8527
8528},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8529(function (Buffer){
8530/*
8531 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8532 * in FIPS PUB 180-1
8533 * This source code is derived from sha1.js of the same repository.
8534 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8535 * operation was added.
8536 */
ebd8d4e8 8537
ab78acc6
IC
8538var inherits = require('inherits')
8539var Hash = require('./hash')
ebd8d4e8 8540
ab78acc6 8541var W = new Array(80)
ebd8d4e8 8542
ab78acc6
IC
8543function Sha () {
8544 this.init()
8545 this._w = W
ebd8d4e8 8546
ab78acc6
IC
8547 Hash.call(this, 64, 56)
8548}
ebd8d4e8 8549
ab78acc6 8550inherits(Sha, Hash)
ebd8d4e8 8551
ab78acc6
IC
8552Sha.prototype.init = function () {
8553 this._a = 0x67452301 | 0
8554 this._b = 0xefcdab89 | 0
8555 this._c = 0x98badcfe | 0
8556 this._d = 0x10325476 | 0
8557 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8558
ab78acc6
IC
8559 return this
8560}
8561
8562/*
8563 * Bitwise rotate a 32-bit number to the left.
8564 */
8565function rol (num, cnt) {
8566 return (num << cnt) | (num >>> (32 - cnt))
8567}
8568
8569Sha.prototype._update = function (M) {
8570 var W = this._w
8571
8572 var a = this._a
8573 var b = this._b
8574 var c = this._c
8575 var d = this._d
8576 var e = this._e
ebd8d4e8 8577
ab78acc6
IC
8578 var j = 0, k
8579
8580 /*
8581 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8582 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8583 */
8584 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8585 function loop (w, f) {
8586 W[j] = w
8587
8588 var t = rol(a, 5) + f + e + w + k
8589
8590 e = d
8591 d = c
8592 c = rol(b, 30)
8593 b = a
8594 a = t
8595 j++
ebd8d4e8
IC
8596 }
8597
ab78acc6
IC
8598 k = 1518500249
8599 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8600 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8601 k = 1859775393
8602 while (j < 40) loop(calcW(), b ^ c ^ d)
8603 k = -1894007588
8604 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8605 k = -899497514
8606 while (j < 80) loop(calcW(), b ^ c ^ d)
8607
8608 this._a = (a + this._a) | 0
8609 this._b = (b + this._b) | 0
8610 this._c = (c + this._c) | 0
8611 this._d = (d + this._d) | 0
8612 this._e = (e + this._e) | 0
ebd8d4e8
IC
8613}
8614
ab78acc6
IC
8615Sha.prototype._hash = function () {
8616 var H = new Buffer(20)
8617
8618 H.writeInt32BE(this._a | 0, 0)
8619 H.writeInt32BE(this._b | 0, 4)
8620 H.writeInt32BE(this._c | 0, 8)
8621 H.writeInt32BE(this._d | 0, 12)
8622 H.writeInt32BE(this._e | 0, 16)
8623
8624 return H
ebd8d4e8
IC
8625}
8626
ab78acc6 8627module.exports = Sha
ebd8d4e8 8628
ebd8d4e8 8629
ab78acc6
IC
8630}).call(this,require("buffer").Buffer)
8631},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8632(function (Buffer){
ebd8d4e8
IC
8633/*
8634 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8635 * in FIPS PUB 180-1
8636 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8637 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8638 * Distributed under the BSD License
8639 * See http://pajhome.org.uk/crypt/md5 for details.
8640 */
ebd8d4e8 8641
ab78acc6
IC
8642var inherits = require('inherits')
8643var Hash = require('./hash')
ebd8d4e8 8644
ab78acc6 8645var W = new Array(80)
ebd8d4e8 8646
ab78acc6
IC
8647function Sha1 () {
8648 this.init()
8649 this._w = W
ebd8d4e8 8650
ab78acc6
IC
8651 Hash.call(this, 64, 56)
8652}
ebd8d4e8 8653
ab78acc6 8654inherits(Sha1, Hash)
ebd8d4e8 8655
ab78acc6
IC
8656Sha1.prototype.init = function () {
8657 this._a = 0x67452301 | 0
8658 this._b = 0xefcdab89 | 0
8659 this._c = 0x98badcfe | 0
8660 this._d = 0x10325476 | 0
8661 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8662
ab78acc6
IC
8663 return this
8664}
ebd8d4e8 8665
ab78acc6
IC
8666/*
8667 * Bitwise rotate a 32-bit number to the left.
8668 */
8669function rol (num, cnt) {
8670 return (num << cnt) | (num >>> (32 - cnt))
8671}
ebd8d4e8 8672
ab78acc6
IC
8673Sha1.prototype._update = function (M) {
8674 var W = this._w
ebd8d4e8 8675
ab78acc6
IC
8676 var a = this._a
8677 var b = this._b
8678 var c = this._c
8679 var d = this._d
8680 var e = this._e
ebd8d4e8 8681
ab78acc6 8682 var j = 0, k
ebd8d4e8 8683
ab78acc6
IC
8684 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8685 function loop (w, f) {
8686 W[j] = w
ebd8d4e8 8687
ab78acc6 8688 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8689
ab78acc6
IC
8690 e = d
8691 d = c
8692 c = rol(b, 30)
8693 b = a
8694 a = t
8695 j++
ebd8d4e8
IC
8696 }
8697
ab78acc6
IC
8698 k = 1518500249
8699 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8700 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8701 k = 1859775393
8702 while (j < 40) loop(calcW(), b ^ c ^ d)
8703 k = -1894007588
8704 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8705 k = -899497514
8706 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8707
ab78acc6
IC
8708 this._a = (a + this._a) | 0
8709 this._b = (b + this._b) | 0
8710 this._c = (c + this._c) | 0
8711 this._d = (d + this._d) | 0
8712 this._e = (e + this._e) | 0
8713}
ebd8d4e8 8714
ab78acc6
IC
8715Sha1.prototype._hash = function () {
8716 var H = new Buffer(20)
ebd8d4e8 8717
ab78acc6
IC
8718 H.writeInt32BE(this._a | 0, 0)
8719 H.writeInt32BE(this._b | 0, 4)
8720 H.writeInt32BE(this._c | 0, 8)
8721 H.writeInt32BE(this._d | 0, 12)
8722 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8723
ab78acc6
IC
8724 return H
8725}
ebd8d4e8 8726
ab78acc6 8727module.exports = Sha1
ebd8d4e8 8728
ab78acc6
IC
8729}).call(this,require("buffer").Buffer)
8730},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8731(function (Buffer){
8732/**
8733 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8734 * in FIPS 180-2
8735 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8736 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8737 *
8738 */
ebd8d4e8 8739
ab78acc6
IC
8740var inherits = require('inherits')
8741var Sha256 = require('./sha256')
8742var Hash = require('./hash')
ebd8d4e8 8743
ab78acc6 8744var W = new Array(64)
ebd8d4e8 8745
ab78acc6
IC
8746function Sha224 () {
8747 this.init()
ebd8d4e8 8748
ab78acc6 8749 this._w = W // new Array(64)
ebd8d4e8 8750
ab78acc6
IC
8751 Hash.call(this, 64, 56)
8752}
ebd8d4e8 8753
ab78acc6 8754inherits(Sha224, Sha256)
ebd8d4e8 8755
ab78acc6
IC
8756Sha224.prototype.init = function () {
8757 this._a = 0xc1059ed8 | 0
8758 this._b = 0x367cd507 | 0
8759 this._c = 0x3070dd17 | 0
8760 this._d = 0xf70e5939 | 0
8761 this._e = 0xffc00b31 | 0
8762 this._f = 0x68581511 | 0
8763 this._g = 0x64f98fa7 | 0
8764 this._h = 0xbefa4fa4 | 0
8765
8766 return this
8767}
8768
8769Sha224.prototype._hash = function () {
8770 var H = new Buffer(28)
8771
8772 H.writeInt32BE(this._a, 0)
8773 H.writeInt32BE(this._b, 4)
8774 H.writeInt32BE(this._c, 8)
8775 H.writeInt32BE(this._d, 12)
8776 H.writeInt32BE(this._e, 16)
8777 H.writeInt32BE(this._f, 20)
8778 H.writeInt32BE(this._g, 24)
8779
8780 return H
ebd8d4e8
IC
8781}
8782
ab78acc6 8783module.exports = Sha224
ebd8d4e8 8784
ab78acc6
IC
8785}).call(this,require("buffer").Buffer)
8786},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8787(function (Buffer){
ebd8d4e8
IC
8788/**
8789 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8790 * in FIPS 180-2
8791 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8792 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8793 *
8794 */
8795
ab78acc6
IC
8796var inherits = require('inherits')
8797var Hash = require('./hash')
8798
8799var K = [
8800 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8801 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8802 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8803 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8804 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8805 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8806 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8807 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8808 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8809 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8810 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8811 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8812 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8813 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8814 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8815 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8816]
8817
8818var W = new Array(64)
8819
8820function Sha256 () {
8821 this.init()
8822
8823 this._w = W // new Array(64)
8824
8825 Hash.call(this, 64, 56)
8826}
8827
8828inherits(Sha256, Hash)
8829
8830Sha256.prototype.init = function () {
8831 this._a = 0x6a09e667 | 0
8832 this._b = 0xbb67ae85 | 0
8833 this._c = 0x3c6ef372 | 0
8834 this._d = 0xa54ff53a | 0
8835 this._e = 0x510e527f | 0
8836 this._f = 0x9b05688c | 0
8837 this._g = 0x1f83d9ab | 0
8838 this._h = 0x5be0cd19 | 0
ebd8d4e8 8839
ab78acc6
IC
8840 return this
8841}
ebd8d4e8 8842
ab78acc6
IC
8843function S (X, n) {
8844 return (X >>> n) | (X << (32 - n))
8845}
ebd8d4e8 8846
ab78acc6
IC
8847function R (X, n) {
8848 return (X >>> n)
8849}
ebd8d4e8 8850
ab78acc6
IC
8851function Ch (x, y, z) {
8852 return ((x & y) ^ ((~x) & z))
8853}
ebd8d4e8 8854
ab78acc6
IC
8855function Maj (x, y, z) {
8856 return ((x & y) ^ (x & z) ^ (y & z))
8857}
ebd8d4e8 8858
ab78acc6
IC
8859function Sigma0256 (x) {
8860 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8861}
ebd8d4e8 8862
ab78acc6
IC
8863function Sigma1256 (x) {
8864 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8865}
ebd8d4e8 8866
ab78acc6
IC
8867function Gamma0256 (x) {
8868 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8869}
ebd8d4e8 8870
ab78acc6
IC
8871function Gamma1256 (x) {
8872 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8873}
ebd8d4e8 8874
ab78acc6
IC
8875Sha256.prototype._update = function (M) {
8876 var W = this._w
ebd8d4e8 8877
ab78acc6
IC
8878 var a = this._a | 0
8879 var b = this._b | 0
8880 var c = this._c | 0
8881 var d = this._d | 0
8882 var e = this._e | 0
8883 var f = this._f | 0
8884 var g = this._g | 0
8885 var h = this._h | 0
ebd8d4e8 8886
ab78acc6 8887 var j = 0
ebd8d4e8 8888
ab78acc6
IC
8889 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8890 function loop (w) {
8891 W[j] = w
ebd8d4e8 8892
ab78acc6
IC
8893 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8894 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8895
ab78acc6
IC
8896 h = g
8897 g = f
8898 f = e
8899 e = d + T1
8900 d = c
8901 c = b
8902 b = a
8903 a = T1 + T2
ebd8d4e8 8904
ab78acc6 8905 j++
ebd8d4e8
IC
8906 }
8907
ab78acc6
IC
8908 while (j < 16) loop(M.readInt32BE(j * 4))
8909 while (j < 64) loop(calcW())
ebd8d4e8 8910
ab78acc6
IC
8911 this._a = (a + this._a) | 0
8912 this._b = (b + this._b) | 0
8913 this._c = (c + this._c) | 0
8914 this._d = (d + this._d) | 0
8915 this._e = (e + this._e) | 0
8916 this._f = (f + this._f) | 0
8917 this._g = (g + this._g) | 0
8918 this._h = (h + this._h) | 0
8919}
ebd8d4e8 8920
ab78acc6
IC
8921Sha256.prototype._hash = function () {
8922 var H = new Buffer(32)
ebd8d4e8 8923
ab78acc6
IC
8924 H.writeInt32BE(this._a, 0)
8925 H.writeInt32BE(this._b, 4)
8926 H.writeInt32BE(this._c, 8)
8927 H.writeInt32BE(this._d, 12)
8928 H.writeInt32BE(this._e, 16)
8929 H.writeInt32BE(this._f, 20)
8930 H.writeInt32BE(this._g, 24)
8931 H.writeInt32BE(this._h, 28)
ebd8d4e8 8932
ab78acc6
IC
8933 return H
8934}
ebd8d4e8 8935
ab78acc6 8936module.exports = Sha256
ebd8d4e8 8937
ab78acc6
IC
8938}).call(this,require("buffer").Buffer)
8939},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8940(function (Buffer){
8941var inherits = require('inherits')
8942var SHA512 = require('./sha512')
8943var Hash = require('./hash')
ebd8d4e8 8944
ab78acc6 8945var W = new Array(160)
ebd8d4e8 8946
ab78acc6
IC
8947function Sha384 () {
8948 this.init()
8949 this._w = W
ebd8d4e8 8950
ab78acc6
IC
8951 Hash.call(this, 128, 112)
8952}
ebd8d4e8 8953
ab78acc6 8954inherits(Sha384, SHA512)
ebd8d4e8 8955
ab78acc6
IC
8956Sha384.prototype.init = function () {
8957 this._a = 0xcbbb9d5d | 0
8958 this._b = 0x629a292a | 0
8959 this._c = 0x9159015a | 0
8960 this._d = 0x152fecd8 | 0
8961 this._e = 0x67332667 | 0
8962 this._f = 0x8eb44a87 | 0
8963 this._g = 0xdb0c2e0d | 0
8964 this._h = 0x47b5481d | 0
ebd8d4e8 8965
ab78acc6
IC
8966 this._al = 0xc1059ed8 | 0
8967 this._bl = 0x367cd507 | 0
8968 this._cl = 0x3070dd17 | 0
8969 this._dl = 0xf70e5939 | 0
8970 this._el = 0xffc00b31 | 0
8971 this._fl = 0x68581511 | 0
8972 this._gl = 0x64f98fa7 | 0
8973 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8974
ab78acc6 8975 return this
ebd8d4e8
IC
8976}
8977
ab78acc6
IC
8978Sha384.prototype._hash = function () {
8979 var H = new Buffer(48)
ebd8d4e8 8980
ab78acc6
IC
8981 function writeInt64BE (h, l, offset) {
8982 H.writeInt32BE(h, offset)
8983 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8984 }
ebd8d4e8 8985
ab78acc6
IC
8986 writeInt64BE(this._a, this._al, 0)
8987 writeInt64BE(this._b, this._bl, 8)
8988 writeInt64BE(this._c, this._cl, 16)
8989 writeInt64BE(this._d, this._dl, 24)
8990 writeInt64BE(this._e, this._el, 32)
8991 writeInt64BE(this._f, this._fl, 40)
8992
8993 return H
ebd8d4e8
IC
8994}
8995
ab78acc6 8996module.exports = Sha384
ebd8d4e8 8997
ab78acc6
IC
8998}).call(this,require("buffer").Buffer)
8999},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 9000(function (Buffer){
ab78acc6
IC
9001var inherits = require('inherits')
9002var Hash = require('./hash')
9003
9004var K = [
9005 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9006 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9007 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9008 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9009 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9010 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9011 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9012 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9013 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9014 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9015 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9016 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9017 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9018 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9019 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9020 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9021 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9022 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9023 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9024 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9025 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9026 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9027 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9028 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9029 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9030 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9031 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9032 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9033 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9034 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9035 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9036 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9037 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9038 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9039 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9040 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9041 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9042 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9043 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9044 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9045]
9046
9047var W = new Array(160)
9048
9049function Sha512 () {
9050 this.init()
9051 this._w = W
9052
9053 Hash.call(this, 128, 112)
9054}
9055
9056inherits(Sha512, Hash)
9057
9058Sha512.prototype.init = function () {
9059 this._a = 0x6a09e667 | 0
9060 this._b = 0xbb67ae85 | 0
9061 this._c = 0x3c6ef372 | 0
9062 this._d = 0xa54ff53a | 0
9063 this._e = 0x510e527f | 0
9064 this._f = 0x9b05688c | 0
9065 this._g = 0x1f83d9ab | 0
9066 this._h = 0x5be0cd19 | 0
9067
9068 this._al = 0xf3bcc908 | 0
9069 this._bl = 0x84caa73b | 0
9070 this._cl = 0xfe94f82b | 0
9071 this._dl = 0x5f1d36f1 | 0
9072 this._el = 0xade682d1 | 0
9073 this._fl = 0x2b3e6c1f | 0
9074 this._gl = 0xfb41bd6b | 0
9075 this._hl = 0x137e2179 | 0
ebd8d4e8 9076
ab78acc6 9077 return this
ebd8d4e8
IC
9078}
9079
ab78acc6
IC
9080function S (X, Xl, n) {
9081 return (X >>> n) | (Xl << (32 - n))
9082}
9083
9084function Ch (x, y, z) {
9085 return ((x & y) ^ ((~x) & z))
9086}
9087
9088function Maj (x, y, z) {
9089 return ((x & y) ^ (x & z) ^ (y & z))
9090}
9091
9092Sha512.prototype._update = function (M) {
9093 var W = this._w
9094
9095 var a = this._a | 0
9096 var b = this._b | 0
9097 var c = this._c | 0
9098 var d = this._d | 0
9099 var e = this._e | 0
9100 var f = this._f | 0
9101 var g = this._g | 0
9102 var h = this._h | 0
9103
9104 var al = this._al | 0
9105 var bl = this._bl | 0
9106 var cl = this._cl | 0
9107 var dl = this._dl | 0
9108 var el = this._el | 0
9109 var fl = this._fl | 0
9110 var gl = this._gl | 0
9111 var hl = this._hl | 0
9112
9113 var i = 0, j = 0
9114 var Wi, Wil
9115 function calcW () {
9116 var x = W[j - 15 * 2]
9117 var xl = W[j - 15 * 2 + 1]
9118 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9119 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9120
9121 x = W[j - 2 * 2]
9122 xl = W[j - 2 * 2 + 1]
9123 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9124 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9125
9126 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9127 var Wi7 = W[j - 7 * 2]
9128 var Wi7l = W[j - 7 * 2 + 1]
9129
9130 var Wi16 = W[j - 16 * 2]
9131 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9132
ab78acc6
IC
9133 Wil = gamma0l + Wi7l
9134 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9135 Wil = Wil + gamma1l
9136 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9137 Wil = Wil + Wi16l
9138 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9139 }
9140
9141 function loop () {
9142 W[j] = Wi
9143 W[j + 1] = Wil
ebd8d4e8 9144
ab78acc6
IC
9145 var maj = Maj(a, b, c)
9146 var majl = Maj(al, bl, cl)
ebd8d4e8 9147
ab78acc6
IC
9148 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9149 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9150 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9151 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9152
ab78acc6
IC
9153 // t1 = h + sigma1 + ch + K[i] + W[i]
9154 var Ki = K[j]
9155 var Kil = K[j + 1]
ebd8d4e8 9156
ab78acc6
IC
9157 var ch = Ch(e, f, g)
9158 var chl = Ch(el, fl, gl)
ebd8d4e8 9159
ab78acc6
IC
9160 var t1l = hl + sigma1l
9161 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9162 t1l = t1l + chl
9163 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9164 t1l = t1l + Kil
9165 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9166 t1l = t1l + Wil
9167 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9168
ab78acc6
IC
9169 // t2 = sigma0 + maj
9170 var t2l = sigma0l + majl
9171 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9172
ab78acc6
IC
9173 h = g
9174 hl = gl
9175 g = f
9176 gl = fl
9177 f = e
9178 fl = el
9179 el = (dl + t1l) | 0
9180 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9181 d = c
9182 dl = cl
9183 c = b
9184 cl = bl
9185 b = a
9186 bl = al
9187 al = (t1l + t2l) | 0
9188 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9189
9190 i++
9191 j += 2
9192 }
9193
9194 while (i < 16) {
9195 Wi = M.readInt32BE(j * 4)
9196 Wil = M.readInt32BE(j * 4 + 4)
9197
9198 loop()
9199 }
9200
9201 while (i < 80) {
9202 calcW()
9203 loop()
9204 }
9205
9206 this._al = (this._al + al) | 0
9207 this._bl = (this._bl + bl) | 0
9208 this._cl = (this._cl + cl) | 0
9209 this._dl = (this._dl + dl) | 0
9210 this._el = (this._el + el) | 0
9211 this._fl = (this._fl + fl) | 0
9212 this._gl = (this._gl + gl) | 0
9213 this._hl = (this._hl + hl) | 0
9214
9215 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9216 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9217 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9218 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9219 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9220 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9221 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9222 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9223}
9224
9225Sha512.prototype._hash = function () {
9226 var H = new Buffer(64)
9227
9228 function writeInt64BE (h, l, offset) {
9229 H.writeInt32BE(h, offset)
9230 H.writeInt32BE(l, offset + 4)
9231 }
9232
9233 writeInt64BE(this._a, this._al, 0)
9234 writeInt64BE(this._b, this._bl, 8)
9235 writeInt64BE(this._c, this._cl, 16)
9236 writeInt64BE(this._d, this._dl, 24)
9237 writeInt64BE(this._e, this._el, 32)
9238 writeInt64BE(this._f, this._fl, 40)
9239 writeInt64BE(this._g, this._gl, 48)
9240 writeInt64BE(this._h, this._hl, 56)
9241
9242 return H
9243}
9244
9245module.exports = Sha512
9246
9247}).call(this,require("buffer").Buffer)
9248},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9249(function (Buffer){
9250'use strict';
9251var createHash = require('create-hash/browser');
9252var inherits = require('inherits')
ebd8d4e8 9253
ab78acc6 9254var Transform = require('stream').Transform
ebd8d4e8 9255
ab78acc6
IC
9256var ZEROS = new Buffer(128)
9257ZEROS.fill(0)
ebd8d4e8 9258
ab78acc6
IC
9259function Hmac(alg, key) {
9260 Transform.call(this)
ebd8d4e8 9261
ab78acc6
IC
9262 if (typeof key === 'string') {
9263 key = new Buffer(key)
9264 }
ebd8d4e8 9265
ab78acc6 9266 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9267
ab78acc6
IC
9268 this._alg = alg
9269 this._key = key
ebd8d4e8 9270
ab78acc6
IC
9271 if (key.length > blocksize) {
9272 key = createHash(alg).update(key).digest()
ebd8d4e8 9273
ab78acc6
IC
9274 } else if (key.length < blocksize) {
9275 key = Buffer.concat([key, ZEROS], blocksize)
9276 }
ebd8d4e8 9277
ab78acc6
IC
9278 var ipad = this._ipad = new Buffer(blocksize)
9279 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9280
ab78acc6
IC
9281 for (var i = 0; i < blocksize; i++) {
9282 ipad[i] = key[i] ^ 0x36
9283 opad[i] = key[i] ^ 0x5C
9284 }
ebd8d4e8 9285
ab78acc6
IC
9286 this._hash = createHash(alg).update(ipad)
9287}
ebd8d4e8 9288
ab78acc6 9289inherits(Hmac, Transform)
ebd8d4e8 9290
ab78acc6
IC
9291Hmac.prototype.update = function (data, enc) {
9292 this._hash.update(data, enc)
ebd8d4e8 9293
ab78acc6
IC
9294 return this
9295}
ebd8d4e8 9296
ab78acc6
IC
9297Hmac.prototype._transform = function (data, _, next) {
9298 this._hash.update(data)
ebd8d4e8 9299
ab78acc6
IC
9300 next()
9301}
ebd8d4e8 9302
ab78acc6
IC
9303Hmac.prototype._flush = function (next) {
9304 this.push(this.digest())
ebd8d4e8 9305
ab78acc6
IC
9306 next()
9307}
ebd8d4e8 9308
ab78acc6
IC
9309Hmac.prototype.digest = function (enc) {
9310 var h = this._hash.digest()
ebd8d4e8 9311
ab78acc6
IC
9312 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9313}
ebd8d4e8 9314
ab78acc6
IC
9315module.exports = function createHmac(alg, key) {
9316 return new Hmac(alg, key)
9317}
ebd8d4e8 9318
ab78acc6
IC
9319}).call(this,require("buffer").Buffer)
9320},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9321arguments[4][12][0].apply(exports,arguments)
9322},{"dup":12}],47:[function(require,module,exports){
9323var assert = require('assert')
9324var BigInteger = require('bigi')
ebd8d4e8 9325
ab78acc6 9326var Point = require('./point')
ebd8d4e8
IC
9327
9328function Curve(p, a, b, Gx, Gy, n, h) {
9329 this.p = p
9330 this.a = a
9331 this.b = b
9332 this.G = Point.fromAffine(this, Gx, Gy)
9333 this.n = n
9334 this.h = h
9335
9336 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9337
9338 // result caching
9339 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9340}
9341
9342Curve.prototype.pointFromX = function(isOdd, x) {
9343 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9344 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9345
9346 var y = beta
9347 if (beta.isEven() ^ !isOdd) {
9348 y = this.p.subtract(y) // -y % p
9349 }
9350
9351 return Point.fromAffine(this, x, y)
9352}
9353
9354Curve.prototype.isInfinity = function(Q) {
9355 if (Q === this.infinity) return true
9356
9357 return Q.z.signum() === 0 && Q.y.signum() !== 0
9358}
9359
9360Curve.prototype.isOnCurve = function(Q) {
9361 if (this.isInfinity(Q)) return true
9362
9363 var x = Q.affineX
9364 var y = Q.affineY
9365 var a = this.a
9366 var b = this.b
9367 var p = this.p
9368
9369 // Check that xQ and yQ are integers in the interval [0, p - 1]
9370 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9371 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9372
9373 // and check that y^2 = x^3 + ax + b (mod p)
9374 var lhs = y.square().mod(p)
9375 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9376 return lhs.equals(rhs)
9377}
9378
9379/**
9380 * Validate an elliptic curve point.
9381 *
9382 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9383 */
9384Curve.prototype.validate = function(Q) {
9385 // Check Q != O
9386 assert(!this.isInfinity(Q), 'Point is at infinity')
9387 assert(this.isOnCurve(Q), 'Point is not on the curve')
9388
9389 // Check nQ = O (where Q is a scalar multiple of G)
9390 var nQ = Q.multiply(this.n)
9391 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9392
9393 return true
9394}
9395
9396module.exports = Curve
9397
ab78acc6 9398},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9399module.exports={
9400 "secp128r1": {
9401 "p": "fffffffdffffffffffffffffffffffff",
9402 "a": "fffffffdfffffffffffffffffffffffc",
9403 "b": "e87579c11079f43dd824993c2cee5ed3",
9404 "n": "fffffffe0000000075a30d1b9038a115",
9405 "h": "01",
9406 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9407 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9408 },
9409 "secp160k1": {
9410 "p": "fffffffffffffffffffffffffffffffeffffac73",
9411 "a": "00",
9412 "b": "07",
9413 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9414 "h": "01",
9415 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9416 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9417 },
9418 "secp160r1": {
9419 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9420 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9421 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9422 "n": "0100000000000000000001f4c8f927aed3ca752257",
9423 "h": "01",
9424 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9425 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9426 },
9427 "secp192k1": {
9428 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9429 "a": "00",
9430 "b": "03",
9431 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9432 "h": "01",
9433 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9434 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9435 },
9436 "secp192r1": {
9437 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9438 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9439 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9440 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9441 "h": "01",
9442 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9443 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9444 },
ebd8d4e8
IC
9445 "secp256k1": {
9446 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9447 "a": "00",
9448 "b": "07",
9449 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9450 "h": "01",
9451 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9452 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9453 },
9454 "secp256r1": {
9455 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9456 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9457 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9458 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9459 "h": "01",
9460 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9461 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9462 }
9463}
9464
ab78acc6
IC
9465},{}],49:[function(require,module,exports){
9466var Point = require('./point')
9467var Curve = require('./curve')
ebd8d4e8 9468
ab78acc6 9469var getCurveByName = require('./names')
ebd8d4e8
IC
9470
9471module.exports = {
9472 Curve: Curve,
9473 Point: Point,
9474 getCurveByName: getCurveByName
9475}
9476
ab78acc6
IC
9477},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9478var BigInteger = require('bigi')
ebd8d4e8 9479
ab78acc6
IC
9480var curves = require('./curves')
9481var Curve = require('./curve')
ebd8d4e8
IC
9482
9483function getCurveByName(name) {
9484 var curve = curves[name]
9485 if (!curve) return null
9486
9487 var p = new BigInteger(curve.p, 16)
9488 var a = new BigInteger(curve.a, 16)
9489 var b = new BigInteger(curve.b, 16)
9490 var n = new BigInteger(curve.n, 16)
9491 var h = new BigInteger(curve.h, 16)
9492 var Gx = new BigInteger(curve.Gx, 16)
9493 var Gy = new BigInteger(curve.Gy, 16)
9494
9495 return new Curve(p, a, b, Gx, Gy, n, h)
9496}
9497
9498module.exports = getCurveByName
9499
ab78acc6 9500},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9501(function (Buffer){
ab78acc6
IC
9502var assert = require('assert')
9503var BigInteger = require('bigi')
ebd8d4e8
IC
9504
9505var THREE = BigInteger.valueOf(3)
9506
9507function Point(curve, x, y, z) {
9508 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9509
9510 this.curve = curve
9511 this.x = x
9512 this.y = y
9513 this.z = z
9514 this._zInv = null
9515
9516 this.compressed = true
9517}
9518
9519Object.defineProperty(Point.prototype, 'zInv', {
9520 get: function() {
9521 if (this._zInv === null) {
9522 this._zInv = this.z.modInverse(this.curve.p)
9523 }
9524
9525 return this._zInv
9526 }
9527})
9528
9529Object.defineProperty(Point.prototype, 'affineX', {
9530 get: function() {
9531 return this.x.multiply(this.zInv).mod(this.curve.p)
9532 }
9533})
9534
9535Object.defineProperty(Point.prototype, 'affineY', {
9536 get: function() {
9537 return this.y.multiply(this.zInv).mod(this.curve.p)
9538 }
9539})
9540
9541Point.fromAffine = function(curve, x, y) {
9542 return new Point(curve, x, y, BigInteger.ONE)
9543}
9544
9545Point.prototype.equals = function(other) {
9546 if (other === this) return true
9547 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9548 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9549
9550 // u = Y2 * Z1 - Y1 * Z2
9551 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9552
9553 if (u.signum() !== 0) return false
9554
9555 // v = X2 * Z1 - X1 * Z2
9556 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9557
9558 return v.signum() === 0
9559}
9560
9561Point.prototype.negate = function() {
9562 var y = this.curve.p.subtract(this.y)
9563
9564 return new Point(this.curve, this.x, y, this.z)
9565}
9566
9567Point.prototype.add = function(b) {
9568 if (this.curve.isInfinity(this)) return b
9569 if (this.curve.isInfinity(b)) return this
9570
9571 var x1 = this.x
9572 var y1 = this.y
9573 var x2 = b.x
9574 var y2 = b.y
9575
9576 // u = Y2 * Z1 - Y1 * Z2
9577 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9578 // v = X2 * Z1 - X1 * Z2
9579 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9580
9581 if (v.signum() === 0) {
9582 if (u.signum() === 0) {
9583 return this.twice() // this == b, so double
9584 }
9585
9586 return this.curve.infinity // this = -b, so infinity
9587 }
9588
9589 var v2 = v.square()
9590 var v3 = v2.multiply(v)
9591 var x1v2 = x1.multiply(v2)
9592 var zu2 = u.square().multiply(this.z)
9593
9594 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9595 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9596 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9597 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)
9598 // z3 = v^3 * z1 * z2
9599 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9600
9601 return new Point(this.curve, x3, y3, z3)
9602}
9603
9604Point.prototype.twice = function() {
9605 if (this.curve.isInfinity(this)) return this
9606 if (this.y.signum() === 0) return this.curve.infinity
9607
9608 var x1 = this.x
9609 var y1 = this.y
9610
9611 var y1z1 = y1.multiply(this.z)
9612 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9613 var a = this.curve.a
9614
9615 // w = 3 * x1^2 + a * z1^2
9616 var w = x1.square().multiply(THREE)
9617
9618 if (a.signum() !== 0) {
9619 w = w.add(this.z.square().multiply(a))
9620 }
9621
9622 w = w.mod(this.curve.p)
9623 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9624 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9625 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9626 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9627 // z3 = 8 * (y1 * z1)^3
9628 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9629
9630 return new Point(this.curve, x3, y3, z3)
9631}
9632
9633// Simple NAF (Non-Adjacent Form) multiplication algorithm
9634// TODO: modularize the multiplication algorithm
9635Point.prototype.multiply = function(k) {
9636 if (this.curve.isInfinity(this)) return this
9637 if (k.signum() === 0) return this.curve.infinity
9638
9639 var e = k
9640 var h = e.multiply(THREE)
9641
9642 var neg = this.negate()
9643 var R = this
9644
9645 for (var i = h.bitLength() - 2; i > 0; --i) {
9646 R = R.twice()
9647
9648 var hBit = h.testBit(i)
9649 var eBit = e.testBit(i)
9650
9651 if (hBit != eBit) {
9652 R = R.add(hBit ? this : neg)
9653 }
9654 }
9655
9656 return R
9657}
9658
9659// Compute this*j + x*k (simultaneous multiplication)
9660Point.prototype.multiplyTwo = function(j, x, k) {
9661 var i
9662
9663 if (j.bitLength() > k.bitLength())
9664 i = j.bitLength() - 1
9665 else
9666 i = k.bitLength() - 1
9667
9668 var R = this.curve.infinity
9669 var both = this.add(x)
9670
9671 while (i >= 0) {
9672 R = R.twice()
9673
9674 var jBit = j.testBit(i)
9675 var kBit = k.testBit(i)
9676
9677 if (jBit) {
9678 if (kBit) {
9679 R = R.add(both)
9680
9681 } else {
9682 R = R.add(this)
9683 }
9684
9685 } else {
9686 if (kBit) {
9687 R = R.add(x)
9688 }
9689 }
9690 --i
9691 }
9692
9693 return R
9694}
9695
9696Point.prototype.getEncoded = function(compressed) {
9697 if (compressed == undefined) compressed = this.compressed
9698 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9699
9700 var x = this.affineX
9701 var y = this.affineY
9702
9703 var buffer
9704
9705 // Determine size of q in bytes
9706 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9707
9708 // 0x02/0x03 | X
9709 if (compressed) {
9710 buffer = new Buffer(1 + byteLength)
9711 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9712
9713 // 0x04 | X | Y
9714 } else {
9715 buffer = new Buffer(1 + byteLength + byteLength)
9716 buffer.writeUInt8(0x04, 0)
9717
9718 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9719 }
9720
9721 x.toBuffer(byteLength).copy(buffer, 1)
9722
9723 return buffer
9724}
9725
9726Point.decodeFrom = function(curve, buffer) {
9727 var type = buffer.readUInt8(0)
9728 var compressed = (type !== 4)
9729
ebd8d4e8 9730 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9731 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9732
9733 var Q
9734 if (compressed) {
9735 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9736 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9737
9738 var isOdd = (type === 0x03)
9739 Q = curve.pointFromX(isOdd, x)
9740
9741 } else {
9742 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9743
9744 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9745 Q = Point.fromAffine(curve, x, y)
9746 }
9747
9748 Q.compressed = compressed
9749 return Q
9750}
9751
9752Point.prototype.toString = function () {
9753 if (this.curve.isInfinity(this)) return '(INFINITY)'
9754
9755 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9756}
9757
9758module.exports = Point
9759
ab78acc6
IC
9760}).call(this,require("buffer").Buffer)
9761},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9762(function (process,global,Buffer){
9763'use strict';
ebd8d4e8 9764
ab78acc6
IC
9765var crypto = global.crypto || global.msCrypto
9766if(crypto && crypto.getRandomValues) {
9767 module.exports = randomBytes;
9768} else {
9769 module.exports = oldBrowser;
9770}
9771function randomBytes(size, cb) {
9772 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9773 /* This will not work in older browsers.
9774 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9775 */
9776
9777 crypto.getRandomValues(bytes);
9778 if (typeof cb === 'function') {
9779 return process.nextTick(function () {
9780 cb(null, bytes);
9781 });
ebd8d4e8 9782 }
ab78acc6
IC
9783 return bytes;
9784}
9785function oldBrowser() {
9786 throw new Error(
9787 'secure random number generation not supported by this browser\n'+
9788 'use chrome, FireFox or Internet Explorer 11'
9789 )
ebd8d4e8
IC
9790}
9791
ab78acc6
IC
9792}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9793},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9794(function (Buffer){
9795'use strict';
ebd8d4e8 9796
ab78acc6
IC
9797function getFunctionName(fn) {
9798 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9799}
9800
9801function getTypeTypeName(type) {
9802 if (nativeTypes.Function(type)) {
9803 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9804 }
ab78acc6
IC
9805 if (nativeTypes.Object(type)) return JSON.stringify(type);
9806
9807 return type;
ebd8d4e8
IC
9808}
9809
ab78acc6
IC
9810function getValueTypeName(value) {
9811 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9812
ab78acc6
IC
9813 return getFunctionName(value.constructor);
9814}
9815
9816function tfErrorString(type, value) {
9817 var typeTypeName = getTypeTypeName(type);
9818 var valueTypeName = getValueTypeName(value);
9819
9820 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9821}
9822
9823function tfPropertyErrorString(type, name, value) {
9824 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9825}
9826
9827var nativeTypes = {
9828 Array: (function (_Array) {
9829 function Array(_x) {
9830 return _Array.apply(this, arguments);
9831 }
9832
9833 Array.toString = function () {
9834 return _Array.toString();
9835 };
9836
9837 return Array;
9838 })(function (value) {
9839 return value !== null && value !== undefined && value.constructor === Array;
9840 }),
9841 Boolean: function Boolean(value) {
9842 return typeof value === 'boolean';
9843 },
9844 Buffer: (function (_Buffer) {
9845 function Buffer(_x2) {
9846 return _Buffer.apply(this, arguments);
9847 }
9848
9849 Buffer.toString = function () {
9850 return _Buffer.toString();
9851 };
9852
9853 return Buffer;
9854 })(function (value) {
9855 return Buffer.isBuffer(value);
9856 }),
9857 Function: function Function(value) {
9858 return typeof value === 'function';
9859 },
9860 Null: function Null(value) {
9861 return value === undefined || value === null;
9862 },
9863 Number: function Number(value) {
9864 return typeof value === 'number';
9865 },
9866 Object: function Object(value) {
9867 return typeof value === 'object';
9868 },
9869 String: function String(value) {
9870 return typeof value === 'string';
9871 },
9872 '': function _() {
9873 return true;
ebd8d4e8 9874 }
ab78acc6
IC
9875};
9876
9877function tJSON(type) {
9878 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9879}
9880
ab78acc6
IC
9881function sJSON(type) {
9882 var json = tJSON(type);
9883 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9884}
9885
ab78acc6
IC
9886var otherTypes = {
9887 arrayOf: function arrayOf(type) {
9888 function arrayOf(value, strict) {
9889 try {
9890 return nativeTypes.Array(value) && value.every(function (x) {
9891 return typeforce(type, x, strict);
9892 });
9893 } catch (e) {
9894 return false;
9895 }
9896 }
9897 arrayOf.toJSON = function () {
9898 return [tJSON(type)];
9899 };
9900
9901 return arrayOf;
9902 },
9903
9904 maybe: function maybe(type) {
9905 function maybe(value, strict) {
9906 return nativeTypes.Null(value) || typeforce(type, value, strict);
9907 }
9908 maybe.toJSON = function () {
9909 return '?' + sJSON(type);
9910 };
9911
9912 return maybe;
9913 },
9914
9915 object: function object(type) {
9916 function object(value, strict) {
9917 typeforce(nativeTypes.Object, value, strict);
9918
9919 var propertyName, propertyType, propertyValue;
9920
9921 try {
9922 for (propertyName in type) {
9923 propertyType = type[propertyName];
9924 propertyValue = value[propertyName];
9925
9926 typeforce(propertyType, propertyValue, strict);
9927 }
9928 } catch (e) {
9929 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9930 }
9931
9932 if (strict) {
9933 for (propertyName in value) {
9934 if (type[propertyName]) continue;
9935
9936 throw new TypeError('Unexpected property "' + propertyName + '"');
9937 }
9938 }
9939
9940 return true;
9941 }
9942 object.toJSON = function () {
9943 return type;
9944 };
9945
9946 return object;
9947 },
9948
9949 oneOf: function oneOf() {
9950 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9951 types[_key] = arguments[_key];
9952 }
9953
9954 function oneOf(value, strict) {
9955 return types.some(function (type) {
9956 try {
9957 return typeforce(type, value, strict);
9958 } catch (e) {
9959 return false;
9960 }
9961 });
9962 }
9963 oneOf.toJSON = function () {
9964 return types.map(sJSON).join('|');
9965 };
9966
9967 return oneOf;
9968 },
9969
9970 quacksLike: function quacksLike(type) {
9971 function quacksLike(value, strict) {
9972 return type === getValueTypeName(value);
9973 }
9974 quacksLike.toJSON = function () {
9975 return type;
9976 };
9977
9978 return quacksLike;
9979 },
9980
9981 tuple: function tuple() {
9982 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9983 types[_key2] = arguments[_key2];
9984 }
9985
9986 function tuple(value, strict) {
9987 return types.every(function (type, i) {
9988 return typeforce(type, value[i], strict);
9989 });
9990 }
9991 tuple.toJSON = function () {
9992 return '(' + types.map(sJSON).join(', ') + ')';
9993 };
9994
9995 return tuple;
9996 },
9997
9998 value: function value(expected) {
9999 function value(actual) {
10000 return actual === expected;
10001 }
10002 value.toJSON = function () {
10003 return expected;
10004 };
10005
10006 return value;
10007 }
10008};
10009
10010function compile(type) {
10011 if (nativeTypes.String(type)) {
10012 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10013
10014 return nativeTypes[type] || otherTypes.quacksLike(type);
10015 } else if (type && nativeTypes.Object(type)) {
10016 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10017
10018 var compiled = {};
10019
10020 for (var propertyName in type) {
10021 compiled[propertyName] = compile(type[propertyName]);
10022 }
10023
10024 return otherTypes.object(compiled);
10025 } else if (nativeTypes.Function(type)) {
10026 return type;
10027 }
10028
10029 return otherTypes.value(type);
ebd8d4e8
IC
10030}
10031
ab78acc6
IC
10032function typeforce(_x3, _x4, _x5) {
10033 var _again = true;
10034
10035 _function: while (_again) {
10036 var type = _x3,
10037 value = _x4,
10038 strict = _x5;
10039 _again = false;
10040
10041 if (nativeTypes.Function(type)) {
10042 if (type(value, strict)) return true;
10043
10044 throw new TypeError(tfErrorString(type, value));
10045 }
10046
10047 // JIT
10048 _x3 = compile(type);
10049 _x4 = value;
10050 _x5 = strict;
10051 _again = true;
10052 continue _function;
10053 }
ebd8d4e8
IC
10054}
10055
ab78acc6
IC
10056// assign all types to typeforce function
10057var typeName;
10058Object.keys(nativeTypes).forEach(function (typeName) {
10059 var nativeType = nativeTypes[typeName];
10060 nativeType.toJSON = function () {
10061 return typeName;
10062 };
10063
10064 typeforce[typeName] = nativeType;
10065});
ebd8d4e8 10066
ab78acc6
IC
10067for (typeName in otherTypes) {
10068 typeforce[typeName] = otherTypes[typeName];
10069}
ebd8d4e8 10070
ab78acc6
IC
10071module.exports = typeforce;
10072module.exports.compile = compile;
10073}).call(this,require("buffer").Buffer)
10074},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10075(function (Buffer){
ab78acc6
IC
10076var assert = require('assert')
10077var base58check = require('bs58check')
10078var typeForce = require('typeforce')
10079var networks = require('./networks')
10080var scripts = require('./scripts')
ebd8d4e8 10081
ab78acc6 10082function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10083 for (var networkName in networks) {
10084 var network = networks[networkName]
10085
10086 if (version === network.pubKeyHash) return 'pubkeyhash'
10087 if (version === network.scriptHash) return 'scripthash'
10088 }
10089}
10090
ab78acc6
IC
10091function Address (hash, version) {
10092 typeForce('Buffer', hash)
10093
ebd8d4e8
IC
10094 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10095 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10096
10097 this.hash = hash
10098 this.version = version
10099}
10100
ab78acc6 10101Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10102 var payload = base58check.decode(string)
10103 var version = payload.readUInt8(0)
10104 var hash = payload.slice(1)
10105
10106 return new Address(hash, version)
10107}
10108
ab78acc6 10109Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10110 network = network || networks.bitcoin
10111
ab78acc6
IC
10112 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10113 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10114
ab78acc6 10115 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10116}
10117
ebd8d4e8
IC
10118Address.prototype.toBase58Check = function () {
10119 var payload = new Buffer(21)
10120 payload.writeUInt8(this.version, 0)
10121 this.hash.copy(payload, 1)
10122
10123 return base58check.encode(payload)
10124}
10125
ab78acc6 10126Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10127 var scriptType = findScriptTypeByVersion(this.version)
10128
10129 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10130 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10131
ab78acc6
IC
10132 assert(false, this.toString() + ' has no matching Script')
10133}
10134
10135Address.prototype.toString = Address.prototype.toBase58Check
10136
10137module.exports = Address
10138
10139}).call(this,require("buffer").Buffer)
10140},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10141var bs58check = require('bs58check')
10142
10143function decode () {
10144 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10145
10146 return bs58check.decode.apply(undefined, arguments)
10147}
10148
10149function encode () {
10150 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10151
10152 return bs58check.encode.apply(undefined, arguments)
10153}
10154
10155module.exports = {
10156 decode: decode,
10157 encode: encode
10158}
10159
10160},{"bs58check":31}],56:[function(require,module,exports){
10161(function (Buffer){
10162var assert = require('assert')
10163var bufferutils = require('./bufferutils')
10164var crypto = require('./crypto')
10165
10166var Transaction = require('./transaction')
10167
10168function Block () {
10169 this.version = 1
10170 this.prevHash = null
10171 this.merkleRoot = null
10172 this.timestamp = 0
10173 this.bits = 0
10174 this.nonce = 0
10175}
10176
10177Block.fromBuffer = function (buffer) {
10178 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10179
10180 var offset = 0
10181 function readSlice (n) {
10182 offset += n
10183 return buffer.slice(offset - n, offset)
10184 }
10185
10186 function readUInt32 () {
10187 var i = buffer.readUInt32LE(offset)
10188 offset += 4
10189 return i
10190 }
10191
10192 var block = new Block()
10193 block.version = readUInt32()
10194 block.prevHash = readSlice(32)
10195 block.merkleRoot = readSlice(32)
10196 block.timestamp = readUInt32()
10197 block.bits = readUInt32()
10198 block.nonce = readUInt32()
10199
10200 if (buffer.length === 80) return block
10201
10202 function readVarInt () {
10203 var vi = bufferutils.readVarInt(buffer, offset)
10204 offset += vi.size
10205 return vi.number
10206 }
10207
10208 // FIXME: poor performance
10209 function readTransaction () {
10210 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10211
10212 offset += tx.toBuffer().length
10213 return tx
10214 }
10215
10216 var nTransactions = readVarInt()
10217 block.transactions = []
10218
10219 for (var i = 0; i < nTransactions; ++i) {
10220 var tx = readTransaction()
10221 block.transactions.push(tx)
10222 }
10223
10224 return block
10225}
10226
10227Block.fromHex = function (hex) {
10228 return Block.fromBuffer(new Buffer(hex, 'hex'))
10229}
10230
10231Block.prototype.getHash = function () {
10232 return crypto.hash256(this.toBuffer(true))
10233}
10234
10235Block.prototype.getId = function () {
10236 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10237}
10238
ab78acc6
IC
10239Block.prototype.getUTCDate = function () {
10240 var date = new Date(0) // epoch
10241 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10242
ab78acc6
IC
10243 return date
10244}
ebd8d4e8 10245
ab78acc6
IC
10246Block.prototype.toBuffer = function (headersOnly) {
10247 var buffer = new Buffer(80)
ebd8d4e8 10248
ab78acc6
IC
10249 var offset = 0
10250 function writeSlice (slice) {
10251 slice.copy(buffer, offset)
10252 offset += slice.length
10253 }
ebd8d4e8 10254
ab78acc6
IC
10255 function writeUInt32 (i) {
10256 buffer.writeUInt32LE(i, offset)
10257 offset += 4
10258 }
ebd8d4e8 10259
ab78acc6
IC
10260 writeUInt32(this.version)
10261 writeSlice(this.prevHash)
10262 writeSlice(this.merkleRoot)
10263 writeUInt32(this.timestamp)
10264 writeUInt32(this.bits)
10265 writeUInt32(this.nonce)
ebd8d4e8 10266
ab78acc6 10267 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10268
ab78acc6
IC
10269 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10270 var txBuffers = this.transactions.map(function (tx) {
10271 return tx.toBuffer()
10272 })
ebd8d4e8 10273
ab78acc6 10274 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10275}
10276
ab78acc6
IC
10277Block.prototype.toHex = function (headersOnly) {
10278 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10279}
10280
ab78acc6
IC
10281module.exports = Block
10282
10283}).call(this,require("buffer").Buffer)
10284},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10285(function (Buffer){
10286var assert = require('assert')
10287var opcodes = require('./opcodes')
ebd8d4e8
IC
10288
10289// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10290function verifuint (value, max) {
ebd8d4e8
IC
10291 assert(typeof value === 'number', 'cannot write a non-number as a number')
10292 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10293 assert(value <= max, 'value is larger than maximum value for type')
10294 assert(Math.floor(value) === value, 'value has a fractional component')
10295}
10296
ab78acc6 10297function pushDataSize (i) {
ebd8d4e8 10298 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10299 : i < 0xff ? 2
10300 : i < 0xffff ? 3
10301 : 5
ebd8d4e8
IC
10302}
10303
ab78acc6 10304function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10305 var opcode = buffer.readUInt8(offset)
10306 var number, size
10307
10308 // ~6 bit
10309 if (opcode < opcodes.OP_PUSHDATA1) {
10310 number = opcode
10311 size = 1
10312
10313 // 8 bit
10314 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10315 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10316 number = buffer.readUInt8(offset + 1)
10317 size = 2
10318
10319 // 16 bit
10320 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10321 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10322 number = buffer.readUInt16LE(offset + 1)
10323 size = 3
10324
10325 // 32 bit
10326 } else {
ab78acc6 10327 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10328 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10329
10330 number = buffer.readUInt32LE(offset + 1)
10331 size = 5
ebd8d4e8
IC
10332 }
10333
10334 return {
10335 opcode: opcode,
10336 number: number,
10337 size: size
10338 }
10339}
10340
ab78acc6 10341function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10342 var a = buffer.readUInt32LE(offset)
10343 var b = buffer.readUInt32LE(offset + 4)
10344 b *= 0x100000000
10345
10346 verifuint(b + a, 0x001fffffffffffff)
10347
10348 return b + a
10349}
10350
ab78acc6 10351function readVarInt (buffer, offset) {
ebd8d4e8
IC
10352 var t = buffer.readUInt8(offset)
10353 var number, size
10354
10355 // 8 bit
10356 if (t < 253) {
10357 number = t
10358 size = 1
10359
10360 // 16 bit
10361 } else if (t < 254) {
10362 number = buffer.readUInt16LE(offset + 1)
10363 size = 3
10364
10365 // 32 bit
10366 } else if (t < 255) {
10367 number = buffer.readUInt32LE(offset + 1)
10368 size = 5
10369
10370 // 64 bit
10371 } else {
10372 number = readUInt64LE(buffer, offset + 1)
10373 size = 9
10374 }
10375
10376 return {
10377 number: number,
10378 size: size
10379 }
10380}
10381
ab78acc6 10382function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10383 var size = pushDataSize(number)
10384
10385 // ~6 bit
10386 if (size === 1) {
10387 buffer.writeUInt8(number, offset)
10388
10389 // 8 bit
10390 } else if (size === 2) {
10391 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10392 buffer.writeUInt8(number, offset + 1)
10393
10394 // 16 bit
10395 } else if (size === 3) {
10396 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10397 buffer.writeUInt16LE(number, offset + 1)
10398
10399 // 32 bit
10400 } else {
10401 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10402 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10403 }
10404
10405 return size
10406}
10407
ab78acc6 10408function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10409 verifuint(value, 0x001fffffffffffff)
10410
10411 buffer.writeInt32LE(value & -1, offset)
10412 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10413}
10414
ab78acc6
IC
10415function varIntSize (i) {
10416 return i < 253 ? 1
10417 : i < 0x10000 ? 3
10418 : i < 0x100000000 ? 5
10419 : 9
ebd8d4e8
IC
10420}
10421
ab78acc6 10422function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10423 var size = varIntSize(number)
10424
10425 // 8 bit
10426 if (size === 1) {
10427 buffer.writeUInt8(number, offset)
10428
10429 // 16 bit
10430 } else if (size === 3) {
10431 buffer.writeUInt8(253, offset)
10432 buffer.writeUInt16LE(number, offset + 1)
10433
10434 // 32 bit
10435 } else if (size === 5) {
10436 buffer.writeUInt8(254, offset)
10437 buffer.writeUInt32LE(number, offset + 1)
10438
10439 // 64 bit
10440 } else {
10441 buffer.writeUInt8(255, offset)
10442 writeUInt64LE(buffer, number, offset + 1)
10443 }
10444
10445 return size
10446}
10447
ab78acc6
IC
10448function varIntBuffer (i) {
10449 var size = varIntSize(i)
10450 var buffer = new Buffer(size)
10451 writeVarInt(buffer, i, 0)
10452
10453 return buffer
10454}
10455
10456function reverse (buffer) {
10457 var buffer2 = new Buffer(buffer)
10458 Array.prototype.reverse.call(buffer2)
10459 return buffer2
10460}
10461
ebd8d4e8
IC
10462module.exports = {
10463 pushDataSize: pushDataSize,
10464 readPushDataInt: readPushDataInt,
10465 readUInt64LE: readUInt64LE,
10466 readVarInt: readVarInt,
ab78acc6
IC
10467 reverse: reverse,
10468 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10469 varIntSize: varIntSize,
10470 writePushDataInt: writePushDataInt,
10471 writeUInt64LE: writeUInt64LE,
10472 writeVarInt: writeVarInt
10473}
10474
ab78acc6
IC
10475}).call(this,require("buffer").Buffer)
10476},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10477var createHash = require('create-hash')
ebd8d4e8 10478
ab78acc6 10479function hash160 (buffer) {
ebd8d4e8
IC
10480 return ripemd160(sha256(buffer))
10481}
10482
ab78acc6 10483function hash256 (buffer) {
ebd8d4e8
IC
10484 return sha256(sha256(buffer))
10485}
10486
ab78acc6
IC
10487function ripemd160 (buffer) {
10488 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10489}
10490
ab78acc6
IC
10491function sha1 (buffer) {
10492 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10493}
10494
ab78acc6
IC
10495function sha256 (buffer) {
10496 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10497}
10498
10499// FIXME: Name not consistent with others
ab78acc6 10500var createHmac = require('create-hmac')
ebd8d4e8 10501
ab78acc6
IC
10502function HmacSHA256 (buffer, secret) {
10503 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10504 return createHmac('sha256', secret).update(buffer).digest()
10505}
ebd8d4e8 10506
ab78acc6
IC
10507function HmacSHA512 (buffer, secret) {
10508 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10509 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10510}
10511
10512module.exports = {
10513 ripemd160: ripemd160,
10514 sha1: sha1,
10515 sha256: sha256,
10516 hash160: hash160,
10517 hash256: hash256,
10518 HmacSHA256: HmacSHA256,
10519 HmacSHA512: HmacSHA512
10520}
10521
ab78acc6 10522},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10523(function (Buffer){
ab78acc6
IC
10524var assert = require('assert')
10525var createHmac = require('create-hmac')
10526var typeForce = require('typeforce')
ebd8d4e8 10527
ab78acc6
IC
10528var BigInteger = require('bigi')
10529var ECSignature = require('./ecsignature')
10530
10531var ZERO = new Buffer([0])
10532var ONE = new Buffer([1])
ebd8d4e8
IC
10533
10534// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10535function deterministicGenerateK (curve, hash, d, checkSig) {
10536 typeForce('Buffer', hash)
10537 typeForce('BigInteger', d)
10538
10539 // FIXME: remove/uncomment for 2.0.0
10540 // typeForce('Function', checkSig)
10541
10542 if (typeof checkSig !== 'function') {
10543 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10544
10545 checkSig = function (k) {
10546 var G = curve.G
10547 var n = curve.n
10548 var e = BigInteger.fromBuffer(hash)
10549
10550 var Q = G.multiply(k)
10551
10552 if (curve.isInfinity(Q))
10553 return false
10554
10555 var r = Q.affineX.mod(n)
10556 if (r.signum() === 0)
10557 return false
10558
10559 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10560 if (s.signum() === 0)
10561 return false
10562
10563 return true
10564 }
10565 }
10566
10567 // sanity check
ebd8d4e8 10568 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10569
10570 var x = d.toBuffer(32)
10571 var k = new Buffer(32)
10572 var v = new Buffer(32)
10573
ab78acc6 10574 // Step A, ignored as hash already provided
ebd8d4e8
IC
10575 // Step B
10576 v.fill(1)
10577
10578 // Step C
10579 k.fill(0)
10580
10581 // Step D
ab78acc6
IC
10582 k = createHmac('sha256', k)
10583 .update(v)
10584 .update(ZERO)
10585 .update(x)
10586 .update(hash)
10587 .digest()
ebd8d4e8
IC
10588
10589 // Step E
ab78acc6 10590 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10591
10592 // Step F
ab78acc6
IC
10593 k = createHmac('sha256', k)
10594 .update(v)
10595 .update(ONE)
10596 .update(x)
10597 .update(hash)
10598 .digest()
ebd8d4e8
IC
10599
10600 // Step G
ab78acc6 10601 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10602
10603 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10604 // Step H2b
ab78acc6 10605 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10606
10607 var T = BigInteger.fromBuffer(v)
10608
ab78acc6
IC
10609 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10610 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10611 k = createHmac('sha256', k)
10612 .update(v)
10613 .update(ZERO)
10614 .digest()
10615
10616 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10617
ab78acc6
IC
10618 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10619 // Step H2b again
10620 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10621 T = BigInteger.fromBuffer(v)
10622 }
10623
10624 return T
10625}
10626
ab78acc6
IC
10627function sign (curve, hash, d) {
10628 var r, s
ebd8d4e8 10629
ab78acc6 10630 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10631 var n = curve.n
10632 var G = curve.G
ebd8d4e8 10633
ab78acc6
IC
10634 deterministicGenerateK(curve, hash, d, function (k) {
10635 var Q = G.multiply(k)
10636
10637 if (curve.isInfinity(Q))
10638 return false
10639
10640 r = Q.affineX.mod(n)
10641 if (r.signum() === 0)
10642 return false
10643
10644 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10645 if (s.signum() === 0)
10646 return false
ebd8d4e8 10647
ab78acc6
IC
10648 return true
10649 })
ebd8d4e8
IC
10650
10651 var N_OVER_TWO = n.shiftRight(1)
10652
10653 // enforce low S values, see bip62: 'low s values in signatures'
10654 if (s.compareTo(N_OVER_TWO) > 0) {
10655 s = n.subtract(s)
10656 }
10657
10658 return new ECSignature(r, s)
10659}
10660
ab78acc6 10661function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10662 var n = curve.n
10663 var G = curve.G
10664
10665 var r = signature.r
10666 var s = signature.s
10667
ab78acc6
IC
10668 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10669 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10670 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10671
ab78acc6 10672 // c = s^-1 mod n
ebd8d4e8
IC
10673 var c = s.modInverse(n)
10674
ab78acc6
IC
10675 // 1.4.4 Compute u1 = es^−1 mod n
10676 // u2 = rs^−1 mod n
ebd8d4e8
IC
10677 var u1 = e.multiply(c).mod(n)
10678 var u2 = r.multiply(c).mod(n)
10679
ab78acc6
IC
10680 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10681 var R = G.multiplyTwo(u1, Q, u2)
10682 var v = R.affineX.mod(n)
ebd8d4e8 10683
ab78acc6
IC
10684 // 1.4.5 (cont.) Enforce R is not at infinity
10685 if (curve.isInfinity(R)) return false
10686
10687 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10688 return v.equals(r)
10689}
10690
ab78acc6
IC
10691function verify (curve, hash, signature, Q) {
10692 // 1.4.2 H = Hash(M), already done by the user
10693 // 1.4.3 e = H
10694 var e = BigInteger.fromBuffer(hash)
10695
10696 return verifyRaw(curve, e, signature, Q)
10697}
10698
ebd8d4e8
IC
10699/**
10700 * Recover a public key from a signature.
10701 *
10702 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10703 * Key Recovery Operation".
10704 *
10705 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10706 */
ab78acc6 10707function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10708 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10709
ab78acc6
IC
10710 var n = curve.n
10711 var G = curve.G
10712
ebd8d4e8
IC
10713 var r = signature.r
10714 var s = signature.s
10715
ab78acc6
IC
10716 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10717 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10718
ebd8d4e8
IC
10719 // A set LSB signifies that the y-coordinate is odd
10720 var isYOdd = i & 1
10721
10722 // The more significant bit specifies whether we should use the
10723 // first or second candidate key.
10724 var isSecondKey = i >> 1
10725
ebd8d4e8
IC
10726 // 1.1 Let x = r + jn
10727 var x = isSecondKey ? r.add(n) : r
10728 var R = curve.pointFromX(isYOdd, x)
10729
10730 // 1.4 Check that nR is at infinity
10731 var nR = R.multiply(n)
10732 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10733
10734 // Compute -e from e
10735 var eNeg = e.negate().mod(n)
10736
10737 // 1.6.1 Compute Q = r^-1 (sR - eG)
10738 // Q = r^-1 (sR + -eG)
10739 var rInv = r.modInverse(n)
10740
10741 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10742 curve.validate(Q)
10743
10744 return Q
10745}
10746
10747/**
10748 * Calculate pubkey extraction parameter.
10749 *
10750 * When extracting a pubkey from a signature, we have to
10751 * distinguish four different cases. Rather than putting this
10752 * burden on the verifier, Bitcoin includes a 2-bit value with the
10753 * signature.
10754 *
10755 * This function simply tries all four cases and returns the value
10756 * that resulted in a successful pubkey recovery.
10757 */
ab78acc6 10758function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10759 for (var i = 0; i < 4; i++) {
10760 var Qprime = recoverPubKey(curve, e, signature, i)
10761
10762 // 1.6.2 Verify Q
10763 if (Qprime.equals(Q)) {
10764 return i
10765 }
10766 }
10767
10768 throw new Error('Unable to find valid recovery factor')
10769}
10770
10771module.exports = {
10772 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10773 deterministicGenerateK: deterministicGenerateK,
10774 recoverPubKey: recoverPubKey,
10775 sign: sign,
10776 verify: verify,
10777 verifyRaw: verifyRaw
10778}
10779
ab78acc6
IC
10780}).call(this,require("buffer").Buffer)
10781},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10782(function (Buffer){
ab78acc6
IC
10783var assert = require('assert')
10784var base58check = require('bs58check')
10785var ecdsa = require('./ecdsa')
10786var networks = require('./networks')
10787var randomBytes = require('randombytes')
10788var typeForce = require('typeforce')
ebd8d4e8 10789
ab78acc6
IC
10790var BigInteger = require('bigi')
10791var ECPubKey = require('./ecpubkey')
ebd8d4e8 10792
ab78acc6
IC
10793var ecurve = require('ecurve')
10794var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10795
ab78acc6 10796function ECKey (d, compressed) {
ebd8d4e8 10797 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10798 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10799
ab78acc6 10800 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10801
10802 this.d = d
10803 this.pub = new ECPubKey(Q, compressed)
10804}
10805
ab78acc6
IC
10806// Constants
10807ECKey.curve = secp256k1
10808
ebd8d4e8 10809// Static constructors
ab78acc6 10810ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10811 var payload = base58check.decode(string)
10812 var compressed = false
10813
10814 // Ignore the version byte
10815 payload = payload.slice(1)
10816
10817 if (payload.length === 33) {
10818 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10819
10820 // Truncate the compression flag
10821 payload = payload.slice(0, -1)
10822 compressed = true
10823 }
10824
10825 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10826
10827 var d = BigInteger.fromBuffer(payload)
10828 return new ECKey(d, compressed)
10829}
10830
ab78acc6
IC
10831ECKey.makeRandom = function (compressed, rng) {
10832 rng = rng || randomBytes
ebd8d4e8
IC
10833
10834 var buffer = rng(32)
ab78acc6
IC
10835 typeForce('Buffer', buffer)
10836 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10837
10838 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10839 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10840
10841 return new ECKey(d, compressed)
10842}
10843
10844// Export functions
ab78acc6 10845ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10846 network = network || networks.bitcoin
10847
10848 var bufferLen = this.pub.compressed ? 34 : 33
10849 var buffer = new Buffer(bufferLen)
10850
10851 buffer.writeUInt8(network.wif, 0)
10852 this.d.toBuffer(32).copy(buffer, 1)
10853
10854 if (this.pub.compressed) {
10855 buffer.writeUInt8(0x01, 33)
10856 }
10857
10858 return base58check.encode(buffer)
10859}
10860
10861// Operations
ab78acc6
IC
10862ECKey.prototype.sign = function (hash) {
10863 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10864}
10865
10866module.exports = ECKey
10867
ab78acc6
IC
10868}).call(this,require("buffer").Buffer)
10869},{"./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 10870(function (Buffer){
ab78acc6
IC
10871var crypto = require('./crypto')
10872var ecdsa = require('./ecdsa')
10873var typeForce = require('typeforce')
10874var networks = require('./networks')
ebd8d4e8 10875
ab78acc6 10876var Address = require('./address')
ebd8d4e8 10877
ab78acc6
IC
10878var ecurve = require('ecurve')
10879var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10880
ab78acc6
IC
10881function ECPubKey (Q, compressed) {
10882 if (compressed === undefined) {
10883 compressed = true
10884 }
ebd8d4e8 10885
ab78acc6
IC
10886 typeForce('Point', Q)
10887 typeForce('Boolean', compressed)
ebd8d4e8
IC
10888
10889 this.compressed = compressed
10890 this.Q = Q
10891}
10892
ab78acc6
IC
10893// Constants
10894ECPubKey.curve = secp256k1
10895
ebd8d4e8 10896// Static constructors
ab78acc6
IC
10897ECPubKey.fromBuffer = function (buffer) {
10898 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10899 return new ECPubKey(Q, Q.compressed)
10900}
10901
ab78acc6 10902ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10903 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10904}
10905
10906// Operations
ab78acc6 10907ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10908 network = network || networks.bitcoin
10909
10910 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10911}
10912
ab78acc6
IC
10913ECPubKey.prototype.verify = function (hash, signature) {
10914 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10915}
10916
10917// Export functions
ab78acc6 10918ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10919 return this.Q.getEncoded(this.compressed)
10920}
10921
ab78acc6 10922ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10923 return this.toBuffer().toString('hex')
10924}
10925
10926module.exports = ECPubKey
10927
ab78acc6
IC
10928}).call(this,require("buffer").Buffer)
10929},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10930(function (Buffer){
ab78acc6
IC
10931var assert = require('assert')
10932var typeForce = require('typeforce')
10933
10934var BigInteger = require('bigi')
10935
10936function ECSignature (r, s) {
10937 typeForce('BigInteger', r)
10938 typeForce('BigInteger', s)
ebd8d4e8 10939
ebd8d4e8
IC
10940 this.r = r
10941 this.s = s
10942}
10943
ab78acc6 10944ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10945 assert.equal(buffer.length, 65, 'Invalid signature length')
10946 var i = buffer.readUInt8(0) - 27
10947
10948 // At most 3 bits
10949 assert.equal(i, i & 7, 'Invalid signature parameter')
10950 var compressed = !!(i & 4)
10951
10952 // Recovery param only
10953 i = i & 3
10954
10955 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10956 var s = BigInteger.fromBuffer(buffer.slice(33))
10957
10958 return {
10959 compressed: compressed,
10960 i: i,
10961 signature: new ECSignature(r, s)
10962 }
10963}
10964
ab78acc6 10965ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10966 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10967 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10968 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10969
10970 var rLen = buffer.readUInt8(3)
10971 assert(rLen > 0, 'R length is zero')
10972
10973 var offset = 4 + rLen
10974 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10975
10976 var sLen = buffer.readUInt8(offset + 1)
10977 assert(sLen > 0, 'S length is zero')
10978
10979 var rB = buffer.slice(4, offset)
10980 var sB = buffer.slice(offset + 2)
10981 offset += 2 + sLen
10982
10983 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10984 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10985 }
10986
10987 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10988 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10989 }
10990
10991 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10992 var r = BigInteger.fromDERInteger(rB)
10993 var s = BigInteger.fromDERInteger(sB)
10994
10995 assert(r.signum() >= 0, 'R value is negative')
10996 assert(s.signum() >= 0, 'S value is negative')
10997
10998 return new ECSignature(r, s)
10999}
11000
ab78acc6
IC
11001// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11002ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
11003 var hashType = buffer.readUInt8(buffer.length - 1)
11004 var hashTypeMod = hashType & ~0x80
11005
ab78acc6 11006 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
11007
11008 return {
11009 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11010 hashType: hashType
11011 }
11012}
11013
ab78acc6
IC
11014ECSignature.prototype.toCompact = function (i, compressed) {
11015 if (compressed) {
11016 i += 4
11017 }
11018
ebd8d4e8
IC
11019 i += 27
11020
11021 var buffer = new Buffer(65)
11022 buffer.writeUInt8(i, 0)
11023
11024 this.r.toBuffer(32).copy(buffer, 1)
11025 this.s.toBuffer(32).copy(buffer, 33)
11026
11027 return buffer
11028}
11029
ab78acc6 11030ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
11031 var rBa = this.r.toDERInteger()
11032 var sBa = this.s.toDERInteger()
11033
11034 var sequence = []
ab78acc6
IC
11035
11036 // INTEGER
11037 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
11038 sequence = sequence.concat(rBa)
11039
ab78acc6
IC
11040 // INTEGER
11041 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
11042 sequence = sequence.concat(sBa)
11043
ab78acc6
IC
11044 // SEQUENCE
11045 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
11046
11047 return new Buffer(sequence)
11048}
11049
ab78acc6
IC
11050ECSignature.prototype.toScriptSignature = function (hashType) {
11051 var hashTypeMod = hashType & ~0x80
11052 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11053
ebd8d4e8
IC
11054 var hashTypeBuffer = new Buffer(1)
11055 hashTypeBuffer.writeUInt8(hashType, 0)
11056
11057 return Buffer.concat([this.toDER(), hashTypeBuffer])
11058}
11059
11060module.exports = ECSignature
11061
ab78acc6
IC
11062}).call(this,require("buffer").Buffer)
11063},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11064(function (Buffer){
ab78acc6
IC
11065var assert = require('assert')
11066var base58check = require('bs58check')
11067var bcrypto = require('./crypto')
11068var createHmac = require('create-hmac')
11069var typeForce = require('typeforce')
11070var networks = require('./networks')
11071
11072var BigInteger = require('bigi')
11073var ECKey = require('./eckey')
11074var ECPubKey = require('./ecpubkey')
11075
11076var ecurve = require('ecurve')
ebd8d4e8
IC
11077var curve = ecurve.getCurveByName('secp256k1')
11078
ab78acc6 11079function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11080 for (var name in networks) {
11081 var network = networks[name]
11082
ab78acc6
IC
11083 if (version === network.bip32.private || version === network.bip32.public) {
11084 return network
ebd8d4e8
IC
11085 }
11086 }
11087
ab78acc6 11088 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11089}
11090
ab78acc6 11091function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11092 network = network || networks.bitcoin
11093
ab78acc6
IC
11094 typeForce('Buffer', chainCode)
11095
11096 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11097 assert(network.bip32, 'Unknown BIP32 constants for network')
11098
11099 this.chainCode = chainCode
11100 this.depth = 0
11101 this.index = 0
ab78acc6 11102 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11103 this.network = network
11104
11105 if (K instanceof BigInteger) {
11106 this.privKey = new ECKey(K, true)
11107 this.pubKey = this.privKey.pub
ab78acc6
IC
11108 } else if (K instanceof ECKey) {
11109 assert(K.pub.compressed, 'ECKey must be compressed')
11110 this.privKey = K
11111 this.pubKey = K.pub
11112 } else if (K instanceof ECPubKey) {
11113 assert(K.compressed, 'ECPubKey must be compressed')
11114 this.pubKey = K
ebd8d4e8
IC
11115 } else {
11116 this.pubKey = new ECPubKey(K, true)
11117 }
11118}
11119
11120HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11121HDNode.HIGHEST_BIT = 0x80000000
11122HDNode.LENGTH = 78
11123
ab78acc6
IC
11124HDNode.fromSeedBuffer = function (seed, network) {
11125 typeForce('Buffer', seed)
11126
11127 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11128 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11129
11130 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11131 var IL = I.slice(0, 32)
11132 var IR = I.slice(32)
11133
11134 // In case IL is 0 or >= n, the master key is invalid
11135 // This is handled by `new ECKey` in the HDNode constructor
11136 var pIL = BigInteger.fromBuffer(IL)
11137
11138 return new HDNode(pIL, IR, network)
11139}
11140
ab78acc6 11141HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11142 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11143}
11144
ab78acc6
IC
11145HDNode.fromBase58 = function (string, network) {
11146 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11147}
11148
ab78acc6
IC
11149// FIXME: remove in 2.x.y
11150HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11151 if (!__ignoreDeprecation) {
11152 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11153 }
11154
ebd8d4e8
IC
11155 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11156
11157 // 4 byte: version bytes
11158 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11159
11160 if (network) {
11161 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11162
11163 // auto-detect
11164 } else {
11165 network = findBIP32NetworkByVersion(version)
11166 }
ebd8d4e8
IC
11167
11168 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11169 var depth = buffer.readUInt8(4)
11170
11171 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11172 var parentFingerprint = buffer.readUInt32BE(5)
11173 if (depth === 0) {
11174 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11175 }
11176
11177 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11178 // This is encoded in MSB order. (0x00000000 if master key)
11179 var index = buffer.readUInt32BE(9)
11180 assert(depth > 0 || index === 0, 'Invalid index')
11181
11182 // 32 bytes: the chain code
11183 var chainCode = buffer.slice(13, 45)
ab78acc6 11184 var data, hd
ebd8d4e8
IC
11185
11186 // 33 bytes: private key data (0x00 + k)
ab78acc6 11187 if (version === network.bip32.private) {
ebd8d4e8 11188 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11189 data = buffer.slice(46, 78)
ebd8d4e8 11190 var d = BigInteger.fromBuffer(data)
ab78acc6 11191 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11192
11193 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11194 } else {
ab78acc6 11195 data = buffer.slice(45, 78)
ebd8d4e8
IC
11196 var Q = ecurve.Point.decodeFrom(curve, data)
11197 assert.equal(Q.compressed, true, 'Invalid public key')
11198
11199 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11200 // If not, the extended public key is invalid.
11201 curve.validate(Q)
11202
ab78acc6 11203 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11204 }
11205
11206 hd.depth = depth
11207 hd.index = index
11208 hd.parentFingerprint = parentFingerprint
11209
11210 return hd
11211}
11212
ab78acc6
IC
11213// FIXME: remove in 2.x.y
11214HDNode.fromHex = function (hex, network) {
11215 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11216}
11217
ab78acc6
IC
11218HDNode.prototype.getIdentifier = function () {
11219 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11220}
11221
ab78acc6 11222HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11223 return this.getIdentifier().slice(0, 4)
11224}
11225
ab78acc6 11226HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11227 return this.pubKey.getAddress(this.network)
11228}
11229
ab78acc6
IC
11230HDNode.prototype.neutered = function () {
11231 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11232 neutered.depth = this.depth
11233 neutered.index = this.index
11234 neutered.parentFingerprint = this.parentFingerprint
11235
11236 return neutered
11237}
11238
11239HDNode.prototype.toBase58 = function (isPrivate) {
11240 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11241}
11242
ab78acc6
IC
11243// FIXME: remove in 2.x.y
11244HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11245 if (isPrivate === undefined) {
11246 isPrivate = !!this.privKey
11247
11248 // FIXME: remove in 2.x.y
11249 } else {
11250 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11251 }
11252
11253 if (!__ignoreDeprecation) {
11254 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11255 }
ebd8d4e8
IC
11256
11257 // Version
11258 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11259 var buffer = new Buffer(HDNode.LENGTH)
11260
11261 // 4 bytes: version bytes
11262 buffer.writeUInt32BE(version, 0)
11263
11264 // Depth
11265 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11266 buffer.writeUInt8(this.depth, 4)
11267
11268 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11269 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11270
11271 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11272 // This is encoded in Big endian. (0x00000000 if master key)
11273 buffer.writeUInt32BE(this.index, 9)
11274
11275 // 32 bytes: the chain code
11276 this.chainCode.copy(buffer, 13)
11277
11278 // 33 bytes: the public key or private key data
11279 if (isPrivate) {
ab78acc6 11280 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11281 assert(this.privKey, 'Missing private key')
11282
11283 // 0x00 + k for private keys
11284 buffer.writeUInt8(0, 45)
11285 this.privKey.d.toBuffer(32).copy(buffer, 46)
11286 } else {
ebd8d4e8
IC
11287 // X9.62 encoding for public keys
11288 this.pubKey.toBuffer().copy(buffer, 45)
11289 }
11290
11291 return buffer
11292}
11293
ab78acc6
IC
11294// FIXME: remove in 2.x.y
11295HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11296 return this.toBuffer(isPrivate).toString('hex')
11297}
11298
11299// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11300HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11301 var isHardened = index >= HDNode.HIGHEST_BIT
11302 var indexBuffer = new Buffer(4)
11303 indexBuffer.writeUInt32BE(index, 0)
11304
11305 var data
11306
11307 // Hardened child
11308 if (isHardened) {
11309 assert(this.privKey, 'Could not derive hardened child key')
11310
11311 // data = 0x00 || ser256(kpar) || ser32(index)
11312 data = Buffer.concat([
11313 this.privKey.d.toBuffer(33),
11314 indexBuffer
11315 ])
11316
11317 // Normal child
11318 } else {
11319 // data = serP(point(kpar)) || ser32(index)
11320 // = serP(Kpar) || ser32(index)
11321 data = Buffer.concat([
11322 this.pubKey.toBuffer(),
11323 indexBuffer
11324 ])
11325 }
11326
ab78acc6 11327 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11328 var IL = I.slice(0, 32)
11329 var IR = I.slice(32)
11330
11331 var pIL = BigInteger.fromBuffer(IL)
11332
11333 // In case parse256(IL) >= n, proceed with the next value for i
11334 if (pIL.compareTo(curve.n) >= 0) {
11335 return this.derive(index + 1)
11336 }
11337
11338 // Private parent key -> private child key
11339 var hd
11340 if (this.privKey) {
11341 // ki = parse256(IL) + kpar (mod n)
11342 var ki = pIL.add(this.privKey.d).mod(curve.n)
11343
11344 // In case ki == 0, proceed with the next value for i
11345 if (ki.signum() === 0) {
11346 return this.derive(index + 1)
11347 }
11348
11349 hd = new HDNode(ki, IR, this.network)
11350
11351 // Public parent key -> public child key
11352 } else {
11353 // Ki = point(parse256(IL)) + Kpar
11354 // = G*IL + Kpar
11355 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11356
11357 // In case Ki is the point at infinity, proceed with the next value for i
11358 if (curve.isInfinity(Ki)) {
11359 return this.derive(index + 1)
11360 }
11361
11362 hd = new HDNode(Ki, IR, this.network)
11363 }
11364
11365 hd.depth = this.depth + 1
11366 hd.index = index
11367 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11368
11369 return hd
11370}
11371
ab78acc6 11372HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11373 // Only derives hardened private keys by default
11374 return this.derive(index + HDNode.HIGHEST_BIT)
11375}
11376
11377HDNode.prototype.toString = HDNode.prototype.toBase58
11378
11379module.exports = HDNode
11380
ab78acc6
IC
11381}).call(this,require("buffer").Buffer)
11382},{"./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 11383module.exports = {
ab78acc6
IC
11384 Address: require('./address'),
11385 base58check: require('./base58check'),
11386 Block: require('./block'),
11387 bufferutils: require('./bufferutils'),
11388 crypto: require('./crypto'),
11389 ecdsa: require('./ecdsa'),
11390 ECKey: require('./eckey'),
11391 ECPubKey: require('./ecpubkey'),
11392 ECSignature: require('./ecsignature'),
11393 Message: require('./message'),
11394 opcodes: require('./opcodes'),
11395 HDNode: require('./hdnode'),
11396 Script: require('./script'),
11397 scripts: require('./scripts'),
11398 Transaction: require('./transaction'),
11399 TransactionBuilder: require('./transaction_builder'),
11400 networks: require('./networks'),
11401 Wallet: require('./wallet')
11402}
11403
11404},{"./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 11405(function (Buffer){
ab78acc6
IC
11406var bufferutils = require('./bufferutils')
11407var crypto = require('./crypto')
11408var ecdsa = require('./ecdsa')
11409var networks = require('./networks')
11410
11411var BigInteger = require('bigi')
11412var ECPubKey = require('./ecpubkey')
11413var ECSignature = require('./ecsignature')
11414
11415var ecurve = require('ecurve')
ebd8d4e8
IC
11416var ecparams = ecurve.getCurveByName('secp256k1')
11417
ab78acc6 11418function magicHash (message, network) {
ebd8d4e8
IC
11419 var magicPrefix = new Buffer(network.magicPrefix)
11420 var messageBuffer = new Buffer(message)
ab78acc6 11421 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11422
11423 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11424 return crypto.hash256(buffer)
11425}
11426
ab78acc6 11427function sign (privKey, message, network) {
ebd8d4e8
IC
11428 network = network || networks.bitcoin
11429
11430 var hash = magicHash(message, network)
11431 var signature = privKey.sign(hash)
11432 var e = BigInteger.fromBuffer(hash)
11433 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11434
11435 return signature.toCompact(i, privKey.pub.compressed)
11436}
11437
11438// TODO: network could be implied from address
ab78acc6
IC
11439function verify (address, signature, message, network) {
11440 if (!Buffer.isBuffer(signature)) {
11441 signature = new Buffer(signature, 'base64')
ebd8d4e8 11442 }
ab78acc6 11443
ebd8d4e8
IC
11444 network = network || networks.bitcoin
11445
11446 var hash = magicHash(message, network)
ab78acc6 11447 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11448 var e = BigInteger.fromBuffer(hash)
11449 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11450
11451 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11452 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11453}
11454
11455module.exports = {
11456 magicHash: magicHash,
11457 sign: sign,
11458 verify: verify
11459}
11460
ab78acc6
IC
11461}).call(this,require("buffer").Buffer)
11462},{"./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
11463// https://en.bitcoin.it/wiki/List_of_address_prefixes
11464// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11465
11466var networks = {
11467 bitcoin: {
11468 magicPrefix: '\x18Bitcoin Signed Message:\n',
11469 bip32: {
11470 public: 0x0488b21e,
11471 private: 0x0488ade4
11472 },
11473 pubKeyHash: 0x00,
11474 scriptHash: 0x05,
11475 wif: 0x80,
11476 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11477 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11478 estimateFee: estimateFee('bitcoin')
a9385c1b 11479 },
ab78acc6
IC
11480 testnet: {
11481 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11482 bip32: {
ab78acc6
IC
11483 public: 0x043587cf,
11484 private: 0x04358394
a9385c1b 11485 },
ab78acc6
IC
11486 pubKeyHash: 0x6f,
11487 scriptHash: 0xc4,
11488 wif: 0xef,
11489 dustThreshold: 546,
cb325c58 11490 feePerKb: 10000,
ab78acc6 11491 estimateFee: estimateFee('testnet')
a9385c1b 11492 },
ab78acc6
IC
11493 litecoin: {
11494 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11495 bip32: {
ab78acc6
IC
11496 public: 0x019da462,
11497 private: 0x019d9cfe
a9385c1b 11498 },
ab78acc6
IC
11499 pubKeyHash: 0x30,
11500 scriptHash: 0x05,
11501 wif: 0xb0,
11502 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11503 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11504 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11505 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11506 },
11507 dogecoin: {
11508 magicPrefix: '\x19Dogecoin Signed Message:\n',
11509 bip32: {
11510 public: 0x02facafd,
11511 private: 0x02fac398
11512 },
11513 pubKeyHash: 0x1e,
11514 scriptHash: 0x16,
11515 wif: 0x9e,
11516 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11517 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11518 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11519 estimateFee: estimateFee('dogecoin')
11520 },
ab78acc6
IC
11521 viacoin: {
11522 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11523 bip32: {
ab78acc6
IC
11524 public: 0x0488b21e,
11525 private: 0x0488ade4
ebd8d4e8 11526 },
ab78acc6
IC
11527 pubKeyHash: 0x47,
11528 scriptHash: 0x21,
11529 wif: 0xc7,
11530 dustThreshold: 560,
11531 dustSoftThreshold: 100000,
11532 feePerKb: 100000, //
11533 estimateFee: estimateFee('viacoin')
ebd8d4e8 11534 },
ab78acc6
IC
11535 viacointestnet: {
11536 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11537 bip32: {
11538 public: 0x043587cf,
11539 private: 0x04358394
11540 },
ab78acc6 11541 pubKeyHash: 0x7f,
ebd8d4e8 11542 scriptHash: 0xc4,
ab78acc6
IC
11543 wif: 0xff,
11544 dustThreshold: 560,
11545 dustSoftThreshold: 100000,
11546 feePerKb: 100000,
11547 estimateFee: estimateFee('viacointestnet')
11548 },
11549 gamerscoin: {
11550 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11551 bip32: {
11552 public: 0x019da462,
11553 private: 0x019d9cfe
11554 },
11555 pubKeyHash: 0x26,
11556 scriptHash: 0x05,
11557 wif: 0xA6,
11558 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11559 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11560 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11561 estimateFee: estimateFee('gamerscoin')
11562 },
11563 jumbucks: {
11564 magicPrefix: '\x19Jumbucks Signed Message:\n',
11565 bip32: {
11566 public: 0x037a689a,
11567 private: 0x037a6460
11568 },
11569 pubKeyHash: 0x2b,
11570 scriptHash: 0x05,
11571 wif: 0xab,
11572 dustThreshold: 0,
11573 dustSoftThreshold: 10000,
ebd8d4e8 11574 feePerKb: 10000,
ab78acc6
IC
11575 estimateFee: estimateFee('jumbucks')
11576 },
11577 zetacoin: {
11578 magicPrefix: '\x18Zetacoin Signed Message:\n',
11579 bip32: {
11580 public: 0x0488b21e,
11581 private: 0x0488ade4
11582 },
11583 pubKeyHash: 0x50,
11584 scriptHash: 0x09,
11585 wif: 0xe0,
11586 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11587 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11588 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11589 }
11590}
11591
ab78acc6
IC
11592function estimateFee (type) {
11593 return function (tx) {
ebd8d4e8
IC
11594 var network = networks[type]
11595 var baseFee = network.feePerKb
11596 var byteSize = tx.toBuffer().length
11597
11598 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11599 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11600
ab78acc6 11601 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11602 if (e.value < network.dustSoftThreshold) {
11603 fee += baseFee
11604 }
11605 })
11606
11607 return fee
11608 }
11609}
11610
11611module.exports = networks
11612
ab78acc6 11613},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11614module.exports = {
11615 // push value
ab78acc6
IC
11616 OP_FALSE: 0,
11617 OP_0: 0,
11618 OP_PUSHDATA1: 76,
11619 OP_PUSHDATA2: 77,
11620 OP_PUSHDATA4: 78,
11621 OP_1NEGATE: 79,
11622 OP_RESERVED: 80,
11623 OP_1: 81,
11624 OP_TRUE: 81,
11625 OP_2: 82,
11626 OP_3: 83,
11627 OP_4: 84,
11628 OP_5: 85,
11629 OP_6: 86,
11630 OP_7: 87,
11631 OP_8: 88,
11632 OP_9: 89,
11633 OP_10: 90,
11634 OP_11: 91,
11635 OP_12: 92,
11636 OP_13: 93,
11637 OP_14: 94,
11638 OP_15: 95,
11639 OP_16: 96,
ebd8d4e8
IC
11640
11641 // control
ab78acc6
IC
11642 OP_NOP: 97,
11643 OP_VER: 98,
11644 OP_IF: 99,
11645 OP_NOTIF: 100,
11646 OP_VERIF: 101,
11647 OP_VERNOTIF: 102,
11648 OP_ELSE: 103,
11649 OP_ENDIF: 104,
11650 OP_VERIFY: 105,
11651 OP_RETURN: 106,
ebd8d4e8
IC
11652
11653 // stack ops
ab78acc6
IC
11654 OP_TOALTSTACK: 107,
11655 OP_FROMALTSTACK: 108,
11656 OP_2DROP: 109,
11657 OP_2DUP: 110,
11658 OP_3DUP: 111,
11659 OP_2OVER: 112,
11660 OP_2ROT: 113,
11661 OP_2SWAP: 114,
11662 OP_IFDUP: 115,
11663 OP_DEPTH: 116,
11664 OP_DROP: 117,
11665 OP_DUP: 118,
11666 OP_NIP: 119,
11667 OP_OVER: 120,
11668 OP_PICK: 121,
11669 OP_ROLL: 122,
11670 OP_ROT: 123,
11671 OP_SWAP: 124,
11672 OP_TUCK: 125,
ebd8d4e8
IC
11673
11674 // splice ops
ab78acc6
IC
11675 OP_CAT: 126,
11676 OP_SUBSTR: 127,
11677 OP_LEFT: 128,
11678 OP_RIGHT: 129,
11679 OP_SIZE: 130,
ebd8d4e8
IC
11680
11681 // bit logic
ab78acc6
IC
11682 OP_INVERT: 131,
11683 OP_AND: 132,
11684 OP_OR: 133,
11685 OP_XOR: 134,
11686 OP_EQUAL: 135,
11687 OP_EQUALVERIFY: 136,
11688 OP_RESERVED1: 137,
11689 OP_RESERVED2: 138,
ebd8d4e8
IC
11690
11691 // numeric
ab78acc6
IC
11692 OP_1ADD: 139,
11693 OP_1SUB: 140,
11694 OP_2MUL: 141,
11695 OP_2DIV: 142,
11696 OP_NEGATE: 143,
11697 OP_ABS: 144,
11698 OP_NOT: 145,
11699 OP_0NOTEQUAL: 146,
11700
11701 OP_ADD: 147,
11702 OP_SUB: 148,
11703 OP_MUL: 149,
11704 OP_DIV: 150,
11705 OP_MOD: 151,
11706 OP_LSHIFT: 152,
11707 OP_RSHIFT: 153,
11708
11709 OP_BOOLAND: 154,
11710 OP_BOOLOR: 155,
11711 OP_NUMEQUAL: 156,
11712 OP_NUMEQUALVERIFY: 157,
11713 OP_NUMNOTEQUAL: 158,
11714 OP_LESSTHAN: 159,
11715 OP_GREATERTHAN: 160,
11716 OP_LESSTHANOREQUAL: 161,
11717 OP_GREATERTHANOREQUAL: 162,
11718 OP_MIN: 163,
11719 OP_MAX: 164,
11720
11721 OP_WITHIN: 165,
ebd8d4e8
IC
11722
11723 // crypto
ab78acc6
IC
11724 OP_RIPEMD160: 166,
11725 OP_SHA1: 167,
11726 OP_SHA256: 168,
11727 OP_HASH160: 169,
11728 OP_HASH256: 170,
11729 OP_CODESEPARATOR: 171,
11730 OP_CHECKSIG: 172,
11731 OP_CHECKSIGVERIFY: 173,
11732 OP_CHECKMULTISIG: 174,
11733 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11734
11735 // expansion
ab78acc6
IC
11736 OP_NOP1: 176,
11737 OP_NOP2: 177,
11738 OP_NOP3: 178,
11739 OP_NOP4: 179,
11740 OP_NOP5: 180,
11741 OP_NOP6: 181,
11742 OP_NOP7: 182,
11743 OP_NOP8: 183,
11744 OP_NOP9: 184,
11745 OP_NOP10: 185,
ebd8d4e8
IC
11746
11747 // template matching params
ab78acc6
IC
11748 OP_PUBKEYHASH: 253,
11749 OP_PUBKEY: 254,
11750 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11751}
11752
ab78acc6 11753},{}],68:[function(require,module,exports){
ebd8d4e8 11754(function (Buffer){
ab78acc6
IC
11755var assert = require('assert')
11756var bufferutils = require('./bufferutils')
11757var crypto = require('./crypto')
11758var typeForce = require('typeforce')
11759var opcodes = require('./opcodes')
ebd8d4e8 11760
ab78acc6
IC
11761function Script (buffer, chunks) {
11762 typeForce('Buffer', buffer)
11763 typeForce('Array', chunks)
ebd8d4e8
IC
11764
11765 this.buffer = buffer
11766 this.chunks = chunks
11767}
11768
ab78acc6 11769Script.fromASM = function (asm) {
ebd8d4e8 11770 var strChunks = asm.split(' ')
ab78acc6
IC
11771 var chunks = strChunks.map(function (strChunk) {
11772 // opcode
ebd8d4e8
IC
11773 if (strChunk in opcodes) {
11774 return opcodes[strChunk]
11775
ab78acc6 11776 // data chunk
ebd8d4e8
IC
11777 } else {
11778 return new Buffer(strChunk, 'hex')
11779 }
11780 })
11781
11782 return Script.fromChunks(chunks)
11783}
11784
ab78acc6 11785Script.fromBuffer = function (buffer) {
ebd8d4e8 11786 var chunks = []
ebd8d4e8
IC
11787 var i = 0
11788
11789 while (i < buffer.length) {
11790 var opcode = buffer.readUInt8(i)
11791
ab78acc6 11792 // data chunk
ebd8d4e8
IC
11793 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11794 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11795
11796 // did reading a pushDataInt fail? return non-chunked script
11797 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11798 i += d.size
11799
ab78acc6
IC
11800 // attempt to read too much data?
11801 if (i + d.number > buffer.length) return new Script(buffer, [])
11802
ebd8d4e8
IC
11803 var data = buffer.slice(i, i + d.number)
11804 i += d.number
11805
11806 chunks.push(data)
11807
ab78acc6 11808 // opcode
ebd8d4e8
IC
11809 } else {
11810 chunks.push(opcode)
11811
11812 i += 1
11813 }
11814 }
11815
11816 return new Script(buffer, chunks)
11817}
11818
ab78acc6
IC
11819Script.fromChunks = function (chunks) {
11820 typeForce('Array', chunks)
ebd8d4e8 11821
ab78acc6
IC
11822 var bufferSize = chunks.reduce(function (accum, chunk) {
11823 // data chunk
ebd8d4e8
IC
11824 if (Buffer.isBuffer(chunk)) {
11825 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11826 }
11827
ab78acc6 11828 // opcode
ebd8d4e8
IC
11829 return accum + 1
11830 }, 0.0)
11831
11832 var buffer = new Buffer(bufferSize)
11833 var offset = 0
11834
ab78acc6
IC
11835 chunks.forEach(function (chunk) {
11836 // data chunk
ebd8d4e8
IC
11837 if (Buffer.isBuffer(chunk)) {
11838 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11839
11840 chunk.copy(buffer, offset)
11841 offset += chunk.length
11842
ab78acc6 11843 // opcode
ebd8d4e8
IC
11844 } else {
11845 buffer.writeUInt8(chunk, offset)
11846 offset += 1
11847 }
11848 })
11849
11850 assert.equal(offset, buffer.length, 'Could not decode chunks')
11851 return new Script(buffer, chunks)
11852}
11853
ab78acc6 11854Script.fromHex = function (hex) {
ebd8d4e8
IC
11855 return Script.fromBuffer(new Buffer(hex, 'hex'))
11856}
11857
ebd8d4e8
IC
11858Script.EMPTY = Script.fromChunks([])
11859
ab78acc6 11860Script.prototype.getHash = function () {
ebd8d4e8
IC
11861 return crypto.hash160(this.buffer)
11862}
11863
11864// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11865Script.prototype.without = function (needle) {
11866 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11867 return op !== needle
11868 }))
11869}
11870
ebd8d4e8
IC
11871var reverseOps = []
11872for (var op in opcodes) {
11873 var code = opcodes[op]
11874 reverseOps[code] = op
11875}
11876
ab78acc6
IC
11877Script.prototype.toASM = function () {
11878 return this.chunks.map(function (chunk) {
11879 // data chunk
ebd8d4e8
IC
11880 if (Buffer.isBuffer(chunk)) {
11881 return chunk.toString('hex')
11882
ab78acc6 11883 // opcode
ebd8d4e8
IC
11884 } else {
11885 return reverseOps[chunk]
11886 }
11887 }).join(' ')
11888}
11889
ab78acc6 11890Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11891 return this.buffer
11892}
11893
ab78acc6 11894Script.prototype.toHex = function () {
ebd8d4e8
IC
11895 return this.toBuffer().toString('hex')
11896}
11897
11898module.exports = Script
11899
ab78acc6
IC
11900}).call(this,require("buffer").Buffer)
11901},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11902(function (Buffer){
ab78acc6
IC
11903var assert = require('assert')
11904var ops = require('./opcodes')
11905var typeForce = require('typeforce')
ebd8d4e8 11906
ab78acc6 11907var ecurve = require('ecurve')
ebd8d4e8
IC
11908var curve = ecurve.getCurveByName('secp256k1')
11909
ab78acc6
IC
11910var ECSignature = require('./ecsignature')
11911var Script = require('./script')
ebd8d4e8 11912
ab78acc6 11913function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11914 if (!Buffer.isBuffer(buffer)) return false
11915
11916 try {
ebd8d4e8
IC
11917 ecurve.Point.decodeFrom(curve, buffer)
11918 } catch (e) {
ab78acc6
IC
11919 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11920 throw e
ebd8d4e8
IC
11921
11922 return false
11923 }
11924
11925 return true
11926}
11927
ab78acc6 11928function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11929 if (!Buffer.isBuffer(buffer)) return false
11930
11931 try {
11932 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11933 } catch (e) {
11934 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/))) {
11935 throw e
11936 }
ebd8d4e8
IC
11937
11938 return false
11939 }
11940
11941 return true
11942}
11943
ab78acc6
IC
11944function isPubKeyHashInput (script) {
11945 return script.chunks.length === 2 &&
11946 isCanonicalSignature(script.chunks[0]) &&
11947 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11948}
11949
ab78acc6
IC
11950function isPubKeyHashOutput (script) {
11951 return script.chunks.length === 5 &&
11952 script.chunks[0] === ops.OP_DUP &&
11953 script.chunks[1] === ops.OP_HASH160 &&
11954 Buffer.isBuffer(script.chunks[2]) &&
11955 script.chunks[2].length === 20 &&
11956 script.chunks[3] === ops.OP_EQUALVERIFY &&
11957 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11958}
11959
ab78acc6
IC
11960function isPubKeyInput (script) {
11961 return script.chunks.length === 1 &&
11962 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11963}
11964
ab78acc6
IC
11965function isPubKeyOutput (script) {
11966 return script.chunks.length === 2 &&
11967 isCanonicalPubKey(script.chunks[0]) &&
11968 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11969}
11970
ab78acc6
IC
11971function isScriptHashInput (script, allowIncomplete) {
11972 if (script.chunks.length < 2) return false
ebd8d4e8 11973
ab78acc6 11974 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11975 if (!Buffer.isBuffer(lastChunk)) return false
11976
ab78acc6
IC
11977 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11978 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11979
ab78acc6
IC
11980 // is redeemScript a valid script?
11981 if (redeemScript.chunks.length === 0) return false
11982
11983 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11984}
11985
ab78acc6
IC
11986function isScriptHashOutput (script) {
11987 return script.chunks.length === 3 &&
11988 script.chunks[0] === ops.OP_HASH160 &&
11989 Buffer.isBuffer(script.chunks[1]) &&
11990 script.chunks[1].length === 20 &&
11991 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11992}
11993
ab78acc6
IC
11994// allowIncomplete is to account for combining signatures
11995// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11996function isMultisigInput (script, allowIncomplete) {
11997 if (script.chunks.length < 2) return false
11998 if (script.chunks[0] !== ops.OP_0) return false
11999
12000 if (allowIncomplete) {
12001 return script.chunks.slice(1).every(function (chunk) {
12002 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12003 })
12004 }
12005
12006 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
12007}
12008
ab78acc6
IC
12009function isMultisigOutput (script) {
12010 if (script.chunks.length < 4) return false
12011 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 12012
ab78acc6
IC
12013 var mOp = script.chunks[0]
12014 if (mOp === ops.OP_0) return false
12015 if (mOp < ops.OP_1) return false
12016 if (mOp > ops.OP_16) return false
ebd8d4e8 12017
ab78acc6
IC
12018 var nOp = script.chunks[script.chunks.length - 2]
12019 if (nOp === ops.OP_0) return false
12020 if (nOp < ops.OP_1) return false
12021 if (nOp > ops.OP_16) return false
ebd8d4e8 12022
ab78acc6
IC
12023 var m = mOp - (ops.OP_1 - 1)
12024 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
12025 if (n < m) return false
12026
ab78acc6 12027 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
12028 if (n < pubKeys.length) return false
12029
12030 return pubKeys.every(isCanonicalPubKey)
12031}
12032
ab78acc6
IC
12033function isNullDataOutput (script) {
12034 return script.chunks[0] === ops.OP_RETURN
12035}
12036
12037function classifyOutput (script) {
12038 typeForce('Script', script)
12039
12040 if (isPubKeyHashOutput(script)) {
12041 return 'pubkeyhash'
12042 } else if (isScriptHashOutput(script)) {
12043 return 'scripthash'
12044 } else if (isMultisigOutput(script)) {
12045 return 'multisig'
12046 } else if (isPubKeyOutput(script)) {
12047 return 'pubkey'
12048 } else if (isNullDataOutput(script)) {
12049 return 'nulldata'
12050 }
12051
12052 return 'nonstandard'
12053}
12054
12055function classifyInput (script, allowIncomplete) {
12056 typeForce('Script', script)
12057
12058 if (isPubKeyHashInput(script)) {
12059 return 'pubkeyhash'
12060 } else if (isMultisigInput(script, allowIncomplete)) {
12061 return 'multisig'
12062 } else if (isScriptHashInput(script, allowIncomplete)) {
12063 return 'scripthash'
12064 } else if (isPubKeyInput(script)) {
12065 return 'pubkey'
12066 }
12067
12068 return 'nonstandard'
ebd8d4e8
IC
12069}
12070
12071// Standard Script Templates
12072// {pubKey} OP_CHECKSIG
ab78acc6 12073function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12074 return Script.fromChunks([
12075 pubKey.toBuffer(),
ab78acc6 12076 ops.OP_CHECKSIG
ebd8d4e8
IC
12077 ])
12078}
12079
12080// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12081function pubKeyHashOutput (hash) {
12082 typeForce('Buffer', hash)
ebd8d4e8
IC
12083
12084 return Script.fromChunks([
ab78acc6
IC
12085 ops.OP_DUP,
12086 ops.OP_HASH160,
ebd8d4e8 12087 hash,
ab78acc6
IC
12088 ops.OP_EQUALVERIFY,
12089 ops.OP_CHECKSIG
ebd8d4e8
IC
12090 ])
12091}
12092
12093// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12094function scriptHashOutput (hash) {
12095 typeForce('Buffer', hash)
ebd8d4e8
IC
12096
12097 return Script.fromChunks([
ab78acc6 12098 ops.OP_HASH160,
ebd8d4e8 12099 hash,
ab78acc6 12100 ops.OP_EQUAL
ebd8d4e8
IC
12101 ])
12102}
12103
12104// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12105function multisigOutput (m, pubKeys) {
12106 typeForce(['ECPubKey'], pubKeys)
12107
ebd8d4e8
IC
12108 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12109
ab78acc6 12110 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12111 return pubKey.toBuffer()
12112 })
12113 var n = pubKeys.length
12114
12115 return Script.fromChunks([].concat(
ab78acc6 12116 (ops.OP_1 - 1) + m,
ebd8d4e8 12117 pubKeyBuffers,
ab78acc6
IC
12118 (ops.OP_1 - 1) + n,
12119 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12120 ))
12121}
12122
12123// {signature}
ab78acc6
IC
12124function pubKeyInput (signature) {
12125 typeForce('Buffer', signature)
ebd8d4e8
IC
12126
12127 return Script.fromChunks([signature])
12128}
12129
12130// {signature} {pubKey}
ab78acc6
IC
12131function pubKeyHashInput (signature, pubKey) {
12132 typeForce('Buffer', signature)
ebd8d4e8
IC
12133
12134 return Script.fromChunks([signature, pubKey.toBuffer()])
12135}
12136
12137// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12138function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12139 return Script.fromChunks([].concat(
12140 scriptSig.chunks,
12141 scriptPubKey.toBuffer()
12142 ))
12143}
12144
12145// OP_0 [signatures ...]
ab78acc6 12146function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12147 if (scriptPubKey) {
ab78acc6
IC
12148 assert(isMultisigOutput(scriptPubKey))
12149
12150 var mOp = scriptPubKey.chunks[0]
12151 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12152 var m = mOp - (ops.OP_1 - 1)
12153 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12154
ab78acc6
IC
12155 assert(signatures.length >= m, 'Not enough signatures provided')
12156 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12157 }
12158
ab78acc6
IC
12159 return Script.fromChunks([].concat(ops.OP_0, signatures))
12160}
12161
12162function nullDataOutput (data) {
12163 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12164}
12165
12166module.exports = {
ab78acc6
IC
12167 isCanonicalPubKey: isCanonicalPubKey,
12168 isCanonicalSignature: isCanonicalSignature,
12169 isPubKeyHashInput: isPubKeyHashInput,
12170 isPubKeyHashOutput: isPubKeyHashOutput,
12171 isPubKeyInput: isPubKeyInput,
12172 isPubKeyOutput: isPubKeyOutput,
12173 isScriptHashInput: isScriptHashInput,
12174 isScriptHashOutput: isScriptHashOutput,
12175 isMultisigInput: isMultisigInput,
12176 isMultisigOutput: isMultisigOutput,
12177 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12178 classifyOutput: classifyOutput,
ab78acc6
IC
12179 classifyInput: classifyInput,
12180 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12181 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12182 scriptHashOutput: scriptHashOutput,
12183 multisigOutput: multisigOutput,
ebd8d4e8 12184 pubKeyInput: pubKeyInput,
ab78acc6 12185 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12186 scriptHashInput: scriptHashInput,
ab78acc6
IC
12187 multisigInput: multisigInput,
12188 dataOutput: function (data) {
12189 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12190 return nullDataOutput(data)
12191 },
12192 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12193}
12194
ab78acc6
IC
12195}).call(this,require("buffer").Buffer)
12196},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12197(function (Buffer){
ab78acc6
IC
12198var assert = require('assert')
12199var bufferutils = require('./bufferutils')
12200var crypto = require('./crypto')
12201var typeForce = require('typeforce')
12202var opcodes = require('./opcodes')
12203var scripts = require('./scripts')
12204
12205var Address = require('./address')
12206var ECSignature = require('./ecsignature')
12207var Script = require('./script')
12208
12209function Transaction () {
12210 this.version = 1
12211 this.locktime = 0
12212 this.ins = []
12213 this.outs = []
12214}
ebd8d4e8
IC
12215
12216Transaction.DEFAULT_SEQUENCE = 0xffffffff
12217Transaction.SIGHASH_ALL = 0x01
12218Transaction.SIGHASH_NONE = 0x02
12219Transaction.SIGHASH_SINGLE = 0x03
12220Transaction.SIGHASH_ANYONECANPAY = 0x80
12221
ab78acc6
IC
12222Transaction.fromBuffer = function (buffer, __disableAssert) {
12223 var offset = 0
12224 function readSlice (n) {
12225 offset += n
12226 return buffer.slice(offset - n, offset)
12227 }
12228
12229 function readUInt32 () {
12230 var i = buffer.readUInt32LE(offset)
12231 offset += 4
12232 return i
12233 }
12234
12235 function readUInt64 () {
12236 var i = bufferutils.readUInt64LE(buffer, offset)
12237 offset += 8
12238 return i
12239 }
12240
12241 function readVarInt () {
12242 var vi = bufferutils.readVarInt(buffer, offset)
12243 offset += vi.size
12244 return vi.number
12245 }
12246
12247 function readScript () {
12248 return Script.fromBuffer(readSlice(readVarInt()))
12249 }
12250
12251 function readGenerationScript () {
12252 return new Script(readSlice(readVarInt()), [])
12253 }
12254
12255 var tx = new Transaction()
12256 tx.version = readUInt32()
12257
12258 var vinLen = readVarInt()
12259 for (var i = 0; i < vinLen; ++i) {
12260 var hash = readSlice(32)
12261
12262 if (Transaction.isCoinbaseHash(hash)) {
12263 tx.ins.push({
12264 hash: hash,
12265 index: readUInt32(),
12266 script: readGenerationScript(),
12267 sequence: readUInt32()
12268 })
12269 } else {
12270 tx.ins.push({
12271 hash: hash,
12272 index: readUInt32(),
12273 script: readScript(),
12274 sequence: readUInt32()
12275 })
12276 }
12277 }
12278
12279 var voutLen = readVarInt()
12280 for (i = 0; i < voutLen; ++i) {
12281 tx.outs.push({
12282 value: readUInt64(),
12283 script: readScript()
12284 })
12285 }
12286
12287 tx.locktime = readUInt32()
12288
12289 if (!__disableAssert) {
12290 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12291 }
12292
12293 return tx
12294}
12295
12296Transaction.fromHex = function (hex) {
12297 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12298}
12299
12300Transaction.isCoinbaseHash = function (buffer) {
12301 return Array.prototype.every.call(buffer, function (x) {
12302 return x === 0
12303 })
ebd8d4e8
IC
12304}
12305
12306/**
ab78acc6 12307 * Create a new txIn.
ebd8d4e8
IC
12308 *
12309 * Can be called with any of:
12310 *
12311 * - A transaction and an index
12312 * - A transaction hash and an index
12313 *
12314 * Note that this method does not sign the created input.
12315 */
ab78acc6
IC
12316Transaction.prototype.addInput = function (hash, index, sequence, script) {
12317 if (sequence === undefined || sequence === null) {
12318 sequence = Transaction.DEFAULT_SEQUENCE
12319 }
ebd8d4e8 12320
ab78acc6 12321 script = script || Script.EMPTY
ebd8d4e8 12322
ab78acc6 12323 if (typeof hash === 'string') {
ebd8d4e8 12324 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12325 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12326 } else if (hash instanceof Transaction) {
12327 hash = hash.getHash()
ebd8d4e8
IC
12328 }
12329
ab78acc6
IC
12330 typeForce('Buffer', hash)
12331 typeForce('Number', index)
12332 typeForce('Number', sequence)
12333 typeForce('Script', script)
12334
ebd8d4e8 12335 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12336
ab78acc6 12337 // Add the input and return the input's index
ebd8d4e8
IC
12338 return (this.ins.push({
12339 hash: hash,
12340 index: index,
ab78acc6 12341 script: script,
ebd8d4e8
IC
12342 sequence: sequence
12343 }) - 1)
12344}
12345
12346/**
ab78acc6 12347 * Create a new txOut.
ebd8d4e8
IC
12348 *
12349 * Can be called with:
12350 *
12351 * - A base58 address string and a value
12352 * - An Address object and a value
12353 * - A scriptPubKey Script and a value
12354 */
ab78acc6 12355Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12356 // Attempt to get a valid address if it's a base58 address string
12357 if (typeof scriptPubKey === 'string') {
12358 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12359 }
12360
12361 // Attempt to get a valid script if it's an Address object
12362 if (scriptPubKey instanceof Address) {
ab78acc6 12363 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12364 }
12365
ab78acc6
IC
12366 typeForce('Script', scriptPubKey)
12367 typeForce('Number', value)
12368
12369 // Add the output and return the output's index
ebd8d4e8
IC
12370 return (this.outs.push({
12371 script: scriptPubKey,
ab78acc6 12372 value: value
ebd8d4e8
IC
12373 }) - 1)
12374}
12375
ab78acc6
IC
12376Transaction.prototype.clone = function () {
12377 var newTx = new Transaction()
12378 newTx.version = this.version
12379 newTx.locktime = this.locktime
12380
12381 newTx.ins = this.ins.map(function (txIn) {
12382 return {
12383 hash: txIn.hash,
12384 index: txIn.index,
12385 script: txIn.script,
12386 sequence: txIn.sequence
12387 }
12388 })
12389
12390 newTx.outs = this.outs.map(function (txOut) {
12391 return {
12392 script: txOut.script,
12393 value: txOut.value
12394 }
12395 })
12396
12397 return newTx
12398}
12399
12400/**
12401 * Hash transaction for signing a specific input.
12402 *
12403 * Bitcoin uses a different hash for each signed transaction input. This
12404 * method copies the transaction, makes the necessary changes based on the
12405 * hashType, serializes and finally hashes the result. This hash can then be
12406 * used to sign the transaction input in question.
12407 */
12408Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12409 // FIXME: remove in 2.x.y
12410 if (arguments[0] instanceof Script) {
12411 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12412
12413 // swap the arguments (must be stored in tmp, arguments is special)
12414 var tmp = arguments[0]
12415 inIndex = arguments[1]
12416 prevOutScript = tmp
12417 }
12418
12419 typeForce('Number', inIndex)
12420 typeForce('Script', prevOutScript)
12421 typeForce('Number', hashType)
12422
12423 assert(inIndex >= 0, 'Invalid vin index')
12424 assert(inIndex < this.ins.length, 'Invalid vin index')
12425
12426 var txTmp = this.clone()
12427 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12428
12429 // Blank out other inputs' signatures
12430 txTmp.ins.forEach(function (txIn) {
12431 txIn.script = Script.EMPTY
12432 })
12433 txTmp.ins[inIndex].script = hashScript
12434
12435 var hashTypeModifier = hashType & 0x1f
12436
12437 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12438 assert(false, 'SIGHASH_NONE not yet supported')
12439 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12440 assert(false, 'SIGHASH_SINGLE not yet supported')
12441 }
12442
12443 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12444 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12445 }
12446
12447 var hashTypeBuffer = new Buffer(4)
12448 hashTypeBuffer.writeInt32LE(hashType, 0)
12449
12450 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12451 return crypto.hash256(buffer)
12452}
12453
12454Transaction.prototype.getHash = function () {
12455 return crypto.hash256(this.toBuffer())
12456}
12457
12458Transaction.prototype.getId = function () {
12459 // TxHash is little-endian, we need big-endian
12460 return bufferutils.reverse(this.getHash()).toString('hex')
12461}
12462
ebd8d4e8 12463Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12464 function scriptSize (script) {
12465 var length = script.buffer.length
ebd8d4e8 12466
ab78acc6
IC
12467 return bufferutils.varIntSize(length) + length
12468 }
ebd8d4e8
IC
12469
12470 var buffer = new Buffer(
12471 8 +
12472 bufferutils.varIntSize(this.ins.length) +
12473 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12474 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12475 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12476 )
12477
12478 var offset = 0
ab78acc6 12479 function writeSlice (slice) {
ebd8d4e8
IC
12480 slice.copy(buffer, offset)
12481 offset += slice.length
12482 }
ab78acc6
IC
12483
12484 function writeUInt32 (i) {
ebd8d4e8
IC
12485 buffer.writeUInt32LE(i, offset)
12486 offset += 4
12487 }
ab78acc6
IC
12488
12489 function writeUInt64 (i) {
ebd8d4e8
IC
12490 bufferutils.writeUInt64LE(buffer, i, offset)
12491 offset += 8
12492 }
ab78acc6
IC
12493
12494 function writeVarInt (i) {
ebd8d4e8
IC
12495 var n = bufferutils.writeVarInt(buffer, i, offset)
12496 offset += n
12497 }
12498
12499 writeUInt32(this.version)
12500 writeVarInt(this.ins.length)
12501
ab78acc6
IC
12502 this.ins.forEach(function (txIn) {
12503 writeSlice(txIn.hash)
12504 writeUInt32(txIn.index)
12505 writeVarInt(txIn.script.buffer.length)
12506 writeSlice(txIn.script.buffer)
12507 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12508 })
12509
12510 writeVarInt(this.outs.length)
ab78acc6
IC
12511 this.outs.forEach(function (txOut) {
12512 writeUInt64(txOut.value)
12513 writeVarInt(txOut.script.buffer.length)
12514 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12515 })
12516
12517 writeUInt32(this.locktime)
12518
12519 return buffer
12520}
12521
ab78acc6 12522Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12523 return this.toBuffer().toString('hex')
12524}
12525
ab78acc6
IC
12526Transaction.prototype.setInputScript = function (index, script) {
12527 typeForce('Number', index)
12528 typeForce('Script', script)
12529
12530 this.ins[index].script = script
12531}
12532
12533// FIXME: remove in 2.x.y
12534Transaction.prototype.sign = function (index, privKey, hashType) {
12535 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12536
12537 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12538 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12539
12540 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12541 this.setInputScript(index, scriptSig)
12542}
12543
12544// FIXME: remove in 2.x.y
12545Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12546 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12547
12548 hashType = hashType || Transaction.SIGHASH_ALL
12549
12550 var hash = this.hashForSignature(index, prevOutScript, hashType)
12551 var signature = privKey.sign(hash)
12552
12553 return signature.toScriptSignature(hashType)
12554}
12555
12556// FIXME: remove in 2.x.y
12557Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12558 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12559
12560 var parsed = ECSignature.parseScriptSignature(buffer)
12561 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12562
12563 return pubKey.verify(hash, parsed.signature)
12564}
12565
12566module.exports = Transaction
12567
12568}).call(this,require("buffer").Buffer)
12569},{"./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){
12570(function (Buffer){
12571var assert = require('assert')
12572var ops = require('./opcodes')
12573var scripts = require('./scripts')
12574
12575var ECPubKey = require('./ecpubkey')
12576var ECSignature = require('./ecsignature')
12577var Script = require('./script')
12578var Transaction = require('./transaction')
12579
12580function extractInput (txIn) {
12581 var redeemScript
12582 var scriptSig = txIn.script
12583 var prevOutScript
12584 var prevOutType = scripts.classifyInput(scriptSig, true)
12585 var scriptType
12586
12587 // Re-classify if scriptHash
12588 if (prevOutType === 'scripthash') {
12589 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12590 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12591
12592 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12593 scriptType = scripts.classifyInput(scriptSig, true)
12594 } else {
12595 scriptType = prevOutType
12596 }
12597
12598 // Extract hashType, pubKeys and signatures
12599 var hashType, parsed, pubKeys, signatures
12600
12601 switch (scriptType) {
12602 case 'pubkeyhash': {
12603 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12604 hashType = parsed.hashType
12605 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12606 signatures = [parsed.signature]
12607 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12608
12609 break
12610 }
12611
12612 case 'pubkey': {
12613 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12614 hashType = parsed.hashType
12615 signatures = [parsed.signature]
12616
12617 if (redeemScript) {
12618 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12619 }
12620
12621 break
12622 }
12623
12624 case 'multisig': {
12625 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12626 if (chunk === ops.OP_0) return chunk
12627
12628 var parsed = ECSignature.parseScriptSignature(chunk)
12629 hashType = parsed.hashType
12630
12631 return parsed.signature
12632 })
12633
12634 if (redeemScript) {
12635 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12636 }
12637
12638 break
12639 }
12640 }
12641
12642 return {
12643 hashType: hashType,
12644 prevOutScript: prevOutScript,
12645 prevOutType: prevOutType,
12646 pubKeys: pubKeys,
12647 redeemScript: redeemScript,
12648 scriptType: scriptType,
12649 signatures: signatures
12650 }
12651}
12652
12653function TransactionBuilder () {
12654 this.prevTxMap = {}
12655 this.prevOutScripts = {}
12656 this.prevOutTypes = {}
12657
12658 this.inputs = []
12659 this.tx = new Transaction()
12660}
12661
12662TransactionBuilder.fromTransaction = function (transaction) {
12663 var txb = new TransactionBuilder()
12664
12665 // Copy other transaction fields
12666 txb.tx.version = transaction.version
12667 txb.tx.locktime = transaction.locktime
12668
12669 // Extract/add inputs
12670 transaction.ins.forEach(function (txIn) {
12671 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12672 })
12673
12674 // Extract/add outputs
12675 transaction.outs.forEach(function (txOut) {
12676 txb.addOutput(txOut.script, txOut.value)
12677 })
12678
12679 // Extract/add signatures
12680 txb.inputs = transaction.ins.map(function (txIn) {
12681 // TODO: remove me after testcase added
12682 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12683
12684 // Ignore empty scripts
12685 if (txIn.script.buffer.length === 0) return {}
12686
12687 return extractInput(txIn)
12688 })
12689
12690 return txb
12691}
12692
12693TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12694 var prevOutHash
12695
12696 // txId
12697 if (typeof prevTx === 'string') {
12698 prevOutHash = new Buffer(prevTx, 'hex')
12699
12700 // TxId hex is big-endian, we want little-endian hash
12701 Array.prototype.reverse.call(prevOutHash)
12702
12703 // Transaction
12704 } else if (prevTx instanceof Transaction) {
12705 prevOutHash = prevTx.getHash()
12706 prevOutScript = prevTx.outs[index].script
12707
12708 // txHash
12709 } else {
12710 prevOutHash = prevTx
12711 }
12712
12713 var input = {}
12714 if (prevOutScript) {
12715 var prevOutType = scripts.classifyOutput(prevOutScript)
12716
12717 // if we can, extract pubKey information
12718 switch (prevOutType) {
12719 case 'multisig': {
12720 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12721 break
12722 }
12723
12724 case 'pubkey': {
12725 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12726 break
12727 }
12728 }
12729
12730 if (prevOutType !== 'scripthash') {
12731 input.scriptType = prevOutType
12732 }
12733
12734 input.prevOutScript = prevOutScript
12735 input.prevOutType = prevOutType
12736 }
12737
12738 assert(this.inputs.every(function (input2) {
12739 if (input2.hashType === undefined) return true
12740
12741 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12742 }), 'No, this would invalidate signatures')
12743
12744 var prevOut = prevOutHash.toString('hex') + ':' + index
12745 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12746
12747 var vin = this.tx.addInput(prevOutHash, index, sequence)
12748 this.inputs[vin] = input
12749 this.prevTxMap[prevOut] = vin
12750
12751 return vin
12752}
12753
12754TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12755 assert(this.inputs.every(function (input) {
12756 if (input.hashType === undefined) return true
ebd8d4e8 12757
ab78acc6
IC
12758 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12759 }), 'No, this would invalidate signatures')
ebd8d4e8 12760
ab78acc6
IC
12761 return this.tx.addOutput(scriptPubKey, value)
12762}
ebd8d4e8 12763
ab78acc6
IC
12764TransactionBuilder.prototype.build = function () {
12765 return this.__build(false)
12766}
12767TransactionBuilder.prototype.buildIncomplete = function () {
12768 return this.__build(true)
12769}
ebd8d4e8 12770
ab78acc6
IC
12771var canSignTypes = {
12772 'pubkeyhash': true,
12773 'multisig': true,
12774 'pubkey': true
12775}
ebd8d4e8 12776
ab78acc6
IC
12777TransactionBuilder.prototype.__build = function (allowIncomplete) {
12778 if (!allowIncomplete) {
12779 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12780 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12781 }
12782
ab78acc6 12783 var tx = this.tx.clone()
ebd8d4e8 12784
ab78acc6
IC
12785 // Create script signatures from signature meta-data
12786 this.inputs.forEach(function (input, index) {
12787 var scriptType = input.scriptType
12788 var scriptSig
ebd8d4e8 12789
ab78acc6
IC
12790 if (!allowIncomplete) {
12791 assert(!!scriptType, 'Transaction is not complete')
12792 assert(scriptType in canSignTypes, scriptType + ' not supported')
12793 assert(input.signatures, 'Transaction is missing signatures')
12794 }
ebd8d4e8 12795
ab78acc6
IC
12796 if (input.signatures) {
12797 switch (scriptType) {
12798 case 'pubkeyhash': {
12799 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12800 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12801 break
12802 }
ebd8d4e8 12803
ab78acc6
IC
12804 case 'multisig': {
12805 // Array.prototype.map is sparse-compatible
12806 var msSignatures = input.signatures.map(function (signature) {
12807 return signature && signature.toScriptSignature(input.hashType)
12808 })
ebd8d4e8 12809
ab78acc6
IC
12810 // fill in blanks with OP_0
12811 if (allowIncomplete) {
12812 for (var i = 0; i < msSignatures.length; ++i) {
12813 if (msSignatures[i]) continue
ebd8d4e8 12814
ab78acc6
IC
12815 msSignatures[i] = ops.OP_0
12816 }
12817 } else {
12818 // Array.prototype.filter returns non-sparse array
12819 msSignatures = msSignatures.filter(function (x) { return x })
12820 }
ebd8d4e8 12821
ab78acc6
IC
12822 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12823 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12824 break
12825 }
ebd8d4e8 12826
ab78acc6
IC
12827 case 'pubkey': {
12828 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12829 scriptSig = scripts.pubKeyInput(pkSignature)
12830 break
12831 }
12832 }
ebd8d4e8 12833 }
ebd8d4e8 12834
ab78acc6
IC
12835 // did we build a scriptSig?
12836 if (scriptSig) {
12837 // wrap as scriptHash if necessary
12838 if (input.prevOutType === 'scripthash') {
12839 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12840 }
12841
12842 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12843 }
12844 })
12845
ab78acc6 12846 return tx
ebd8d4e8
IC
12847}
12848
ab78acc6
IC
12849TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12850 assert(index in this.inputs, 'No input at index: ' + index)
12851 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12852
ab78acc6
IC
12853 var input = this.inputs[index]
12854 var canSign = input.hashType &&
12855 input.prevOutScript &&
12856 input.prevOutType &&
12857 input.pubKeys &&
12858 input.scriptType &&
12859 input.signatures
ebd8d4e8 12860
ab78acc6
IC
12861 // are we almost ready to sign?
12862 if (canSign) {
12863 // if redeemScript was provided, enforce consistency
12864 if (redeemScript) {
12865 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12866 }
ebd8d4e8 12867
ab78acc6 12868 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12869
ab78acc6
IC
12870 // no? prepare
12871 } else {
12872 // must be pay-to-scriptHash?
12873 if (redeemScript) {
12874 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12875 if (input.prevOutScript) {
12876 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12877
12878 var scriptHash = input.prevOutScript.chunks[1]
12879 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12880 }
ebd8d4e8 12881
ab78acc6
IC
12882 var scriptType = scripts.classifyOutput(redeemScript)
12883 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12884
ab78acc6
IC
12885 var pubKeys = []
12886 switch (scriptType) {
12887 case 'multisig': {
12888 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12889 break
12890 }
ebd8d4e8 12891
ab78acc6
IC
12892 case 'pubkeyhash': {
12893 var pkh1 = redeemScript.chunks[2]
12894 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12895
ab78acc6
IC
12896 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12897 pubKeys = [privKey.pub]
12898 break
12899 }
ebd8d4e8 12900
ab78acc6
IC
12901 case 'pubkey': {
12902 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12903 break
12904 }
12905 }
ebd8d4e8 12906
ab78acc6
IC
12907 if (!input.prevOutScript) {
12908 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12909 input.prevOutType = 'scripthash'
12910 }
ebd8d4e8 12911
ab78acc6
IC
12912 input.pubKeys = pubKeys
12913 input.redeemScript = redeemScript
12914 input.scriptType = scriptType
ebd8d4e8 12915
ab78acc6
IC
12916 // cannot be pay-to-scriptHash
12917 } else {
12918 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12919
ab78acc6
IC
12920 // can we otherwise sign this?
12921 if (input.scriptType) {
12922 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12923
ab78acc6
IC
12924 // we know nothin' Jon Snow, assume pubKeyHash
12925 } else {
12926 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12927 input.prevOutType = 'pubkeyhash'
12928 input.pubKeys = [privKey.pub]
12929 input.scriptType = input.prevOutType
12930 }
12931 }
ebd8d4e8 12932
ab78acc6
IC
12933 input.hashType = hashType
12934 input.signatures = input.signatures || []
12935 }
12936
12937 var signatureScript = input.redeemScript || input.prevOutScript
12938 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12939
12940 // enforce signature order matches public keys
12941 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12942 // maintain a local copy of unmatched signatures
12943 var unmatched = input.signatures.slice()
12944
12945 input.signatures = input.pubKeys.map(function (pubKey) {
12946 var match
12947
12948 // check for any matching signatures
12949 unmatched.some(function (signature, i) {
12950 if (!pubKey.verify(signatureHash, signature)) return false
12951 match = signature
12952
12953 // remove matched signature from unmatched
12954 unmatched.splice(i, 1)
12955
12956 return true
12957 })
12958
12959 return match || undefined
12960 })
12961 }
12962
12963 // enforce in order signing of public keys
12964 assert(input.pubKeys.some(function (pubKey, i) {
12965 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12966
12967 assert(!input.signatures[i], 'Signature already exists')
12968 var signature = privKey.sign(signatureHash)
12969 input.signatures[i] = signature
12970
12971 return true
12972 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12973}
12974
ab78acc6 12975module.exports = TransactionBuilder
ebd8d4e8 12976
ab78acc6
IC
12977}).call(this,require("buffer").Buffer)
12978},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12979(function (Buffer){
ab78acc6
IC
12980var assert = require('assert')
12981var bufferutils = require('./bufferutils')
12982var typeForce = require('typeforce')
12983var networks = require('./networks')
12984var randomBytes = require('randombytes')
ebd8d4e8 12985
ab78acc6
IC
12986var Address = require('./address')
12987var HDNode = require('./hdnode')
12988var TransactionBuilder = require('./transaction_builder')
12989var Script = require('./script')
ebd8d4e8 12990
ab78acc6
IC
12991function Wallet (seed, network) {
12992 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12993
12994 seed = seed || randomBytes(32)
ebd8d4e8
IC
12995 network = network || networks.bitcoin
12996
12997 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12998 var masterKey = HDNode.fromSeedBuffer(seed, network)
12999
13000 // HD first-level child derivation method should be hardened
13001 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13002 var accountZero = masterKey.deriveHardened(0)
13003 var externalAccount = accountZero.derive(0)
13004 var internalAccount = accountZero.derive(1)
ebd8d4e8 13005
ebd8d4e8
IC
13006 this.addresses = []
13007 this.changeAddresses = []
ab78acc6
IC
13008 this.network = network
13009 this.unspents = []
ebd8d4e8 13010
ab78acc6
IC
13011 // FIXME: remove in 2.0.0
13012 this.unspentMap = {}
ebd8d4e8 13013
ab78acc6
IC
13014 // FIXME: remove in 2.0.0
13015 var me = this
13016 this.newMasterKey = function (seed) {
13017 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13018
13019 seed = seed || randomBytes(32)
13020 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 13021
ab78acc6 13022 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
13023 externalAccount = accountZero.derive(0)
13024 internalAccount = accountZero.derive(1)
13025
13026 me.addresses = []
13027 me.changeAddresses = []
13028
ab78acc6
IC
13029 me.unspents = []
13030 me.unspentMap = {}
ebd8d4e8
IC
13031 }
13032
ab78acc6
IC
13033 this.getMasterKey = function () {
13034 return masterKey
ebd8d4e8 13035 }
ab78acc6
IC
13036 this.getAccountZero = function () {
13037 return accountZero
ebd8d4e8 13038 }
ab78acc6
IC
13039 this.getExternalAccount = function () {
13040 return externalAccount
13041 }
13042 this.getInternalAccount = function () {
13043 return internalAccount
ebd8d4e8 13044 }
ab78acc6 13045}
ebd8d4e8 13046
ab78acc6
IC
13047Wallet.prototype.createTransaction = function (to, value, options) {
13048 // FIXME: remove in 2.0.0
13049 if (typeof options !== 'object') {
13050 if (options !== undefined) {
13051 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13052
ab78acc6
IC
13053 options = {
13054 fixedFee: arguments[2],
13055 changeAddress: arguments[3]
13056 }
ebd8d4e8 13057 }
ebd8d4e8
IC
13058 }
13059
ab78acc6 13060 options = options || {}
ebd8d4e8 13061
ab78acc6 13062 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13063
ab78acc6
IC
13064 var changeAddress = options.changeAddress
13065 var fixedFee = options.fixedFee
13066 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13067
ab78acc6
IC
13068 // filter by minConf, then pending and sort by descending value
13069 var unspents = this.unspents.filter(function (unspent) {
13070 return unspent.confirmations >= minConf
13071 }).filter(function (unspent) {
13072 return !unspent.pending
13073 }).sort(function (o1, o2) {
13074 return o2.value - o1.value
13075 })
ebd8d4e8 13076
ab78acc6
IC
13077 var accum = 0
13078 var addresses = []
13079 var subTotal = value
ebd8d4e8 13080
ab78acc6
IC
13081 var txb = new TransactionBuilder()
13082 txb.addOutput(to, value)
ebd8d4e8 13083
ab78acc6
IC
13084 for (var i = 0; i < unspents.length; ++i) {
13085 var unspent = unspents[i]
13086 addresses.push(unspent.address)
ebd8d4e8 13087
ab78acc6
IC
13088 txb.addInput(unspent.txHash, unspent.index)
13089
13090 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13091
ab78acc6
IC
13092 accum += unspent.value
13093 subTotal = value + fee
13094
13095 if (accum >= subTotal) {
13096 var change = accum - subTotal
13097
13098 if (change > this.network.dustThreshold) {
13099 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13100 }
ebd8d4e8 13101
ab78acc6 13102 break
ebd8d4e8
IC
13103 }
13104 }
13105
ab78acc6 13106 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13107
ab78acc6
IC
13108 return this.signWith(txb, addresses).build()
13109}
ebd8d4e8 13110
ab78acc6
IC
13111// FIXME: remove in 2.0.0
13112Wallet.prototype.processPendingTx = function (tx) {
13113 this.__processTx(tx, true)
13114}
ebd8d4e8 13115
ab78acc6
IC
13116// FIXME: remove in 2.0.0
13117Wallet.prototype.processConfirmedTx = function (tx) {
13118 this.__processTx(tx, false)
13119}
ebd8d4e8 13120
ab78acc6
IC
13121// FIXME: remove in 2.0.0
13122Wallet.prototype.__processTx = function (tx, isPending) {
13123 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13124
ab78acc6
IC
13125 var txId = tx.getId()
13126 var txHash = tx.getHash()
ebd8d4e8 13127
ab78acc6
IC
13128 tx.outs.forEach(function (txOut, i) {
13129 var address
ebd8d4e8 13130
ab78acc6
IC
13131 try {
13132 address = Address.fromOutputScript(txOut.script, this.network).toString()
13133 } catch (e) {
13134 if (!(e.message.match(/has no matching Address/)))
13135 throw e
13136 }
13137
13138 var myAddresses = this.addresses.concat(this.changeAddresses)
13139 if (myAddresses.indexOf(address) > -1) {
13140 var lookup = txId + ':' + i
13141 if (lookup in this.unspentMap) return
13142
13143 // its unique, add it
13144 var unspent = {
13145 address: address,
13146 confirmations: 0, // no way to determine this without more information
13147 index: i,
13148 txHash: txHash,
13149 txId: txId,
13150 value: txOut.value,
13151 pending: isPending
ebd8d4e8 13152 }
ebd8d4e8 13153
ab78acc6
IC
13154 this.unspentMap[lookup] = unspent
13155 this.unspents.push(unspent)
13156 }
13157 }, this)
ebd8d4e8 13158
ab78acc6
IC
13159 tx.ins.forEach(function (txIn) {
13160 // copy and convert to big-endian hex
13161 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13162
ab78acc6
IC
13163 var lookup = txInId + ':' + txIn.index
13164 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13165
ab78acc6 13166 var unspent = this.unspentMap[lookup]
ebd8d4e8 13167
ab78acc6
IC
13168 if (isPending) {
13169 unspent.pending = true
13170 unspent.spent = true
13171 } else {
13172 delete this.unspentMap[lookup]
ebd8d4e8 13173
ab78acc6
IC
13174 this.unspents = this.unspents.filter(function (unspent2) {
13175 return unspent !== unspent2
13176 })
13177 }
13178 }, this)
13179}
ebd8d4e8 13180
ab78acc6
IC
13181Wallet.prototype.generateAddress = function () {
13182 var k = this.addresses.length
13183 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13184
ab78acc6 13185 this.addresses.push(address.toString())
ebd8d4e8 13186
ab78acc6
IC
13187 return this.getReceiveAddress()
13188}
ebd8d4e8 13189
ab78acc6
IC
13190Wallet.prototype.generateChangeAddress = function () {
13191 var k = this.changeAddresses.length
13192 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13193
ab78acc6 13194 this.changeAddresses.push(address.toString())
ebd8d4e8 13195
ab78acc6
IC
13196 return this.getChangeAddress()
13197}
ebd8d4e8 13198
ab78acc6
IC
13199Wallet.prototype.getAddress = function () {
13200 if (this.addresses.length === 0) {
13201 this.generateAddress()
ebd8d4e8
IC
13202 }
13203
ab78acc6
IC
13204 return this.addresses[this.addresses.length - 1]
13205}
ebd8d4e8 13206
ab78acc6
IC
13207Wallet.prototype.getBalance = function (minConf) {
13208 minConf = minConf || 0
ebd8d4e8 13209
ab78acc6
IC
13210 return this.unspents.filter(function (unspent) {
13211 return unspent.confirmations >= minConf
13212
13213 // FIXME: remove spent filter in 2.0.0
13214 }).filter(function (unspent) {
13215 return !unspent.spent
13216 }).reduce(function (accum, unspent) {
13217 return accum + unspent.value
13218 }, 0)
13219}
ebd8d4e8 13220
ab78acc6
IC
13221Wallet.prototype.getChangeAddress = function () {
13222 if (this.changeAddresses.length === 0) {
13223 this.generateChangeAddress()
ebd8d4e8
IC
13224 }
13225
ab78acc6
IC
13226 return this.changeAddresses[this.changeAddresses.length - 1]
13227}
13228
13229Wallet.prototype.getInternalPrivateKey = function (index) {
13230 return this.getInternalAccount().derive(index).privKey
13231}
13232
13233Wallet.prototype.getPrivateKey = function (index) {
13234 return this.getExternalAccount().derive(index).privKey
13235}
13236
13237Wallet.prototype.getPrivateKeyForAddress = function (address) {
13238 var index
ebd8d4e8 13239
ab78acc6
IC
13240 if ((index = this.addresses.indexOf(address)) > -1) {
13241 return this.getPrivateKey(index)
ebd8d4e8
IC
13242 }
13243
ab78acc6
IC
13244 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13245 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13246 }
13247
ab78acc6
IC
13248 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13249}
ebd8d4e8 13250
ab78acc6
IC
13251Wallet.prototype.getUnspentOutputs = function (minConf) {
13252 minConf = minConf || 0
ebd8d4e8 13253
ab78acc6
IC
13254 return this.unspents.filter(function (unspent) {
13255 return unspent.confirmations >= minConf
ebd8d4e8 13256
ab78acc6
IC
13257 // FIXME: remove spent filter in 2.0.0
13258 }).filter(function (unspent) {
13259 return !unspent.spent
13260 }).map(function (unspent) {
13261 return {
13262 address: unspent.address,
13263 confirmations: unspent.confirmations,
13264 index: unspent.index,
13265 txId: unspent.txId,
13266 value: unspent.value,
13267
13268 // FIXME: remove in 2.0.0
13269 hash: unspent.txId,
13270 pending: unspent.pending
13271 }
13272 })
13273}
ebd8d4e8 13274
ab78acc6
IC
13275Wallet.prototype.setUnspentOutputs = function (unspents) {
13276 this.unspentMap = {}
13277 this.unspents = unspents.map(function (unspent) {
13278 // FIXME: remove unspent.hash in 2.0.0
13279 var txId = unspent.txId || unspent.hash
13280 var index = unspent.index
ebd8d4e8 13281
ab78acc6
IC
13282 // FIXME: remove in 2.0.0
13283 if (unspent.hash !== undefined) {
13284 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13285 }
ebd8d4e8 13286
ab78acc6
IC
13287 // FIXME: remove in 2.0.0
13288 if (index === undefined) {
13289 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13290 index = unspent.outputIndex
13291 }
ebd8d4e8 13292
ab78acc6
IC
13293 typeForce('String', txId)
13294 typeForce('Number', index)
13295 typeForce('Number', unspent.value)
13296
13297 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13298 assert.doesNotThrow(function () {
13299 Address.fromBase58Check(unspent.address)
13300 }, 'Expected Base58 Address, got ' + unspent.address)
13301 assert(isFinite(index), 'Expected finite index, got ' + index)
13302
13303 // FIXME: remove branch in 2.0.0
13304 if (unspent.confirmations !== undefined) {
13305 typeForce('Number', unspent.confirmations)
ebd8d4e8 13306 }
ebd8d4e8 13307
ab78acc6 13308 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13309
ab78acc6
IC
13310 unspent = {
13311 address: unspent.address,
13312 confirmations: unspent.confirmations || 0,
13313 index: index,
13314 txHash: txHash,
13315 txId: txId,
13316 value: unspent.value,
ebd8d4e8 13317
ab78acc6
IC
13318 // FIXME: remove in 2.0.0
13319 pending: unspent.pending || false
13320 }
13321
13322 // FIXME: remove in 2.0.0
13323 this.unspentMap[txId + ':' + index] = unspent
13324
13325 return unspent
13326 }, this)
13327}
13328
13329Wallet.prototype.signWith = function (tx, addresses) {
13330 addresses.forEach(function (address, i) {
13331 var privKey = this.getPrivateKeyForAddress(address)
13332
13333 tx.sign(i, privKey)
13334 }, this)
13335
13336 return tx
13337}
13338
13339function estimatePaddedFee (tx, network) {
13340 var tmpTx = tx.clone()
13341 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13342
13343 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13344}
13345
ab78acc6
IC
13346// FIXME: 1.0.0 shims, remove in 2.0.0
13347Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13348Wallet.prototype.createTx = Wallet.prototype.createTransaction
13349
ebd8d4e8
IC
13350module.exports = Wallet
13351
ab78acc6
IC
13352}).call(this,require("buffer").Buffer)
13353},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13354});</script>
d5dc92fd
IC
13355 <script>bitcoin.networks.shadow = {
13356 magicPrefix: '\x19ShadowCash Signed Message:\n',
13357 bip32: {
13358 public: 0xEE80286A,
13359 private: 0xEE8031E8
13360 },
13361 pubKeyHash: 0x3f,
13362 scriptHash: 0x7d,
13363 wif: 0xbf,
13364 dustThreshold: 0,
13365 feePerKb: 1000,
13366 estimateFee: function() { return "unused in this app" },
13367};
13368
13369bitcoin.networks.shadowtn = {
13370 magicPrefix: '\x19ShadowCash Signed Message:\n',
13371 bip32: {
13372 public: 0x76C0FDFB,
13373 private: 0x76C1077A
13374 },
13375 pubKeyHash: 0x7f,
13376 scriptHash: 0xc4,
13377 wif: 0xff,
13378 dustThreshold: 0,
13379 feePerKb: 1000,
13380 estimateFee: function() { return "unused in this app" },
13381};
5c434a8a
CM
13382
13383bitcoin.networks.clam = {
13384 bip32: {
13385 public: 0xa8c26d64,
13386 private: 0xa8c17826
13387 },
13388 pubKeyHash: 0x89,
13389 wif: 0x85,
13390};
5493efc3 13391
13392bitcoin.networks.dash = {
13393 bip32: {
13394 public: 0x0488b21e,
13395 private: 0x0488ade4
13396 },
68151a47 13397 pubKeyHash: 0x4c,
5493efc3 13398 scriptHash: 0x10,
13399 wif: 0xcc,
13400};
13401
07ac4350 13402bitcoin.networks.namecoin = {
13403 bip32: {
13404 public: 0x0488b21e,
13405 private: 0x0488ade4
13406 },
13407 pubKeyHash: 0x34,
13408 //scriptHash: 0x10,
13409 wif: 0x80,
13410};
13411
13412bitcoin.networks.peercoin = {
13413 bip32: {
13414 public: 0x0488b21e,
13415 private: 0x0488ade4
13416 },
13417 pubKeyHash: 0x37,
13418 //scriptHash: 0x10,
13419 wif: 0xb7,
13420};
13421
d5dc92fd 13422</script>
ab78acc6 13423 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13424
13425//// base.js
13426
13427/** @fileOverview Javascript cryptography implementation.
13428 *
13429 * Crush to remove comments, shorten variable names and
13430 * generally reduce transmission size.
13431 *
13432 * @author Emily Stark
13433 * @author Mike Hamburg
13434 * @author Dan Boneh
13435 */
13436
13437"use strict";
13438/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13439/*global document, window, escape, unescape, module, require, Uint32Array */
13440
13441/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13442var sjcl = {
13443 /** @namespace Symmetric ciphers. */
13444 cipher: {},
13445
13446 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13447 hash: {},
13448
13449 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13450 keyexchange: {},
13451
13452 /** @namespace Block cipher modes of operation. */
13453 mode: {},
13454
13455 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13456 misc: {},
13457
13458 /**
13459 * @namespace Bit array encoders and decoders.
13460 *
13461 * @description
13462 * The members of this namespace are functions which translate between
13463 * SJCL's bitArrays and other objects (usually strings). Because it
13464 * isn't always clear which direction is encoding and which is decoding,
13465 * the method names are "fromBits" and "toBits".
13466 */
13467 codec: {},
13468
13469 /** @namespace Exceptions. */
13470 exception: {
13471 /** @constructor Ciphertext is corrupt. */
13472 corrupt: function(message) {
13473 this.toString = function() { return "CORRUPT: "+this.message; };
13474 this.message = message;
13475 },
13476
13477 /** @constructor Invalid parameter. */
13478 invalid: function(message) {
13479 this.toString = function() { return "INVALID: "+this.message; };
13480 this.message = message;
13481 },
13482
13483 /** @constructor Bug or missing feature in SJCL. @constructor */
13484 bug: function(message) {
13485 this.toString = function() { return "BUG: "+this.message; };
13486 this.message = message;
13487 },
13488
13489 /** @constructor Something isn't ready. */
13490 notReady: function(message) {
13491 this.toString = function() { return "NOT READY: "+this.message; };
13492 this.message = message;
ebd8d4e8 13493 }
80c4dd2a
IC
13494 }
13495};
13496
13497if(typeof module !== 'undefined' && module.exports){
13498 module.exports = sjcl;
13499}
13500if (typeof define === "function") {
13501 define([], function () {
13502 return sjcl;
13503 });
13504}
13505
13506
13507//// bitArray.js
13508
13509/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13510 *
13511 * @author Emily Stark
13512 * @author Mike Hamburg
13513 * @author Dan Boneh
13514 */
13515
13516/** @namespace Arrays of bits, encoded as arrays of Numbers.
13517 *
13518 * @description
13519 * <p>
13520 * These objects are the currency accepted by SJCL's crypto functions.
13521 * </p>
13522 *
13523 * <p>
13524 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13525 * but many of them can take arguments that are not a multiple of 4 bytes.
13526 * This library encodes arrays of bits (whose size need not be a multiple of 8
13527 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13528 * array of words, 32 bits at a time. Since the words are double-precision
13529 * floating point numbers, they fit some extra data. We use this (in a private,
13530 * possibly-changing manner) to encode the number of bits actually present
13531 * in the last word of the array.
13532 * </p>
13533 *
13534 * <p>
13535 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13536 * to ciphers like AES which want arrays of words.
13537 * </p>
13538 */
13539sjcl.bitArray = {
13540 /**
13541 * Array slices in units of bits.
13542 * @param {bitArray} a The array to slice.
13543 * @param {Number} bstart The offset to the start of the slice, in bits.
13544 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13545 * slice until the end of the array.
13546 * @return {bitArray} The requested slice.
13547 */
13548 bitSlice: function (a, bstart, bend) {
13549 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13550 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13551 },
13552
13553 /**
13554 * Extract a number packed into a bit array.
13555 * @param {bitArray} a The array to slice.
13556 * @param {Number} bstart The offset to the start of the slice, in bits.
13557 * @param {Number} length The length of the number to extract.
13558 * @return {Number} The requested slice.
13559 */
13560 extract: function(a, bstart, blength) {
13561 // FIXME: this Math.floor is not necessary at all, but for some reason
13562 // seems to suppress a bug in the Chromium JIT.
13563 var x, sh = Math.floor((-bstart-blength) & 31);
13564 if ((bstart + blength - 1 ^ bstart) & -32) {
13565 // it crosses a boundary
13566 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13567 } else {
13568 // within a single word
13569 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13570 }
80c4dd2a
IC
13571 return x & ((1<<blength) - 1);
13572 },
13573
13574 /**
13575 * Concatenate two bit arrays.
13576 * @param {bitArray} a1 The first array.
13577 * @param {bitArray} a2 The second array.
13578 * @return {bitArray} The concatenation of a1 and a2.
13579 */
13580 concat: function (a1, a2) {
13581 if (a1.length === 0 || a2.length === 0) {
13582 return a1.concat(a2);
13583 }
13584
13585 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13586 if (shift === 32) {
13587 return a1.concat(a2);
13588 } else {
13589 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13590 }
80c4dd2a
IC
13591 },
13592
13593 /**
13594 * Find the length of an array of bits.
13595 * @param {bitArray} a The array.
13596 * @return {Number} The length of a, in bits.
13597 */
13598 bitLength: function (a) {
13599 var l = a.length, x;
13600 if (l === 0) { return 0; }
13601 x = a[l - 1];
13602 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13603 },
13604
13605 /**
13606 * Truncate an array.
13607 * @param {bitArray} a The array.
13608 * @param {Number} len The length to truncate to, in bits.
13609 * @return {bitArray} A new array, truncated to len bits.
13610 */
13611 clamp: function (a, len) {
13612 if (a.length * 32 < len) { return a; }
13613 a = a.slice(0, Math.ceil(len / 32));
13614 var l = a.length;
13615 len = len & 31;
13616 if (l > 0 && len) {
13617 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13618 }
13619 return a;
13620 },
13621
13622 /**
13623 * Make a partial word for a bit array.
13624 * @param {Number} len The number of bits in the word.
13625 * @param {Number} x The bits.
13626 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13627 * @return {Number} The partial word.
13628 */
13629 partial: function (len, x, _end) {
13630 if (len === 32) { return x; }
13631 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13632 },
13633
13634 /**
13635 * Get the number of bits used by a partial word.
13636 * @param {Number} x The partial word.
13637 * @return {Number} The number of bits used by the partial word.
13638 */
13639 getPartial: function (x) {
13640 return Math.round(x/0x10000000000) || 32;
13641 },
13642
13643 /**
13644 * Compare two arrays for equality in a predictable amount of time.
13645 * @param {bitArray} a The first array.
13646 * @param {bitArray} b The second array.
13647 * @return {boolean} true if a == b; false otherwise.
13648 */
13649 equal: function (a, b) {
13650 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13651 return false;
ebd8d4e8 13652 }
80c4dd2a
IC
13653 var x = 0, i;
13654 for (i=0; i<a.length; i++) {
13655 x |= a[i]^b[i];
ebd8d4e8 13656 }
80c4dd2a
IC
13657 return (x === 0);
13658 },
13659
13660 /** Shift an array right.
13661 * @param {bitArray} a The array to shift.
13662 * @param {Number} shift The number of bits to shift.
13663 * @param {Number} [carry=0] A byte to carry in
13664 * @param {bitArray} [out=[]] An array to prepend to the output.
13665 * @private
13666 */
13667 _shiftRight: function (a, shift, carry, out) {
13668 var i, last2=0, shift2;
13669 if (out === undefined) { out = []; }
13670
13671 for (; shift >= 32; shift -= 32) {
13672 out.push(carry);
13673 carry = 0;
13674 }
13675 if (shift === 0) {
13676 return out.concat(a);
13677 }
13678
13679 for (i=0; i<a.length; i++) {
13680 out.push(carry | a[i]>>>shift);
13681 carry = a[i] << (32-shift);
13682 }
13683 last2 = a.length ? a[a.length-1] : 0;
13684 shift2 = sjcl.bitArray.getPartial(last2);
13685 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13686 return out;
13687 },
13688
13689 /** xor a block of 4 words together.
13690 * @private
13691 */
13692 _xor4: function(x,y) {
13693 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13694 },
13695
13696 /** byteswap a word array inplace.
13697 * (does not handle partial words)
13698 * @param {sjcl.bitArray} a word array
13699 * @return {sjcl.bitArray} byteswapped array
13700 */
13701 byteswapM: function(a) {
13702 var i, v, m = 0xff00;
13703 for (i = 0; i < a.length; ++i) {
13704 v = a[i];
13705 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13706 }
80c4dd2a
IC
13707 return a;
13708 }
13709};
13710
13711
13712//// codecString.js
13713
13714/** @fileOverview Bit array codec implementations.
13715 *
13716 * @author Emily Stark
13717 * @author Mike Hamburg
13718 * @author Dan Boneh
13719 */
13720
13721/** @namespace UTF-8 strings */
13722sjcl.codec.utf8String = {
13723 /** Convert from a bitArray to a UTF-8 string. */
13724 fromBits: function (arr) {
13725 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13726 for (i=0; i<bl/8; i++) {
13727 if ((i&3) === 0) {
13728 tmp = arr[i/4];
13729 }
13730 out += String.fromCharCode(tmp >>> 24);
13731 tmp <<= 8;
ebd8d4e8 13732 }
80c4dd2a
IC
13733 return decodeURIComponent(escape(out));
13734 },
13735
13736 /** Convert from a UTF-8 string to a bitArray. */
13737 toBits: function (str) {
13738 str = unescape(encodeURIComponent(str));
13739 var out = [], i, tmp=0;
13740 for (i=0; i<str.length; i++) {
13741 tmp = tmp << 8 | str.charCodeAt(i);
13742 if ((i&3) === 3) {
13743 out.push(tmp);
13744 tmp = 0;
13745 }
ebd8d4e8 13746 }
80c4dd2a
IC
13747 if (i&3) {
13748 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13749 }
80c4dd2a
IC
13750 return out;
13751 }
13752};
13753
13754
13755//// codecHex.js
13756
13757/** @fileOverview Bit array codec implementations.
13758 *
13759 * @author Emily Stark
13760 * @author Mike Hamburg
13761 * @author Dan Boneh
13762 */
13763
13764/** @namespace Hexadecimal */
13765sjcl.codec.hex = {
13766 /** Convert from a bitArray to a hex string. */
13767 fromBits: function (arr) {
13768 var out = "", i;
13769 for (i=0; i<arr.length; i++) {
13770 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13771 }
80c4dd2a
IC
13772 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13773 },
13774 /** Convert from a hex string to a bitArray. */
13775 toBits: function (str) {
13776 var i, out=[], len;
13777 str = str.replace(/\s|0x/g, "");
13778 len = str.length;
13779 str = str + "00000000";
13780 for (i=0; i<str.length; i+=8) {
13781 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13782 }
80c4dd2a
IC
13783 return sjcl.bitArray.clamp(out, len*4);
13784 }
13785};
13786
13787
13788//// sha512.js
13789
13790/** @fileOverview Javascript SHA-512 implementation.
13791 *
13792 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13793 * SJCL by Stefan Thomas.
13794 *
13795 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13796 * Released with New BSD License
13797 *
13798 * @author Emily Stark
13799 * @author Mike Hamburg
13800 * @author Dan Boneh
13801 * @author Jeff Mott
13802 * @author Stefan Thomas
13803 */
13804
13805/**
13806 * Context for a SHA-512 operation in progress.
13807 * @constructor
13808 * @class Secure Hash Algorithm, 512 bits.
13809 */
13810sjcl.hash.sha512 = function (hash) {
13811 if (!this._key[0]) { this._precompute(); }
13812 if (hash) {
13813 this._h = hash._h.slice(0);
13814 this._buffer = hash._buffer.slice(0);
13815 this._length = hash._length;
13816 } else {
13817 this.reset();
13818 }
13819};
13820
13821/**
13822 * Hash a string or an array of words.
13823 * @static
13824 * @param {bitArray|String} data the data to hash.
13825 * @return {bitArray} The hash value, an array of 16 big-endian words.
13826 */
13827sjcl.hash.sha512.hash = function (data) {
13828 return (new sjcl.hash.sha512()).update(data).finalize();
13829};
13830
13831sjcl.hash.sha512.prototype = {
13832 /**
13833 * The hash's block size, in bits.
13834 * @constant
13835 */
13836 blockSize: 1024,
13837
13838 /**
13839 * Reset the hash state.
13840 * @return this
13841 */
13842 reset:function () {
13843 this._h = this._init.slice(0);
13844 this._buffer = [];
13845 this._length = 0;
13846 return this;
13847 },
13848
13849 /**
13850 * Input several words to the hash.
13851 * @param {bitArray|String} data the data to hash.
13852 * @return this
13853 */
13854 update: function (data) {
13855 if (typeof data === "string") {
13856 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13857 }
80c4dd2a
IC
13858 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13859 ol = this._length,
13860 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13861 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13862 this._block(b.splice(0,32));
ebd8d4e8 13863 }
80c4dd2a
IC
13864 return this;
13865 },
13866
13867 /**
13868 * Complete hashing and output the hash value.
13869 * @return {bitArray} The hash value, an array of 16 big-endian words.
13870 */
13871 finalize:function () {
13872 var i, b = this._buffer, h = this._h;
13873
13874 // Round out and push the buffer
13875 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13876
13877 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13878 for (i = b.length + 4; i & 31; i++) {
13879 b.push(0);
ebd8d4e8 13880 }
80c4dd2a
IC
13881
13882 // append the length
13883 b.push(0);
13884 b.push(0);
13885 b.push(Math.floor(this._length / 0x100000000));
13886 b.push(this._length | 0);
13887
13888 while (b.length) {
13889 this._block(b.splice(0,32));
ebd8d4e8 13890 }
80c4dd2a
IC
13891
13892 this.reset();
13893 return h;
13894 },
13895
13896 /**
13897 * The SHA-512 initialization vector, to be precomputed.
13898 * @private
13899 */
13900 _init:[],
13901
13902 /**
13903 * Least significant 24 bits of SHA512 initialization values.
13904 *
13905 * Javascript only has 53 bits of precision, so we compute the 40 most
13906 * significant bits and add the remaining 24 bits as constants.
13907 *
13908 * @private
13909 */
13910 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13911
13912 /*
13913 _init:
13914 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13915 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13916 */
13917
13918 /**
13919 * The SHA-512 hash key, to be precomputed.
13920 * @private
13921 */
13922 _key:[],
13923
13924 /**
13925 * Least significant 24 bits of SHA512 key values.
13926 * @private
13927 */
13928 _keyr:
13929 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13930 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13931 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13932 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13933 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13934 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13935 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13936 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13937 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13938 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13939
13940 /*
13941 _key:
13942 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13943 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13944 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13945 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13946 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13947 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13948 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13949 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13950 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13951 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13952 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13953 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13954 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13955 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13956 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13957 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13958 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13959 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13960 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13961 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13962 */
13963
13964 /**
13965 * Function to precompute _init and _key.
13966 * @private
13967 */
13968 _precompute: function () {
13969 // XXX: This code is for precomputing the SHA256 constants, change for
13970 // SHA512 and re-enable.
13971 var i = 0, prime = 2, factor;
13972
13973 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13974 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13975
13976 outer: for (; i<80; prime++) {
13977 for (factor=2; factor*factor <= prime; factor++) {
13978 if (prime % factor === 0) {
13979 // not a prime
13980 continue outer;
ebd8d4e8 13981 }
80c4dd2a
IC
13982 }
13983
13984 if (i<8) {
13985 this._init[i*2] = frac(Math.pow(prime, 1/2));
13986 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13987 }
13988 this._key[i*2] = frac(Math.pow(prime, 1/3));
13989 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13990 i++;
ebd8d4e8 13991 }
80c4dd2a
IC
13992 },
13993
13994 /**
13995 * Perform one cycle of SHA-512.
13996 * @param {bitArray} words one block of words.
13997 * @private
13998 */
13999 _block:function (words) {
14000 var i, wrh, wrl,
14001 w = words.slice(0),
14002 h = this._h,
14003 k = this._key,
14004 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14005 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14006 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14007 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14008
14009 // Working variables
14010 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14011 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14012 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14013 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14014
14015 for (i=0; i<80; i++) {
14016 // load up the input word for this round
14017 if (i<16) {
14018 wrh = w[i * 2];
14019 wrl = w[i * 2 + 1];
14020 } else {
14021 // Gamma0
14022 var gamma0xh = w[(i-15) * 2];
14023 var gamma0xl = w[(i-15) * 2 + 1];
14024 var gamma0h =
14025 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14026 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14027 (gamma0xh >>> 7);
14028 var gamma0l =
14029 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14030 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14031 ((gamma0xh << 25) | (gamma0xl >>> 7));
14032
14033 // Gamma1
14034 var gamma1xh = w[(i-2) * 2];
14035 var gamma1xl = w[(i-2) * 2 + 1];
14036 var gamma1h =
14037 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14038 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14039 (gamma1xh >>> 6);
14040 var gamma1l =
14041 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14042 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14043 ((gamma1xh << 26) | (gamma1xl >>> 6));
14044
14045 // Shortcuts
14046 var wr7h = w[(i-7) * 2];
14047 var wr7l = w[(i-7) * 2 + 1];
14048
14049 var wr16h = w[(i-16) * 2];
14050 var wr16l = w[(i-16) * 2 + 1];
14051
14052 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14053 wrl = gamma0l + wr7l;
14054 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14055 wrl += gamma1l;
14056 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14057 wrl += wr16l;
14058 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14059 }
14060
14061 w[i*2] = wrh |= 0;
14062 w[i*2 + 1] = wrl |= 0;
14063
14064 // Ch
14065 var chh = (eh & fh) ^ (~eh & gh);
14066 var chl = (el & fl) ^ (~el & gl);
14067
14068 // Maj
14069 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14070 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14071
14072 // Sigma0
14073 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14074 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14075
14076 // Sigma1
14077 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14078 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14079
14080 // K(round)
14081 var krh = k[i*2];
14082 var krl = k[i*2+1];
14083
14084 // t1 = h + sigma1 + ch + K(round) + W(round)
14085 var t1l = hl + sigma1l;
14086 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14087 t1l += chl;
14088 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14089 t1l += krl;
14090 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14091 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14092 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14093
14094 // t2 = sigma0 + maj
14095 var t2l = sigma0l + majl;
14096 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14097
14098 // Update working variables
14099 hh = gh;
14100 hl = gl;
14101 gh = fh;
14102 gl = fl;
14103 fh = eh;
14104 fl = el;
14105 el = (dl + t1l) | 0;
14106 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14107 dh = ch;
14108 dl = cl;
14109 ch = bh;
14110 cl = bl;
14111 bh = ah;
14112 bl = al;
14113 al = (t1l + t2l) | 0;
14114 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14115 }
14116
14117 // Intermediate hash
14118 h0l = h[1] = (h0l + al) | 0;
14119 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14120 h1l = h[3] = (h1l + bl) | 0;
14121 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14122 h2l = h[5] = (h2l + cl) | 0;
14123 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14124 h3l = h[7] = (h3l + dl) | 0;
14125 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14126 h4l = h[9] = (h4l + el) | 0;
14127 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14128 h5l = h[11] = (h5l + fl) | 0;
14129 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14130 h6l = h[13] = (h6l + gl) | 0;
14131 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14132 h7l = h[15] = (h7l + hl) | 0;
14133 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14134 }
14135};
14136
14137
14138//// hmac.js
14139
14140/** @fileOverview HMAC implementation.
14141 *
14142 * @author Emily Stark
14143 * @author Mike Hamburg
14144 * @author Dan Boneh
14145 */
14146
14147/** HMAC with the specified hash function.
14148 * @constructor
14149 * @param {bitArray} key the key for HMAC.
14150 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14151 */
14152sjcl.misc.hmac = function (key, Hash) {
14153 this._hash = Hash = Hash || sjcl.hash.sha256;
14154 var exKey = [[],[]], i,
14155 bs = Hash.prototype.blockSize / 32;
14156 this._baseHash = [new Hash(), new Hash()];
14157
14158 if (key.length > bs) {
14159 key = Hash.hash(key);
14160 }
14161
14162 for (i=0; i<bs; i++) {
14163 exKey[0][i] = key[i]^0x36363636;
14164 exKey[1][i] = key[i]^0x5C5C5C5C;
14165 }
14166
14167 this._baseHash[0].update(exKey[0]);
14168 this._baseHash[1].update(exKey[1]);
14169 this._resultHash = new Hash(this._baseHash[0]);
14170};
14171
14172/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14173 * @param {bitArray|String} data The data to mac.
14174 */
14175sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14176 if (!this._updated) {
14177 this.update(data);
14178 return this.digest(data);
14179 } else {
14180 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14181 }
14182};
14183
14184sjcl.misc.hmac.prototype.reset = function () {
14185 this._resultHash = new this._hash(this._baseHash[0]);
14186 this._updated = false;
14187};
14188
14189sjcl.misc.hmac.prototype.update = function (data) {
14190 this._updated = true;
14191 this._resultHash.update(data);
14192};
14193
14194sjcl.misc.hmac.prototype.digest = function () {
14195 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14196
14197 this.reset();
14198
14199 return result;
14200};
14201
14202
14203//// pbkdf2.js
14204
14205
14206/** @fileOverview Password-based key-derivation function, version 2.0.
14207 *
14208 * @author Emily Stark
14209 * @author Mike Hamburg
14210 * @author Dan Boneh
14211 */
14212
14213/** Password-Based Key-Derivation Function, version 2.0.
14214 *
14215 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14216 *
14217 * This is the method specified by RSA's PKCS #5 standard.
14218 *
14219 * @param {bitArray|String} password The password.
14220 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14221 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14222 * @param {Number} [length] The length of the derived key. Defaults to the
14223 output size of the hash function.
14224 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14225 * @return {bitArray} the derived key.
14226 */
14227sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14228 count = count || 1000;
14229
14230 if (length < 0 || count < 0) {
14231 throw sjcl.exception.invalid("invalid params to pbkdf2");
14232 }
14233
14234 if (typeof password === "string") {
14235 password = sjcl.codec.utf8String.toBits(password);
14236 }
14237
14238 if (typeof salt === "string") {
14239 salt = sjcl.codec.utf8String.toBits(salt);
14240 }
14241
14242 Prff = Prff || sjcl.misc.hmac;
14243
14244 var prf = new Prff(password),
14245 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14246
14247 for (k = 1; 32 * out.length < (length || 1); k++) {
14248 u = ui = prf.encrypt(b.concat(salt,[k]));
14249
14250 for (i=1; i<count; i++) {
14251 ui = prf.encrypt(ui);
14252 for (j=0; j<ui.length; j++) {
14253 u[j] ^= ui[j];
14254 }
ebd8d4e8 14255 }
80c4dd2a
IC
14256
14257 out = out.concat(u);
14258 }
14259
14260 if (length) { out = b.clamp(out, length); }
14261
14262 return out;
14263};
14264
14265
14266//// sha256.js
14267
14268/** @fileOverview Javascript SHA-256 implementation.
14269 *
14270 * An older version of this implementation is available in the public
14271 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14272 * Stanford University 2008-2010 and BSD-licensed for liability
14273 * reasons.
14274 *
14275 * Special thanks to Aldo Cortesi for pointing out several bugs in
14276 * this code.
14277 *
14278 * @author Emily Stark
14279 * @author Mike Hamburg
14280 * @author Dan Boneh
14281 */
14282
14283/**
14284 * Context for a SHA-256 operation in progress.
14285 * @constructor
14286 * @class Secure Hash Algorithm, 256 bits.
14287 */
14288sjcl.hash.sha256 = function (hash) {
14289 if (!this._key[0]) { this._precompute(); }
14290 if (hash) {
14291 this._h = hash._h.slice(0);
14292 this._buffer = hash._buffer.slice(0);
14293 this._length = hash._length;
14294 } else {
14295 this.reset();
14296 }
14297};
14298
14299/**
14300 * Hash a string or an array of words.
14301 * @static
14302 * @param {bitArray|String} data the data to hash.
14303 * @return {bitArray} The hash value, an array of 16 big-endian words.
14304 */
14305sjcl.hash.sha256.hash = function (data) {
14306 return (new sjcl.hash.sha256()).update(data).finalize();
14307};
14308
14309sjcl.hash.sha256.prototype = {
14310 /**
14311 * The hash's block size, in bits.
14312 * @constant
14313 */
14314 blockSize: 512,
14315
14316 /**
14317 * Reset the hash state.
14318 * @return this
14319 */
14320 reset:function () {
14321 this._h = this._init.slice(0);
14322 this._buffer = [];
14323 this._length = 0;
14324 return this;
14325 },
14326
14327 /**
14328 * Input several words to the hash.
14329 * @param {bitArray|String} data the data to hash.
14330 * @return this
14331 */
14332 update: function (data) {
14333 if (typeof data === "string") {
14334 data = sjcl.codec.utf8String.toBits(data);
14335 }
14336 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14337 ol = this._length,
14338 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14339 for (i = 512+ol & -512; i <= nl; i+= 512) {
14340 this._block(b.splice(0,16));
ebd8d4e8 14341 }
3af2954a 14342 return this;
80c4dd2a
IC
14343 },
14344
14345 /**
14346 * Complete hashing and output the hash value.
14347 * @return {bitArray} The hash value, an array of 8 big-endian words.
14348 */
14349 finalize:function () {
14350 var i, b = this._buffer, h = this._h;
14351
14352 // Round out and push the buffer
14353 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14354
14355 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14356 for (i = b.length + 2; i & 15; i++) {
14357 b.push(0);
14358 }
14359
14360 // append the length
14361 b.push(Math.floor(this._length / 0x100000000));
14362 b.push(this._length | 0);
14363
14364 while (b.length) {
14365 this._block(b.splice(0,16));
14366 }
14367
14368 this.reset();
14369 return h;
14370 },
14371
14372 /**
14373 * The SHA-256 initialization vector, to be precomputed.
14374 * @private
14375 */
14376 _init:[],
14377 /*
14378 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14379 */
14380
14381 /**
14382 * The SHA-256 hash key, to be precomputed.
14383 * @private
14384 */
14385 _key:[],
14386 /*
14387 _key:
14388 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14389 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14390 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14391 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14392 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14393 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14394 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14395 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14396 */
14397
14398
14399 /**
14400 * Function to precompute _init and _key.
14401 * @private
14402 */
14403 _precompute: function () {
14404 var i = 0, prime = 2, factor;
14405
14406 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14407
14408 outer: for (; i<64; prime++) {
14409 for (factor=2; factor*factor <= prime; factor++) {
14410 if (prime % factor === 0) {
14411 // not a prime
14412 continue outer;
ebd8d4e8 14413 }
80c4dd2a
IC
14414 }
14415
14416 if (i<8) {
14417 this._init[i] = frac(Math.pow(prime, 1/2));
14418 }
14419 this._key[i] = frac(Math.pow(prime, 1/3));
14420 i++;
ebd8d4e8 14421 }
80c4dd2a
IC
14422 },
14423
14424 /**
14425 * Perform one cycle of SHA-256.
14426 * @param {bitArray} words one block of words.
14427 * @private
14428 */
14429 _block:function (words) {
14430 var i, tmp, a, b,
14431 w = words.slice(0),
14432 h = this._h,
14433 k = this._key,
14434 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14435 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14436
14437 /* Rationale for placement of |0 :
14438 * If a value can overflow is original 32 bits by a factor of more than a few
14439 * million (2^23 ish), there is a possibility that it might overflow the
14440 * 53-bit mantissa and lose precision.
14441 *
14442 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14443 * propagates around the loop, and on the hash state h[]. I don't believe
14444 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14445 * (for h4 anyway), and better safe than sorry.
14446 *
14447 * The clamps on h[] are necessary for the output to be correct even in the
14448 * common case and for short inputs.
14449 */
14450 for (i=0; i<64; i++) {
14451 // load up the input word for this round
14452 if (i<16) {
14453 tmp = w[i];
14454 } else {
14455 a = w[(i+1 ) & 15];
14456 b = w[(i+14) & 15];
14457 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14458 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14459 w[i&15] + w[(i+9) & 15]) | 0;
14460 }
14461
14462 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14463
14464 // shift register
14465 h7 = h6; h6 = h5; h5 = h4;
14466 h4 = h3 + tmp | 0;
14467 h3 = h2; h2 = h1; h1 = h0;
14468
14469 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14470 }
14471
14472 h[0] = h[0]+h0 | 0;
14473 h[1] = h[1]+h1 | 0;
14474 h[2] = h[2]+h2 | 0;
14475 h[3] = h[3]+h3 | 0;
14476 h[4] = h[4]+h4 | 0;
14477 h[5] = h[5]+h5 | 0;
14478 h[6] = h[6]+h6 | 0;
14479 h[7] = h[7]+h7 | 0;
14480 }
14481};
dc55c6b0 14482</script>
ab78acc6 14483 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14484WORDLISTS["english"] = [
ebd8d4e8
IC
14485"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14486"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14487"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14488"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14489"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14490"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14491"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14492"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14493"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14494"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14495"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14496"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14497"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14498"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14499"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14500"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14501"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14502"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14503"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14504"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14505"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14506"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14507"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14508"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14509"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14510"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14511"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14512"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14513"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14514"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14515"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14516"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14517"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14518"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14519"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14520"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14521"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14522"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14523"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14524"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14525"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14526"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14527"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14528"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14529"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14530"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14531"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14532"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14533"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14534"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14535"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14536"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14537"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14538"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14539"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14540"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14541"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14542"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14543"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14544"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14545"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14546"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14547"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14548"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14549"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14550"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14551"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14552"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14553"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14554"film","filter","final","find","fine","finger","finish","fire","firm","first",
14555"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14556"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14557"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14558"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14559"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14560"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14561"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14562"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14563"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14564"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14565"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14566"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14567"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14568"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14569"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14570"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14571"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14572"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14573"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14574"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14575"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14576"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14577"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14578"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14579"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14580"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14581"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14582"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14583"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14584"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14585"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14586"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14587"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14588"liar","liberty","library","license","life","lift","light","like","limb","limit",
14589"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14590"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14591"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14592"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14593"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14594"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14595"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14596"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14597"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14598"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14599"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14600"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14601"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14602"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14603"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14604"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14605"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14606"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14607"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14608"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14609"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14610"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14611"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14612"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14613"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14614"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14615"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14616"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14617"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14618"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14619"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14620"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14621"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14622"prize","problem","process","produce","profit","program","project","promote","proof","property",
14623"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14624"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14625"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14626"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14627"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14628"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14629"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14630"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14631"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14632"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14633"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14634"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14635"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14636"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14637"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14638"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14639"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14640"scrub","sea","search","season","seat","second","secret","section","security","seed",
14641"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14642"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14643"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14644"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14645"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14646"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14647"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14648"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14649"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14650"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14651"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14652"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14653"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14654"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14655"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14656"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14657"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14658"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14659"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14660"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14661"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14662"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14663"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14664"thank","that","theme","then","theory","there","they","thing","this","thought",
14665"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14666"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14667"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14668"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14669"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14670"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14671"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14672"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14673"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14674"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14675"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14676"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14677"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14678"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14679"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14680"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14681"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14682"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14683"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14684"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14685"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14686"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14687"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14688"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14689"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
14690</script>
14691 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14692WORDLISTS["japanese"] = [
14693"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14694"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14695"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14696"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14697"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14698"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
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</script>
14899 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14900WORDLISTS["spanish"] = [
14901"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14902"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14903"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14904"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14905"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14906"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14907"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14908"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14909"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14910"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14911"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14912"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14913"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14914"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14915"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14916"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14917"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14918"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14919"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14920"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14921"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14922"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14923"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14924"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14925"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14926"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14927"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14928"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14929"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14930"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14931"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14932"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14933"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14934"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14935"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14936"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14937"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14938"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14939"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14940"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14941"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14942"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14943"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14944"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14945"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14946"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14947"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14948"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14949"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14950"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14951"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14952"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14953"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14954"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14955"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14956"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14957"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14958"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14959"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14960"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14961"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14962"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14963"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14964"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14965"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14966"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14967"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14968"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14969"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14970"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14971"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14972"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14973"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14974"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14975"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14976"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14977"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14978"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14979"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14980"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14981"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14982"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14983"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14984"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14985"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14986"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14987"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14988"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14989"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14990"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14991"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14992"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14993"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
14994"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
14995"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
14996"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
14997"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
14998"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
14999"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15000"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15001"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15002"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15003"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15004"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15005"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15006"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15007"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15008"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15009"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15010"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15011"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15012"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15013"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15014"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15015"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15016"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15017"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15018"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15019"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15020"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15021"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15022"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15023"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15024"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15025"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15026"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15027"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15028"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15029"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15030"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15031"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15032"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15033"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15034"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15035"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15036"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15037"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15038"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15039"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15040"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15041"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15042"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15043"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15044"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15045"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15046"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15047"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15048"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15049"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15050"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15051"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15052"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15053"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15054"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15055"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15056"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15057"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15058"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15059"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15060"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15061"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15062"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15063"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15064"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15065"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15066"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15067"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15068"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15069"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15070"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15071"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15072"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15073"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15074"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15075"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15076"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15077"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15078"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15079"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15080"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15081"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15082"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15083"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15084"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15085"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15086"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15087"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15088"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15089"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15090"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15091"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15092"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15093"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15094"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15095"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15096"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15097"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15098"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15099"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15100"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15101"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15102"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15103"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15104"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15105"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15106</script>
15107 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15108WORDLISTS["chinese_simplified"] = [
15109"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15110"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15111"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15112"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15113"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15114"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
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</script>
15315 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15316WORDLISTS["chinese_traditional"] = [
15317"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15318"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15319"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15320"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15321"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15322"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
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</script>
15523 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15524WORDLISTS["french"] = [
15525"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15526"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15527"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15528"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15529"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15530"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15531"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15532"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15533"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15534"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15535"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15536"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15537"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15538"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15539"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15540"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15541"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15542"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15543"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15544"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15545"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15546"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15547"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15548"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15549"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15550"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15551"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15552"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15553"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15554"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15555"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15556"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15557"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15558"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15559"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15560"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15561"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15562"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15563"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15564"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15565"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15566"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15567"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15568"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15569"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15570"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15571"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15572"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15573"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15574"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15575"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15576"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15577"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15578"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15579"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15580"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15581"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15582"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15583"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15584"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15585"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15586"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15587"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15588"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15589"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15590"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15591"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15592"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15593"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15594"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15595"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15596"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15597"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15598"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15599"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15600"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15601"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15602"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15603"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15604"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15605"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15606"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15607"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15608"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15609"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15610"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15611"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15612"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15613"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15614"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15615"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15616"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15617"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15618"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15619"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15620"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15621"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15622"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15623"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15624"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15625"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15626"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15627"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15628"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15629"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15630"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15631"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15632"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15633"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15634"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15635"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15636"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15637"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15638"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15639"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15640"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15641"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15642"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15643"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15644"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15645"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15646"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15647"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15648"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15649"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15650"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15651"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15652"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15653"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15654"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15655"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15656"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15657"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15658"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15659"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15660"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15661"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15662"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15663"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15664"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15665"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15666"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15667"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15668"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15669"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15670"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15671"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15672"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15673"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15674"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15675"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15676"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15677"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15678"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15679"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15680"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15681"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15682"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15683"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15684"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15685"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15686"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15687"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15688"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15689"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15690"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15691"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15692"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15693"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15694"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15695"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15696"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15697"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15698"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15699"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15700"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15701"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15702"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15703"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15704"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15705"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15706"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15707"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15708"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15709"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15710"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15711"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15712"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15713"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15714"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15715"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15716"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15717"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15718"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15719"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15720"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15721"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15722"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15723"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15724"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15725"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15726"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15727"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15728"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15729"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15730</script>
15731 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15732WORDLISTS["italian"] = [
15733"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15734"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15735"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15736"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15737"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15738"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15739"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15740"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15741"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15742"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15743"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15744"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15745"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15746"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15747"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15748"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15749"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15750"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15751"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15752"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15753"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15754"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15755"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15756"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15757"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15758"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15759"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15760"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15761"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15762"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15763"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15764"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15765"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15766"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15767"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15768"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15769"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15770"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15771"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15772"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15773"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15774"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15775"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15776"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15777"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15778"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15779"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15780"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15781"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15782"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15783"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15784"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15785"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15786"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15787"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15788"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15789"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15790"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15791"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15792"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15793"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15794"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15795"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15796"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15797"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15798"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15799"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15800"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15801"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15802"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15803"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15804"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15805"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15806"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15807"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15808"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15809"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15810"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15811"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15812"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15813"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15814"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15815"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15816"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15817"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15818"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15819"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15820"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15821"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15822"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15823"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15824"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15825"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15826"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15827"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15828"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15829"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15830"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15831"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15832"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15833"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15834"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15835"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15836"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15837"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15838"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15839"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15840"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15841"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15842"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15843"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15844"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15845"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15846"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15847"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15848"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15849"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15850"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15851"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15852"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15853"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15854"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15855"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15856"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15857"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15858"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15859"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15860"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15861"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15862"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15863"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15864"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15865"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15866"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15867"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15868"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15869"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15870"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15871"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15872"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15873"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15874"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15875"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15876"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15877"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15878"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15879"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15880"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15881"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15882"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15883"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15884"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15885"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15886"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15887"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15888"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15889"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15890"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15891"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15892"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15893"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15894"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15895"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15896"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15897"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15898"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15899"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15900"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15901"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15902"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15903"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15904"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15905"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15906"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15907"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15908"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15909"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15910"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15911"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15912"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15913"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15914"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15915"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15916"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15917"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15918"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15919"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15920"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15921"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15922"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15923"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15924"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15925"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15926"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15927"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15928"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15929"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15930"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15931"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15932"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15933"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15934"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15935"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15936"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15937"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 15938</script>
ab78acc6 15939 <script>/*
3af2954a
IC
15940 * Copyright (c) 2013 Pavol Rusnak
15941 *
15942 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15943 * this software and associated documentation files (the "Software"), to deal in
15944 * the Software without restriction, including without limitation the rights to
15945 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15946 * of the Software, and to permit persons to whom the Software is furnished to do
15947 * so, subject to the following conditions:
15948 *
15949 * The above copyright notice and this permission notice shall be included in all
15950 * copies or substantial portions of the Software.
15951 *
15952 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15953 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15954 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15955 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15956 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15957 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15958 */
15959
15960/*
15961 * Javascript port from python by Ian Coleman
15962 *
80c4dd2a
IC
15963 * Requires code from sjcl
15964 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
15965 */
15966
15967var Mnemonic = function(language) {
15968
15969 var PBKDF2_ROUNDS = 2048;
15970 var RADIX = 2048;
15971
15972 var self = this;
15973 var wordlist = [];
15974
80c4dd2a
IC
15975 var hmacSHA512 = function(key) {
15976 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15977 this.encrypt = function() {
15978 return hasher.encrypt.apply(hasher, arguments);
15979 };
15980 };
15981
3af2954a
IC
15982 function init() {
15983 wordlist = WORDLISTS[language];
15984 if (wordlist.length != RADIX) {
15985 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15986 throw err;
15987 }
15988 }
15989
15990 self.generate = function(strength) {
15991 strength = strength || 128;
15992 var r = strength % 32;
15993 if (r > 0) {
15994 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
15995 }
15996 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
15997 if (!hasStrongCrypto) {
15998 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
15999 }
16000 var buffer = new Uint8Array(strength / 8);
16001 var data = crypto.getRandomValues(buffer);
16002 return self.toMnemonic(data);
16003 }
16004
80c4dd2a
IC
16005 self.toMnemonic = function(byteArray) {
16006 if (byteArray.length % 4 > 0) {
16007 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
16008 }
16009
16010 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
16011 var data = byteArrayToWordArray(byteArray);
16012 var hash = sjcl.hash.sha256.hash(data);
16013 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
16014
16015 // b is a binary string, eg '00111010101100...'
16016 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16017 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16018 //
16019 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16020 // c = bin(int(h, 16))[2:].zfill(256)
16021 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
16022 var a = byteArrayToBinaryString(byteArray);
16023 var c = zfill(hexStringToBinaryString(h), 256);
16024 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
16025 // b = line1 + line2
16026 var b = a + d;
16027
16028 var result = [];
16029 var blen = b.length / 11;
16030 for (var i=0; i<blen; i++) {
16031 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16032 result.push(wordlist[idx]);
16033 }
0515eeec 16034 return self.joinWords(result);
3af2954a
IC
16035 }
16036
16037 self.check = function(mnemonic) {
0515eeec 16038 var mnemonic = self.splitWords(mnemonic);
3af2954a
IC
16039 if (mnemonic.length % 3 > 0) {
16040 return false
16041 }
16042 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16043 var idx = [];
16044 for (var i=0; i<mnemonic.length; i++) {
16045 var word = mnemonic[i];
16046 var wordIndex = wordlist.indexOf(word);
16047 if (wordIndex == -1) {
16048 return false;
16049 }
16050 var binaryIndex = zfill(wordIndex.toString(2), 11);
16051 idx.push(binaryIndex);
16052 }
16053 var b = idx.join('');
16054 var l = b.length;
16055 //d = b[:l / 33 * 32]
16056 //h = b[-l / 33:]
16057 var d = b.substring(0, l / 33 * 32);
16058 var h = b.substring(l - l / 33, l);
16059 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 16060 var nd = binaryStringToWordArray(d);
3af2954a 16061 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
16062 var ndHash = sjcl.hash.sha256.hash(nd);
16063 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16064 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
16065 var nh = ndBstr.substring(0,l/33);
16066 return h == nh;
16067 }
16068
16069 self.toSeed = function(mnemonic, passphrase) {
16070 passphrase = passphrase || '';
0515eeec 16071 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
3af2954a
IC
16072 passphrase = self.normalizeString(passphrase)
16073 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
16074 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16075 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16076 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16077 var hashHex = sjcl.codec.hex.fromBits(result);
16078 return hashHex;
3af2954a
IC
16079 }
16080
0515eeec
IC
16081 self.splitWords = function(mnemonic) {
16082 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16083 }
16084
16085 self.joinWords = function(words) {
16086 // Set space correctly depending on the language
16087 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16088 var space = " ";
16089 if (language == "japanese") {
16090 space = "\u3000"; // ideographic space
16091 }
16092 return words.join(space);
16093 }
16094
3af2954a
IC
16095 self.normalizeString = function(str) {
16096 if (typeof str.normalize == "function") {
16097 return str.normalize("NFKD");
16098 }
16099 else {
16100 // TODO decide how to handle this in the future.
16101 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16102 return str;
16103 }
16104 }
16105
80c4dd2a
IC
16106 function byteArrayToWordArray(data) {
16107 var a = [];
16108 for (var i=0; i<data.length/4; i++) {
16109 v = 0;
16110 v += data[i*4 + 0] << 8 * 3;
16111 v += data[i*4 + 1] << 8 * 2;
16112 v += data[i*4 + 2] << 8 * 1;
16113 v += data[i*4 + 3] << 8 * 0;
16114 a.push(v);
16115 }
16116 return a;
16117 }
16118
3af2954a
IC
16119 function byteArrayToBinaryString(data) {
16120 var bin = "";
16121 for (var i=0; i<data.length; i++) {
16122 bin += zfill(data[i].toString(2), 8);
16123 }
16124 return bin;
16125 }
16126
80c4dd2a
IC
16127 function hexStringToBinaryString(hexString) {
16128 binaryString = "";
16129 for (var i=0; i<hexString.length; i++) {
16130 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16131 }
16132 return binaryString;
16133 }
16134
16135 function binaryStringToWordArray(binary) {
16136 var aLen = binary.length / 32;
16137 var a = [];
16138 for (var i=0; i<aLen; i++) {
16139 var valueStr = binary.substring(0,32);
3af2954a 16140 var value = parseInt(valueStr, 2);
80c4dd2a
IC
16141 a.push(value);
16142 binary = binary.slice(32);
3af2954a 16143 }
80c4dd2a 16144 return a;
3af2954a
IC
16145 }
16146
16147 // Pad a numeric string on the left with zero digits until the given width
16148 // is reached.
16149 // Note this differs to the python implementation because it does not
16150 // handle numbers starting with a sign.
16151 function zfill(source, length) {
16152 source = source.toString();
16153 while (source.length < length) {
16154 source = '0' + source;
16155 }
16156 return source;
16157 }
16158
16159 init();
ebd8d4e8 16160
3af2954a 16161}
dc55c6b0 16162</script>
ab78acc6 16163 <script>(function() {
ebd8d4e8 16164
0515eeec
IC
16165 // mnemonics is populated as required by getLanguage
16166 var mnemonics = { "english": new Mnemonic("english") };
16167 var mnemonic = mnemonics["english"];
73161a92 16168 var seed = null
ebd8d4e8
IC
16169 var bip32RootKey = null;
16170 var bip32ExtendedKey = null;
ab78acc6 16171 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
16172 var addressRowTemplate = $("#address-row-template");
16173
80c4dd2a
IC
16174 var showIndex = true;
16175 var showAddress = true;
16176 var showPrivKey = true;
16177
ebd8d4e8 16178 var phraseChangeTimeoutEvent = null;
efe41586 16179 var rootKeyChangedTimeoutEvent = null;
ebd8d4e8
IC
16180
16181 var DOM = {};
d6cedc94
IC
16182 DOM.network = $(".network");
16183 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 16184 DOM.phrase = $(".phrase");
721b7284 16185 DOM.passphrase = $(".passphrase");
ebd8d4e8 16186 DOM.generate = $(".generate");
73161a92 16187 DOM.seed = $(".seed");
ebd8d4e8
IC
16188 DOM.rootKey = $(".root-key");
16189 DOM.extendedPrivKey = $(".extended-priv-key");
16190 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
16191 DOM.bip32tab = $("#bip32-tab");
16192 DOM.bip44tab = $("#bip44-tab");
16193 DOM.bip32panel = $("#bip32");
16194 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
16195 DOM.bip32path = $("#bip32-path");
16196 DOM.bip44path = $("#bip44-path");
16197 DOM.bip44purpose = $("#bip44 .purpose");
16198 DOM.bip44coin = $("#bip44 .coin");
16199 DOM.bip44account = $("#bip44 .account");
16200 DOM.bip44change = $("#bip44 .change");
16201 DOM.strength = $(".strength");
1975bfbc 16202 DOM.hardenedAddresses = $(".hardened-addresses");
ebd8d4e8
IC
16203 DOM.addresses = $(".addresses");
16204 DOM.rowsToAdd = $(".rows-to-add");
16205 DOM.more = $(".more");
16206 DOM.feedback = $(".feedback");
16207 DOM.tab = $(".derivation-type a");
16208 DOM.indexToggle = $(".index-toggle");
16209 DOM.addressToggle = $(".address-toggle");
16210 DOM.privateKeyToggle = $(".private-key-toggle");
0515eeec 16211 DOM.languages = $(".languages a");
ebd8d4e8 16212
ebd8d4e8
IC
16213 function init() {
16214 // Events
d6cedc94 16215 DOM.network.on("change", networkChanged);
a19a5498
IC
16216 DOM.phrase.on("input", delayedPhraseChanged);
16217 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
16218 DOM.generate.on("click", generateClicked);
16219 DOM.more.on("click", showMore);
efe41586
IC
16220 DOM.rootKey.on("input", delayedRootKeyChanged);
16221 DOM.bip32path.on("input", calcForDerivationPath);
16222 DOM.bip44purpose.on("input", calcForDerivationPath);
16223 DOM.bip44coin.on("input", calcForDerivationPath);
16224 DOM.bip44account.on("input", calcForDerivationPath);
16225 DOM.bip44change.on("input", calcForDerivationPath);
16226 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
1975bfbc 16227 DOM.hardenedAddresses.on("change", calcForDerivationPath);
ebd8d4e8
IC
16228 DOM.indexToggle.on("click", toggleIndexes);
16229 DOM.addressToggle.on("click", toggleAddresses);
16230 DOM.privateKeyToggle.on("click", togglePrivateKeys);
0515eeec 16231 DOM.languages.on("click", languageChanged);
ebd8d4e8
IC
16232 disableForms();
16233 hidePending();
16234 hideValidationError();
ab78acc6 16235 populateNetworkSelect();
ebd8d4e8
IC
16236 }
16237
16238 // Event handlers
16239
d6cedc94 16240 function networkChanged(e) {
54563907
IC
16241 var networkIndex = e.target.value;
16242 networks[networkIndex].onSelect();
16243 if (seed != null) {
16244 phraseChanged();
16245 }
16246 else {
16247 rootKeyChanged();
16248 }
d6cedc94
IC
16249 }
16250
ebd8d4e8
IC
16251 function delayedPhraseChanged() {
16252 hideValidationError();
16253 showPending();
16254 if (phraseChangeTimeoutEvent != null) {
16255 clearTimeout(phraseChangeTimeoutEvent);
16256 }
16257 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
16258 }
16259
16260 function phraseChanged() {
16261 showPending();
16262 hideValidationError();
0515eeec 16263 setMnemonicLanguage();
ebd8d4e8
IC
16264 // Get the mnemonic phrase
16265 var phrase = DOM.phrase.val();
16266 var errorText = findPhraseErrors(phrase);
16267 if (errorText) {
16268 showValidationError(errorText);
16269 return;
16270 }
efe41586
IC
16271 // Calculate and display
16272 var passphrase = DOM.passphrase.val();
16273 calcBip32RootKeyFromSeed(phrase, passphrase);
16274 calcForDerivationPath();
16275 hidePending();
16276 }
16277
16278 function delayedRootKeyChanged() {
16279 // Warn if there is an existing mnemonic or passphrase.
16280 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
16281 if (!confirm("This will clear existing mnemonic and passphrase")) {
16282 DOM.rootKey.val(bip32RootKey);
16283 return
16284 }
16285 }
16286 hideValidationError();
16287 showPending();
16288 // Clear existing mnemonic and passphrase
16289 DOM.phrase.val("");
16290 DOM.passphrase.val("");
16291 seed = null;
16292 if (rootKeyChangedTimeoutEvent != null) {
16293 clearTimeout(rootKeyChangedTimeoutEvent);
16294 }
16295 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
16296 }
16297
16298 function rootKeyChanged() {
16299 showPending();
16300 hideValidationError();
16301 // Validate the root key TODO
16302 var rootKeyBase58 = DOM.rootKey.val();
16303 var errorText = validateRootKey(rootKeyBase58);
16304 if (errorText) {
16305 showValidationError(errorText);
16306 return;
16307 }
16308 // Calculate and display
16309 calcBip32RootKeyFromBase58(rootKeyBase58);
16310 calcForDerivationPath();
16311 hidePending();
16312 }
16313
16314 function calcForDerivationPath() {
16315 showPending();
16316 hideValidationError();
ebd8d4e8 16317 // Get the derivation path
38523d36
IC
16318 var derivationPath = getDerivationPath();
16319 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
16320 if (errorText) {
16321 showValidationError(errorText);
16322 return;
16323 }
efe41586 16324 calcBip32ExtendedKey(derivationPath);
ebd8d4e8
IC
16325 displayBip32Info();
16326 hidePending();
16327 }
16328
16329 function generateClicked() {
16330 clearDisplay();
16331 showPending();
16332 setTimeout(function() {
0515eeec 16333 setMnemonicLanguage();
ebd8d4e8
IC
16334 var phrase = generateRandomPhrase();
16335 if (!phrase) {
16336 return;
16337 }
16338 phraseChanged();
16339 }, 50);
16340 }
16341
0515eeec
IC
16342 function languageChanged() {
16343 setTimeout(function() {
16344 setMnemonicLanguage();
16345 if (DOM.phrase.val().length > 0) {
16346 var newPhrase = convertPhraseToNewLanguage();
16347 DOM.phrase.val(newPhrase);
16348 phraseChanged();
16349 }
16350 else {
16351 DOM.generate.trigger("click");
16352 }
16353 }, 50);
16354 }
16355
ebd8d4e8 16356 function toggleIndexes() {
80c4dd2a 16357 showIndex = !showIndex;
ebd8d4e8
IC
16358 $("td.index span").toggleClass("invisible");
16359 }
16360
16361 function toggleAddresses() {
80c4dd2a 16362 showAddress = !showAddress;
ebd8d4e8
IC
16363 $("td.address span").toggleClass("invisible");
16364 }
16365
16366 function togglePrivateKeys() {
80c4dd2a 16367 showPrivKey = !showPrivKey;
ebd8d4e8
IC
16368 $("td.privkey span").toggleClass("invisible");
16369 }
16370
16371 // Private methods
16372
16373 function generateRandomPhrase() {
16374 if (!hasStrongRandom()) {
16375 var errorText = "This browser does not support strong randomness";
16376 showValidationError(errorText);
16377 return;
16378 }
16379 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
16380 var strength = numWords / 3 * 32;
16381 var words = mnemonic.generate(strength);
16382 DOM.phrase.val(words);
16383 return words;
16384 }
16385
efe41586 16386 function calcBip32RootKeyFromSeed(phrase, passphrase) {
73161a92 16387 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 16388 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
efe41586
IC
16389 }
16390
16391 function calcBip32RootKeyFromBase58(rootKeyBase58) {
3821c0d3 16392 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
16393 }
16394
16395 function calcBip32ExtendedKey(path) {
ebd8d4e8
IC
16396 bip32ExtendedKey = bip32RootKey;
16397 // Derive the key from the path
16398 var pathBits = path.split("/");
16399 for (var i=0; i<pathBits.length; i++) {
16400 var bit = pathBits[i];
16401 var index = parseInt(bit);
16402 if (isNaN(index)) {
16403 continue;
16404 }
16405 var hardened = bit[bit.length-1] == "'";
16406 if (hardened) {
16407 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16408 }
16409 else {
16410 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16411 }
16412 }
16413 }
16414
16415 function showValidationError(errorText) {
16416 DOM.feedback
16417 .text(errorText)
16418 .show();
16419 }
16420
16421 function hideValidationError() {
16422 DOM.feedback
16423 .text("")
16424 .hide();
16425 }
16426
16427 function findPhraseErrors(phrase) {
16428 // TODO make this right
16429 // Preprocess the words
783981de 16430 phrase = mnemonic.normalizeString(phrase);
0515eeec 16431 var words = phraseToWordArray(phrase);
563e401a 16432 // Check each word
0515eeec
IC
16433 for (var i=0; i<words.length; i++) {
16434 var word = words[i];
16435 var language = getLanguage();
16436 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
16437 console.log("Finding closest match to " + word);
16438 var nearestWord = findNearestWord(word);
16439 return word + " not in wordlist, did you mean " + nearestWord + "?";
16440 }
16441 }
ebd8d4e8 16442 // Check the words are valid
0515eeec 16443 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
16444 var isValid = mnemonic.check(properPhrase);
16445 if (!isValid) {
16446 return "Invalid mnemonic";
16447 }
16448 return false;
16449 }
16450
efe41586
IC
16451 function validateRootKey(rootKeyBase58) {
16452 try {
16453 bitcoin.HDNode.fromBase58(rootKeyBase58);
16454 }
16455 catch (e) {
16456 return "Invalid root key";
16457 }
16458 return "";
16459 }
16460
38523d36
IC
16461 function getDerivationPath() {
16462 if (DOM.bip44tab.hasClass("active")) {
16463 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
16464 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
16465 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
16466 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
16467 var path = "m/";
16468 path += purpose + "'/";
16469 path += coin + "'/";
16470 path += account + "'/";
16471 path += change;
16472 DOM.bip44path.val(path);
16473 var derivationPath = DOM.bip44path.val();
16474 console.log("Using derivation path from BIP44 tab: " + derivationPath);
16475 return derivationPath;
16476 }
16477 else if (DOM.bip32tab.hasClass("active")) {
16478 var derivationPath = DOM.bip32path.val();
16479 console.log("Using derivation path from BIP32 tab: " + derivationPath);
16480 return derivationPath;
16481 }
16482 else {
16483 console.log("Unknown derivation path");
16484 }
16485 }
16486
ebd8d4e8 16487 function findDerivationPathErrors(path) {
30c9e79d
IC
16488 // TODO is not perfect but is better than nothing
16489 // Inspired by
16490 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
16491 // and
16492 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
16493 var maxDepth = 255; // TODO verify this!!
16494 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
16495 if (path[0] != "m") {
16496 return "First character must be 'm'";
16497 }
16498 if (path.length > 1) {
16499 if (path[1] != "/") {
16500 return "Separator must be '/'";
16501 }
16502 var indexes = path.split("/");
16503 if (indexes.length > maxDepth) {
16504 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16505 }
16506 for (var depth = 1; depth<indexes.length; depth++) {
16507 var index = indexes[depth];
16508 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
16509 if (invalidChars.length > 0) {
16510 return "Invalid characters " + invalidChars + " found at depth " + depth;
16511 }
16512 var indexValue = parseInt(index.replace("'", ""));
16513 if (isNaN(depth)) {
16514 return "Invalid number at depth " + depth;
16515 }
16516 if (indexValue > maxIndexValue) {
16517 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16518 }
16519 }
16520 }
ebd8d4e8
IC
16521 return false;
16522 }
16523
16524 function displayBip32Info() {
16525 // Display the key
73161a92 16526 DOM.seed.val(seed);
ebd8d4e8
IC
16527 var rootKey = bip32RootKey.toBase58();
16528 DOM.rootKey.val(rootKey);
16529 var extendedPrivKey = bip32ExtendedKey.toBase58();
16530 DOM.extendedPrivKey.val(extendedPrivKey);
16531 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16532 DOM.extendedPubKey.val(extendedPubKey);
16533 // Display the addresses and privkeys
16534 clearAddressesList();
16535 displayAddresses(0, 20);
16536 }
16537
16538 function displayAddresses(start, total) {
16539 for (var i=0; i<total; i++) {
80c4dd2a
IC
16540 var index = i + start;
16541 new TableRow(index);
16542 }
16543 }
16544
16545 function TableRow(index) {
16546
1975bfbc
IC
16547 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
16548
80c4dd2a
IC
16549 function init() {
16550 calculateValues();
16551 }
16552
16553 function calculateValues() {
16554 setTimeout(function() {
1975bfbc
IC
16555 var key = "";
16556 if (useHardenedAddresses) {
16557 key = bip32ExtendedKey.deriveHardened(index);
16558 }
16559 else {
16560 key = bip32ExtendedKey.derive(index);
16561 }
80c4dd2a
IC
16562 var address = key.getAddress().toString();
16563 var privkey = key.privKey.toWIF(network);
38523d36 16564 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
16565 if (useHardenedAddresses) {
16566 indexText = indexText + "'";
16567 }
38523d36 16568 addAddressToList(indexText, address, privkey);
80c4dd2a 16569 }, 50)
ebd8d4e8 16570 }
80c4dd2a
IC
16571
16572 init();
16573
ebd8d4e8
IC
16574 }
16575
16576 function showMore() {
16577 var start = DOM.addresses.children().length;
16578 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16579 if (isNaN(rowsToAdd)) {
16580 rowsToAdd = 20;
16581 DOM.rowsToAdd.val("20");
16582 }
16583 if (rowsToAdd > 200) {
16584 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
16585 msg += "Do you want to continue?";
16586 if (!confirm(msg)) {
16587 return;
16588 }
16589 }
ebd8d4e8 16590 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
16591 }
16592
16593 function clearDisplay() {
16594 clearAddressesList();
16595 clearKey();
16596 hideValidationError();
16597 }
16598
16599 function clearAddressesList() {
16600 DOM.addresses.empty();
16601 }
16602
16603 function clearKey() {
16604 DOM.rootKey.val("");
16605 DOM.extendedPrivKey.val("");
16606 DOM.extendedPubKey.val("");
16607 }
16608
38523d36 16609 function addAddressToList(indexText, address, privkey) {
ebd8d4e8 16610 var row = $(addressRowTemplate.html());
80c4dd2a
IC
16611 // Elements
16612 var indexCell = row.find(".index span");
16613 var addressCell = row.find(".address span");
16614 var privkeyCell = row.find(".privkey span");
16615 // Content
ae30fed8 16616 indexCell.text(indexText);
80c4dd2a
IC
16617 addressCell.text(address);
16618 privkeyCell.text(privkey);
16619 // Visibility
16620 if (!showIndex) {
16621 indexCell.addClass("invisible");
16622 }
16623 if (!showAddress) {
16624 addressCell.addClass("invisible");
16625 }
16626 if (!showPrivKey) {
6d628db7 16627 privkeyCell.addClass("invisible");
80c4dd2a 16628 }
ebd8d4e8
IC
16629 DOM.addresses.append(row);
16630 }
16631
16632 function hasStrongRandom() {
16633 return 'crypto' in window && window['crypto'] !== null;
16634 }
16635
16636 function disableForms() {
16637 $("form").on("submit", function(e) {
16638 e.preventDefault();
16639 });
16640 }
16641
ebd8d4e8
IC
16642 function parseIntNoNaN(val, defaultVal) {
16643 var v = parseInt(val);
16644 if (isNaN(v)) {
16645 return defaultVal;
16646 }
16647 return v;
16648 }
16649
16650 function showPending() {
16651 DOM.feedback
16652 .text("Calculating...")
16653 .show();
16654 }
16655
563e401a 16656 function findNearestWord(word) {
0515eeec
IC
16657 var language = getLanguage();
16658 var words = WORDLISTS[language];
563e401a
IC
16659 var minDistance = 99;
16660 var closestWord = words[0];
16661 for (var i=0; i<words.length; i++) {
16662 var comparedTo = words[i];
16663 var distance = Levenshtein.get(word, comparedTo);
16664 if (distance < minDistance) {
16665 closestWord = comparedTo;
16666 minDistance = distance;
16667 }
16668 }
16669 return closestWord;
16670 }
16671
ebd8d4e8
IC
16672 function hidePending() {
16673 DOM.feedback
16674 .text("")
16675 .hide();
16676 }
16677
ab78acc6
IC
16678 function populateNetworkSelect() {
16679 for (var i=0; i<networks.length; i++) {
16680 var network = networks[i];
16681 var option = $("<option>");
16682 option.attr("value", i);
16683 option.text(network.name);
16684 DOM.phraseNetwork.append(option);
16685 }
16686 }
16687
0515eeec
IC
16688 function getLanguage() {
16689 var defaultLanguage = "english";
16690 // Try to get from existing phrase
16691 var language = getLanguageFromPhrase();
16692 // Try to get from url if not from phrase
16693 if (language.length == 0) {
16694 language = getLanguageFromUrl();
16695 }
16696 // Default to English if no other option
16697 if (language.length == 0) {
16698 language = defaultLanguage;
16699 }
16700 return language;
16701 }
16702
16703 function getLanguageFromPhrase(phrase) {
16704 // Check if how many words from existing phrase match a language.
16705 var language = "";
16706 if (!phrase) {
16707 phrase = DOM.phrase.val();
16708 }
16709 if (phrase.length > 0) {
16710 var words = phraseToWordArray(phrase);
16711 var languageMatches = {};
16712 for (l in WORDLISTS) {
16713 // Track how many words match in this language
16714 languageMatches[l] = 0;
16715 for (var i=0; i<words.length; i++) {
16716 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
16717 if (wordInLanguage) {
16718 languageMatches[l]++;
16719 }
16720 }
16721 // Find languages with most word matches.
16722 // This is made difficult due to commonalities between Chinese
16723 // simplified vs traditional.
16724 var mostMatches = 0;
16725 var mostMatchedLanguages = [];
16726 for (var l in languageMatches) {
16727 var numMatches = languageMatches[l];
16728 if (numMatches > mostMatches) {
16729 mostMatches = numMatches;
16730 mostMatchedLanguages = [l];
16731 }
16732 else if (numMatches == mostMatches) {
16733 mostMatchedLanguages.push(l);
16734 }
16735 }
16736 }
16737 if (mostMatchedLanguages.length > 0) {
16738 // Use first language and warn if multiple detected
16739 language = mostMatchedLanguages[0];
16740 if (mostMatchedLanguages.length > 1) {
16741 console.warn("Multiple possible languages");
16742 console.warn(mostMatchedLanguages);
16743 }
16744 }
16745 }
16746 return language;
16747 }
16748
16749 function getLanguageFromUrl() {
16750 return window.location.hash.substring(1);
16751 }
16752
16753 function setMnemonicLanguage() {
16754 var language = getLanguage();
16755 // Load the bip39 mnemonic generator for this language if required
16756 if (!(language in mnemonics)) {
16757 mnemonics[language] = new Mnemonic(language);
16758 }
16759 mnemonic = mnemonics[language];
16760 }
16761
16762 function convertPhraseToNewLanguage() {
16763 var oldLanguage = getLanguageFromPhrase();
16764 var newLanguage = getLanguageFromUrl();
16765 var oldPhrase = DOM.phrase.val();
16766 var oldWords = phraseToWordArray(oldPhrase);
16767 var newWords = [];
16768 for (var i=0; i<oldWords.length; i++) {
16769 var oldWord = oldWords[i];
16770 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16771 var newWord = WORDLISTS[newLanguage][index];
16772 newWords.push(newWord);
16773 }
16774 newPhrase = wordArrayToPhrase(newWords);
16775 return newPhrase;
16776 }
16777
16778 // TODO look at jsbip39 - mnemonic.splitWords
16779 function phraseToWordArray(phrase) {
16780 var words = phrase.split(/\s/g);
16781 var noBlanks = [];
16782 for (var i=0; i<words.length; i++) {
16783 var word = words[i];
16784 if (word.length > 0) {
16785 noBlanks.push(word);
16786 }
16787 }
16788 return noBlanks;
16789 }
16790
16791 // TODO look at jsbip39 - mnemonic.joinWords
16792 function wordArrayToPhrase(words) {
16793 var phrase = words.join(" ");
16794 var language = getLanguageFromPhrase(phrase);
16795 if (language == "japanese") {
16796 phrase = words.join("\u3000");
16797 }
16798 return phrase;
16799 }
16800
ab78acc6
IC
16801 var networks = [
16802 {
16803 name: "Bitcoin",
16804 onSelect: function() {
16805 network = bitcoin.networks.bitcoin;
16806 DOM.bip44coin.val(0);
ab78acc6
IC
16807 },
16808 },
16809 {
16810 name: "Bitcoin Testnet",
16811 onSelect: function() {
16812 network = bitcoin.networks.testnet;
16813 DOM.bip44coin.val(1);
ab78acc6
IC
16814 },
16815 },
16816 {
16817 name: "Litecoin",
16818 onSelect: function() {
16819 network = bitcoin.networks.litecoin;
16820 DOM.bip44coin.val(2);
16821 },
16822 },
16823 {
16824 name: "Dogecoin",
16825 onSelect: function() {
16826 network = bitcoin.networks.dogecoin;
16827 DOM.bip44coin.val(3);
16828 },
16829 },
d5dc92fd
IC
16830 {
16831 name: "ShadowCash",
16832 onSelect: function() {
16833 network = bitcoin.networks.shadow;
16834 DOM.bip44coin.val(35);
16835 },
16836 },
16837 {
16838 name: "ShadowCash Testnet",
16839 onSelect: function() {
16840 network = bitcoin.networks.shadowtn;
16841 DOM.bip44coin.val(1);
16842 },
16843 },
a3baa26e
IC
16844 {
16845 name: "Viacoin",
16846 onSelect: function() {
16847 network = bitcoin.networks.viacoin;
16848 DOM.bip44coin.val(14);
16849 },
16850 },
16851 {
16852 name: "Viacoin Testnet",
16853 onSelect: function() {
16854 network = bitcoin.networks.viacointestnet;
16855 DOM.bip44coin.val(1);
16856 },
16857 },
16858 {
16859 name: "Jumbucks",
16860 onSelect: function() {
16861 network = bitcoin.networks.jumbucks;
16862 DOM.bip44coin.val(26);
16863 },
16864 },
5c434a8a
CM
16865 {
16866 name: "CLAM",
16867 onSelect: function() {
16868 network = bitcoin.networks.clam;
16869 DOM.bip44coin.val(23);
16870 },
16871 },
5493efc3 16872 {
16873 name: "DASH",
16874 onSelect: function() {
16875 network = bitcoin.networks.dash;
16876 DOM.bip44coin.val(5);
16877 },
16878 },
07ac4350 16879 {
16880 name: "Namecoin",
16881 onSelect: function() {
16882 network = bitcoin.networks.namecoin;
16883 DOM.bip44coin.val(7);
16884 },
16885 },
16886 {
16887 name: "Peercoin",
16888 onSelect: function() {
16889 network = bitcoin.networks.peercoin;
16890 DOM.bip44coin.val(6);
16891 },
16892 },
ab78acc6
IC
16893 ]
16894
ebd8d4e8
IC
16895 init();
16896
16897})();
dc55c6b0 16898</script>
ebd8d4e8
IC
16899 </body>
16900</html>