]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Tests for passphrase and coin selection
[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" />
14 <meta content="DC POS" 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 }
ab78acc6
IC
47 </style>
48 </head>
49 <body>
50 <div class="container">
3af2954a 51
ab78acc6
IC
52 <h1 class="text-center">Mnemonic Code Converter</h1>
53 <hr>
54 <div class="row">
55 <div class="col-md-12">
56 <h2>Mnemonic</h2>
57 <form class="form-horizontal" role="form">
58 <div class="col-sm-2"></div>
59 <div class="col-sm-10">
60 <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>
61 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
62 </div>
63 <div class="form-group">
64 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
65 <div class="col-sm-10">
66 <textarea id="phrase" class="phrase form-control"></textarea>
67 </div>
68 </div>
69 <div class="form-group">
70 <label for="strength" class="col-sm-2 control-label">Number of words</label>
71 <div class="col-sm-10">
72 <div class="input-group">
18531979 73 <select id="strength" class="strength form-control">
54563907
IC
74 <option value="3">3</option>
75 <option value="6">6</option>
76 <option value="9">9</option>
77 <option value="12">12</option>
78 <option value="15" selected>15</option>
79 <option value="18">18</option>
80 <option value="21">21</option>
81 <option value="24">24</option>
18531979 82 </select>
ab78acc6
IC
83 <span class="input-group-btn">
84 <button class="btn generate">Generate Random Mnemonic</button>
85 </span>
86 </div>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
91 <div class="col-sm-10">
92 <textarea id="passphrase" class="passphrase form-control"></textarea>
93 </div>
94 </div>
73161a92
IC
95 <div class="form-group">
96 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
97 <div class="col-sm-10">
98 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
99 </div>
100 </div>
ab78acc6
IC
101 <div class="form-group">
102 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
103 <div class="col-sm-10">
104 <select id="network-phrase" class="network form-control">
105 <!-- populated by javascript -->
106 </select>
107 </div>
108 </div>
109 <div class="form-group">
110 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
111 <div class="col-sm-10">
efe41586 112 <textarea id="root-key" class="root-key form-control"></textarea>
ab78acc6
IC
113 </div>
114 </div>
115 </form>
116 </div>
117 </div>
3af2954a 118
ab78acc6 119 <hr>
3af2954a 120
ab78acc6
IC
121 <div class="row">
122 <div class="col-md-12">
123 <h2>Derivation Path</h2>
124 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 125 <li id="bip44-tab" class="active">
ab78acc6
IC
126 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
127 </li>
128 <li id="bip32-tab">
129 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
130 </li>
131 </ul>
132 <div class="derivation-type tab-content">
d5dc92fd 133 <div id="bip44" class="tab-pane active">
ab78acc6
IC
134 <form class="form-horizontal" role="form">
135 <br>
136 <div class="col-sm-2"></div>
137 <div class="col-sm-10">
138 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
139 </div>
140 <div class="form-group">
141 <label for="purpose" class="col-sm-2 control-label">
142 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
143 </label>
144 <div class="col-sm-10">
145 <input id="purpose" type="text" class="purpose form-control" value="44">
146 </div>
147 </div>
148 <div class="form-group">
149 <label for="coin" class="col-sm-2 control-label">
150 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
151 </label>
152 <div class="col-sm-10">
153 <input id="coin" type="text" class="coin form-control" value="0">
154 </div>
155 </div>
156 <div class="form-group">
157 <label for="account" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="account" type="text" class="account form-control" value="0">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="change" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="change" type="text" class="change form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
176 </div>
177 </div>
178 </form>
179 </div>
180 <div id="bip32" class="tab-pane">
181 <form class="form-horizontal" role="form">
182 <br>
183 <div class="col-sm-2"></div>
184 <div class="col-sm-10">
185 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
186 </div>
187 <div class="form-group">
188 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
189 <div class="col-sm-10">
190 <input id="bip32-path" type="text" class="path form-control" value="m/0">
191 </div>
192 </div>
1975bfbc
IC
193 <div class="form-group">
194 <div class="col-sm-2"></div>
195 <label class="col-sm-10">
196 <input class="hardened-addresses" type="checkbox">
197 Use hardened addresses
198 </label>
199 </div>
d5dc92fd
IC
200 <div class="form-group">
201 <label class="col-sm-2 control-label">Hive Wallet</label>
202 <div class="col-sm-10">
203 <p class="form-control no-border">
204 Use path <code>m/0'/0</code>.
205 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
206 </p>
207 </div>
208 </div>
209 <div class="form-group">
210 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
211 <div class="col-sm-10">
212 <p class="form-control no-border">
213 Use path <code>m/44'/0'/0'/0</code>.
214 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
215 </p>
216 </div>
217 </div>
1975bfbc
IC
218 <div class="form-group">
219 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
220 <div class="col-sm-10">
221 <p class="form-control no-border">
222 Use path <code>m/0'/0'</code> with hardened addresses.
223 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
224 </p>
225 </div>
226 </div>
ab78acc6
IC
227 </form>
228 </div>
229 </div>
230 <form class="form-horizontal" role="form">
231 <div class="form-group">
232 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
233 <div class="col-sm-10">
234 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
235 </div>
236 </div>
237 <div class="form-group">
238 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
239 <div class="col-sm-10">
240 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
241 </div>
242 </div>
243 </form>
244 </div>
245 </div>
3af2954a 246
ab78acc6 247 <hr>
3af2954a 248
ab78acc6
IC
249 <div class="row">
250 <div class="col-md-12">
251 <h2>Derived Addresses</h2>
252 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
253 <table class="table table-striped">
254 <thead>
255 <th>
256 <div class="input-group">
ae30fed8 257 Path&nbsp;&nbsp;
ab78acc6
IC
258 <button class="index-toggle">Toggle</button>
259 </div>
260 </th>
261 <th>
262 <div class="input-group">
263 Address&nbsp;&nbsp;
264 <button class="address-toggle">Toggle</button>
265 </div>
266 </th>
267 <th>
268 <div class="input-group">
269 Private Key&nbsp;&nbsp;
270 <button class="private-key-toggle">Toggle</button>
271 </div>
272 </th>
273 </thead>
274 <tbody class="addresses">
275 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
276 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
277 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
278 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
279 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
280 </tbody>
281 </table>
282 </div>
283 </div>
284 <span>Show next </button>
285 <input type="number" class="rows-to-add" value="20">
286 <button class="more">Show</button>
3af2954a 287
ab78acc6 288 <hr>
3af2954a 289
ab78acc6
IC
290 <div class="row">
291 <div class="col-md-12">
292 <h2>More info</h2>
293 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
294 <p>
295 Read more at the
296 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
297 </p>
298 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
299 <p>
300 Read more at the
301 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
302 and see the demo at
303 <a href="http://bip32.org/" target="_blank">bip32.org</a>
304 </p>
305 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
306 <p>
307 Read more at the
308 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
309 </p>
310 <h3>Private Keys</h3>
311 <p>
312 Use private keys at
313 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
314 but be careful - it can be easy to make mistakes if you
315 don't know what you're doing
316 </p>
317 </div>
318 </div>
3af2954a 319
ab78acc6 320 <hr>
3af2954a 321
ab78acc6
IC
322 <div class="row">
323 <div class="col-md-12">
3af2954a 324
ab78acc6 325 <h2>Offline Usage</h2>
3af2954a 326
ab78acc6
IC
327 <p>
328 You can use this tool without having to be online.
329 </p>
330 <p>
331 In your browser, select file save-as, and save this page
332 as a file.
333 </p>
334 <p>
335 Double-click that file to open it in a browser
336 on any offline computer.
337 </p>
338 <p>
339 Alternatively, download it from
340 <a href="https://github.com/dcpos/bip39">
341 https://github.com/dcpos/bip39
342 </a>
3af2954a 343
ab78acc6
IC
344 </div>
345 </div>
3af2954a 346
ab78acc6 347 <hr>
3af2954a 348
ab78acc6
IC
349 <div class="row">
350 <div class="col-md-12">
3af2954a 351
ab78acc6 352 <h2>This project is 100% open-source code</h2>
3af2954a 353
ab78acc6
IC
354 <p>
355 <span>Get the source code at - </span>
356 <a href="https://github.com/dcpos/bip39" target="_blank">
357 https://github.com/dcpos/bip39
358 </a>
359 </p>
3af2954a 360
ab78acc6 361 <h3>Libraries</h3>
3af2954a 362
ab78acc6
IC
363 <p>
364 <span>BitcoinJS - </span>
365 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
366 https://github.com/bitcoinjs/bitcoinjs-lib
367 </a>
368 </p>
3af2954a 369
ab78acc6
IC
370 <p>
371 <span>jsBIP39 - </span>
372 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
373 https://github.com/iancoleman/jsbip39
374 </a>
375 </p>
3af2954a 376
ab78acc6
IC
377 <p>
378 <span>sjcl - </span>
379 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
380 https://github.com/bitwiseshiftleft/sjcl
381 </a>
382 </p>
3af2954a 383
ab78acc6
IC
384 <p>
385 <span>jQuery - </span>
386 <a href="https://jquery.com/" target="_blank">
387 https://jquery.com/
388 </a>
389 </p>
3af2954a 390
ab78acc6
IC
391 <p>
392 <span>Twitter Bootstrap - </span>
393 <a href="http://getbootstrap.com/" target="_blank">
394 http://getbootstrap.com/
395 </a>
396 </p>
3af2954a 397
ab78acc6
IC
398 </div>
399 </div>
3af2954a 400
ab78acc6 401 </div>
3af2954a 402
ab78acc6
IC
403 <div class="feedback-container">
404 <div class="feedback">Loading...</div>
405 </div>
3af2954a 406
ab78acc6
IC
407 <script type="text/template" id="address-row-template">
408 <tr>
409 <td class="index"><span></span></td>
410 <td class="address"><span></span></td>
411 <td class="privkey"><span></span></td>
412 </tr>
413 </script>
414 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
415!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)
416},_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))
417},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});
418</script>
419 <script>/*!
420 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
421 * Copyright 2011-2014 Twitter, Inc.
422 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
423 */
424if("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
425 <script>(function() {
426 'use strict';
427
428 /**
429 * Extend an Object with another Object's properties.
430 *
431 * The source objects are specified as additional arguments.
432 *
433 * @param dst Object the object to extend.
434 *
435 * @return Object the final object.
436 */
437 var _extend = function(dst) {
438 var sources = Array.prototype.slice.call(arguments, 1);
439 for (var i=0; i<sources.length; ++i) {
440 var src = sources[i];
441 for (var p in src) {
442 if (src.hasOwnProperty(p)) dst[p] = src[p];
443 }
444 }
445 return dst;
446 };
447
448
449 /**
450 * Defer execution of given function.
451 * @param {Function} func
452 */
453 var _defer = function(func) {
454 if (typeof setImmediate === 'function') {
455 return setImmediate(func);
456 } else {
457 return setTimeout(func, 0);
458 }
459 };
460
461 /**
462 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
463 */
464 var Levenshtein = {
465 /**
466 * Calculate levenshtein distance of the two strings.
467 *
468 * @param str1 String the first string.
469 * @param str2 String the second string.
470 * @return Integer the levenshtein distance (0 and above).
471 */
472 get: function(str1, str2) {
473 // base cases
474 if (str1 === str2) return 0;
475 if (str1.length === 0) return str2.length;
476 if (str2.length === 0) return str1.length;
477
478 // two rows
479 var prevRow = new Array(str2.length + 1),
480 curCol, nextCol, i, j, tmp;
481
482 // initialise previous row
483 for (i=0; i<prevRow.length; ++i) {
484 prevRow[i] = i;
485 }
486
487 // calculate current row distance from previous row
488 for (i=0; i<str1.length; ++i) {
489 nextCol = i + 1;
490
491 for (j=0; j<str2.length; ++j) {
492 curCol = nextCol;
493
494 // substution
495 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
496 // insertion
497 tmp = curCol + 1;
498 if (nextCol > tmp) {
499 nextCol = tmp;
500 }
501 // deletion
502 tmp = prevRow[j + 1] + 1;
503 if (nextCol > tmp) {
504 nextCol = tmp;
505 }
506
507 // copy current col value into previous (in preparation for next iteration)
508 prevRow[j] = curCol;
509 }
510
511 // copy last col value into previous (in preparation for next iteration)
512 prevRow[j] = nextCol;
513 }
514
515 return nextCol;
516 },
517
518 /**
519 * Asynchronously calculate levenshtein distance of the two strings.
520 *
521 * @param str1 String the first string.
522 * @param str2 String the second string.
523 * @param cb Function callback function with signature: function(Error err, int distance)
524 * @param [options] Object additional options.
525 * @param [options.progress] Function progress callback with signature: function(percentComplete)
526 */
527 getAsync: function(str1, str2, cb, options) {
528 options = _extend({}, {
529 progress: null
530 }, options);
531
532 // base cases
533 if (str1 === str2) return cb(null, 0);
534 if (str1.length === 0) return cb(null, str2.length);
535 if (str2.length === 0) return cb(null, str1.length);
536
537 // two rows
538 var prevRow = new Array(str2.length + 1),
539 curCol, nextCol,
540 i, j, tmp,
541 startTime, currentTime;
542
543 // initialise previous row
544 for (i=0; i<prevRow.length; ++i) {
545 prevRow[i] = i;
546 }
547
548 nextCol = 1;
549 i = 0;
550 j = -1;
551
552 var __calculate = function() {
553 // reset timer
554 startTime = new Date().valueOf();
555 currentTime = startTime;
556
557 // keep going until one second has elapsed
558 while (currentTime - startTime < 1000) {
559 // reached end of current row?
560 if (str2.length <= (++j)) {
561 // copy current into previous (in preparation for next iteration)
562 prevRow[j] = nextCol;
563
564 // if already done all chars
565 if (str1.length <= (++i)) {
566 return cb(null, nextCol);
567 }
568 // else if we have more left to do
569 else {
570 nextCol = i + 1;
571 j = 0;
572 }
573 }
574
575 // calculation
576 curCol = nextCol;
577
578 // substution
579 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
580 // insertion
581 tmp = curCol + 1;
582 if (nextCol > tmp) {
583 nextCol = tmp;
584 }
585 // deletion
586 tmp = prevRow[j + 1] + 1;
587 if (nextCol > tmp) {
588 nextCol = tmp;
589 }
590
591 // copy current into previous (in preparation for next iteration)
592 prevRow[j] = curCol;
593
594 // get current time
595 currentTime = new Date().valueOf();
596 }
597
598 // send a progress update?
599 if (null !== options.progress) {
600 try {
601 options.progress.call(null, (i * 100.0/ str1.length));
602 } catch (err) {
603 return cb('Progress callback: ' + err.toString());
604 }
605 }
606
607 // next iteration
608 _defer(__calculate);
609 };
610
611 __calculate();
612 }
613
614 };
615
616 // amd
617 if (typeof define !== "undefined" && define !== null && define.amd) {
618 define(function() {
619 return Levenshtein;
620 });
621 }
622 // commonjs
623 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
624 module.exports = Levenshtein;
625 }
626 // web worker
627 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
628 self.Levenshtein = Levenshtein;
629 }
630 // browser main thread
631 else if (typeof window !== "undefined" && window !== null) {
632 window.Levenshtein = Levenshtein;
633 }
634}());
635
636</script>
ab78acc6
IC
637 <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){
638// (public) Constructor
639function BigInteger(a, b, c) {
640 if (!(this instanceof BigInteger))
641 return new BigInteger(a, b, c)
3af2954a 642
ab78acc6
IC
643 if (a != null) {
644 if ("number" == typeof a) this.fromNumber(a, b, c)
645 else if (b == null && "string" != typeof a) this.fromString(a, 256)
646 else this.fromString(a, b)
647 }
648}
3af2954a 649
ab78acc6 650var proto = BigInteger.prototype
3af2954a 651
ab78acc6
IC
652// duck-typed isBigInteger
653proto.__bigi = require('../package.json').version
654BigInteger.isBigInteger = function (obj, check_ver) {
655 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
656}
3af2954a 657
ab78acc6
IC
658// Bits per digit
659var dbits
3af2954a 660
ab78acc6
IC
661// am: Compute w_j += (x*this_i), propagate carries,
662// c is initial carry, returns final carry.
663// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
664// We need to select the fastest one that works in this environment.
3af2954a 665
ab78acc6
IC
666// am1: use a single mult and divide to get the high bits,
667// max digit bits should be 26 because
668// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
669function am1(i, x, w, j, c, n) {
670 while (--n >= 0) {
671 var v = x * this[i++] + w[j] + c
672 c = Math.floor(v / 0x4000000)
673 w[j++] = v & 0x3ffffff
3af2954a 674 }
ab78acc6
IC
675 return c
676}
677// am2 avoids a big mult-and-extract completely.
678// Max digit bits should be <= 30 because we do bitwise ops
679// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
680function am2(i, x, w, j, c, n) {
681 var xl = x & 0x7fff,
682 xh = x >> 15
683 while (--n >= 0) {
684 var l = this[i] & 0x7fff
685 var h = this[i++] >> 15
686 var m = xh * l + h * xl
687 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
688 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
689 w[j++] = l & 0x3fffffff
690 }
691 return c
692}
693// Alternately, set max digit bits to 28 since some
694// browsers slow down when dealing with 32-bit numbers.
695function am3(i, x, w, j, c, n) {
696 var xl = x & 0x3fff,
697 xh = x >> 14
698 while (--n >= 0) {
699 var l = this[i] & 0x3fff
700 var h = this[i++] >> 14
701 var m = xh * l + h * xl
702 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
703 c = (l >> 28) + (m >> 14) + xh * h
704 w[j++] = l & 0xfffffff
3af2954a 705 }
ab78acc6
IC
706 return c
707}
3af2954a 708
ab78acc6
IC
709// wtf?
710BigInteger.prototype.am = am1
711dbits = 26
3af2954a 712
ab78acc6
IC
713BigInteger.prototype.DB = dbits
714BigInteger.prototype.DM = ((1 << dbits) - 1)
715var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 716
ab78acc6
IC
717var BI_FP = 52
718BigInteger.prototype.FV = Math.pow(2, BI_FP)
719BigInteger.prototype.F1 = BI_FP - dbits
720BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 721
ab78acc6
IC
722// Digit conversions
723var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
724var BI_RC = new Array()
725var rr, vv
726rr = "0".charCodeAt(0)
727for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
728rr = "a".charCodeAt(0)
729for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
730rr = "A".charCodeAt(0)
731for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 732
ab78acc6
IC
733function int2char(n) {
734 return BI_RM.charAt(n)
735}
3af2954a 736
ab78acc6
IC
737function intAt(s, i) {
738 var c = BI_RC[s.charCodeAt(i)]
739 return (c == null) ? -1 : c
740}
3af2954a 741
ab78acc6
IC
742// (protected) copy this to r
743function bnpCopyTo(r) {
744 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
745 r.t = this.t
746 r.s = this.s
747}
3af2954a 748
ab78acc6
IC
749// (protected) set from integer value x, -DV <= x < DV
750function bnpFromInt(x) {
751 this.t = 1
752 this.s = (x < 0) ? -1 : 0
753 if (x > 0) this[0] = x
754 else if (x < -1) this[0] = x + DV
755 else this.t = 0
756}
3af2954a 757
ab78acc6
IC
758// return bigint initialized to value
759function nbv(i) {
760 var r = new BigInteger()
761 r.fromInt(i)
762 return r
763}
3af2954a 764
ab78acc6
IC
765// (protected) set from string and radix
766function bnpFromString(s, b) {
767 var self = this
3af2954a 768
ab78acc6
IC
769 var k
770 if (b == 16) k = 4
771 else if (b == 8) k = 3
772 else if (b == 256) k = 8; // byte array
773 else if (b == 2) k = 1
774 else if (b == 32) k = 5
775 else if (b == 4) k = 2
776 else {
777 self.fromRadix(s, b)
778 return
779 }
780 self.t = 0
781 self.s = 0
782 var i = s.length,
783 mi = false,
784 sh = 0
785 while (--i >= 0) {
786 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
787 if (x < 0) {
788 if (s.charAt(i) == "-") mi = true
789 continue
790 }
791 mi = false
792 if (sh == 0)
793 self[self.t++] = x
794 else if (sh + k > self.DB) {
795 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
796 self[self.t++] = (x >> (self.DB - sh))
797 } else
798 self[self.t - 1] |= x << sh
799 sh += k
800 if (sh >= self.DB) sh -= self.DB
801 }
802 if (k == 8 && (s[0] & 0x80) != 0) {
803 self.s = -1
804 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
805 }
806 self.clamp()
807 if (mi) BigInteger.ZERO.subTo(self, self)
808}
3af2954a 809
ab78acc6
IC
810// (protected) clamp off excess high words
811function bnpClamp() {
812 var c = this.s & this.DM
813 while (this.t > 0 && this[this.t - 1] == c)--this.t
814}
3af2954a 815
ab78acc6
IC
816// (public) return string representation in given radix
817function bnToString(b) {
818 var self = this
819 if (self.s < 0) return "-" + self.negate()
820 .toString(b)
821 var k
822 if (b == 16) k = 4
823 else if (b == 8) k = 3
824 else if (b == 2) k = 1
825 else if (b == 32) k = 5
826 else if (b == 4) k = 2
827 else return self.toRadix(b)
828 var km = (1 << k) - 1,
829 d, m = false,
830 r = "",
831 i = self.t
832 var p = self.DB - (i * self.DB) % k
833 if (i-- > 0) {
834 if (p < self.DB && (d = self[i] >> p) > 0) {
835 m = true
836 r = int2char(d)
837 }
838 while (i >= 0) {
839 if (p < k) {
840 d = (self[i] & ((1 << p) - 1)) << (k - p)
841 d |= self[--i] >> (p += self.DB - k)
842 } else {
843 d = (self[i] >> (p -= k)) & km
844 if (p <= 0) {
845 p += self.DB
846 --i
847 }
848 }
849 if (d > 0) m = true
850 if (m) r += int2char(d)
3af2954a 851 }
3af2954a 852 }
ab78acc6
IC
853 return m ? r : "0"
854}
3af2954a 855
ab78acc6
IC
856// (public) -this
857function bnNegate() {
858 var r = new BigInteger()
859 BigInteger.ZERO.subTo(this, r)
860 return r
861}
3af2954a 862
ab78acc6
IC
863// (public) |this|
864function bnAbs() {
865 return (this.s < 0) ? this.negate() : this
866}
3af2954a 867
ab78acc6
IC
868// (public) return + if this > a, - if this < a, 0 if equal
869function bnCompareTo(a) {
870 var r = this.s - a.s
871 if (r != 0) return r
872 var i = this.t
873 r = i - a.t
874 if (r != 0) return (this.s < 0) ? -r : r
875 while (--i >= 0)
876 if ((r = this[i] - a[i]) != 0) return r
877 return 0
878}
3af2954a 879
ab78acc6
IC
880// returns bit length of the integer x
881function nbits(x) {
882 var r = 1,
883 t
884 if ((t = x >>> 16) != 0) {
885 x = t
886 r += 16
887 }
888 if ((t = x >> 8) != 0) {
889 x = t
890 r += 8
891 }
892 if ((t = x >> 4) != 0) {
893 x = t
894 r += 4
895 }
896 if ((t = x >> 2) != 0) {
897 x = t
898 r += 2
3af2954a 899 }
ab78acc6
IC
900 if ((t = x >> 1) != 0) {
901 x = t
902 r += 1
903 }
904 return r
905}
906
907// (public) return the number of bits in "this"
908function bnBitLength() {
909 if (this.t <= 0) return 0
910 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
911}
3af2954a 912
ab78acc6
IC
913// (public) return the number of bytes in "this"
914function bnByteLength() {
915 return this.bitLength() >> 3
916}
3af2954a 917
ab78acc6
IC
918// (protected) r = this << n*DB
919function bnpDLShiftTo(n, r) {
920 var i
921 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
922 for (i = n - 1; i >= 0; --i) r[i] = 0
923 r.t = this.t + n
924 r.s = this.s
925}
3af2954a 926
ab78acc6
IC
927// (protected) r = this >> n*DB
928function bnpDRShiftTo(n, r) {
929 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
930 r.t = Math.max(this.t - n, 0)
931 r.s = this.s
932}
3af2954a 933
ab78acc6
IC
934// (protected) r = this << n
935function bnpLShiftTo(n, r) {
936 var self = this
937 var bs = n % self.DB
938 var cbs = self.DB - bs
939 var bm = (1 << cbs) - 1
940 var ds = Math.floor(n / self.DB),
941 c = (self.s << bs) & self.DM,
942 i
943 for (i = self.t - 1; i >= 0; --i) {
944 r[i + ds + 1] = (self[i] >> cbs) | c
945 c = (self[i] & bm) << bs
946 }
947 for (i = ds - 1; i >= 0; --i) r[i] = 0
948 r[ds] = c
949 r.t = self.t + ds + 1
950 r.s = self.s
951 r.clamp()
952}
3af2954a 953
ab78acc6
IC
954// (protected) r = this >> n
955function bnpRShiftTo(n, r) {
956 var self = this
957 r.s = self.s
958 var ds = Math.floor(n / self.DB)
959 if (ds >= self.t) {
960 r.t = 0
961 return
3af2954a 962 }
ab78acc6
IC
963 var bs = n % self.DB
964 var cbs = self.DB - bs
965 var bm = (1 << bs) - 1
966 r[0] = self[ds] >> bs
967 for (var i = ds + 1; i < self.t; ++i) {
968 r[i - ds - 1] |= (self[i] & bm) << cbs
969 r[i - ds] = self[i] >> bs
970 }
971 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
972 r.t = self.t - ds
973 r.clamp()
974}
3af2954a 975
ab78acc6
IC
976// (protected) r = this - a
977function bnpSubTo(a, r) {
978 var self = this
979 var i = 0,
980 c = 0,
981 m = Math.min(a.t, self.t)
982 while (i < m) {
983 c += self[i] - a[i]
984 r[i++] = c & self.DM
985 c >>= self.DB
986 }
987 if (a.t < self.t) {
988 c -= a.s
989 while (i < self.t) {
990 c += self[i]
991 r[i++] = c & self.DM
992 c >>= self.DB
993 }
994 c += self.s
995 } else {
996 c += self.s
997 while (i < a.t) {
998 c -= a[i]
999 r[i++] = c & self.DM
1000 c >>= self.DB
1001 }
1002 c -= a.s
1003 }
1004 r.s = (c < 0) ? -1 : 0
1005 if (c < -1) r[i++] = self.DV + c
1006 else if (c > 0) r[i++] = c
1007 r.t = i
1008 r.clamp()
1009}
3af2954a 1010
ab78acc6
IC
1011// (protected) r = this * a, r != this,a (HAC 14.12)
1012// "this" should be the larger one if appropriate.
1013function bnpMultiplyTo(a, r) {
1014 var x = this.abs(),
1015 y = a.abs()
1016 var i = x.t
1017 r.t = i + y.t
1018 while (--i >= 0) r[i] = 0
1019 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1020 r.s = 0
1021 r.clamp()
1022 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1023}
3af2954a 1024
ab78acc6
IC
1025// (protected) r = this^2, r != this (HAC 14.16)
1026function bnpSquareTo(r) {
1027 var x = this.abs()
1028 var i = r.t = 2 * x.t
1029 while (--i >= 0) r[i] = 0
1030 for (i = 0; i < x.t - 1; ++i) {
1031 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1032 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1033 r[i + x.t] -= x.DV
1034 r[i + x.t + 1] = 1
1035 }
1036 }
1037 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1038 r.s = 0
1039 r.clamp()
1040}
3af2954a 1041
ab78acc6
IC
1042// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1043// r != q, this != m. q or r may be null.
1044function bnpDivRemTo(m, q, r) {
1045 var self = this
1046 var pm = m.abs()
1047 if (pm.t <= 0) return
1048 var pt = self.abs()
1049 if (pt.t < pm.t) {
1050 if (q != null) q.fromInt(0)
1051 if (r != null) self.copyTo(r)
1052 return
1053 }
1054 if (r == null) r = new BigInteger()
1055 var y = new BigInteger(),
1056 ts = self.s,
1057 ms = m.s
1058 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1059 if (nsh > 0) {
1060 pm.lShiftTo(nsh, y)
1061 pt.lShiftTo(nsh, r)
1062 } else {
1063 pm.copyTo(y)
1064 pt.copyTo(r)
1065 }
1066 var ys = y.t
1067 var y0 = y[ys - 1]
1068 if (y0 == 0) return
1069 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1070 var d1 = self.FV / yt,
1071 d2 = (1 << self.F1) / yt,
1072 e = 1 << self.F2
1073 var i = r.t,
1074 j = i - ys,
1075 t = (q == null) ? new BigInteger() : q
1076 y.dlShiftTo(j, t)
1077 if (r.compareTo(t) >= 0) {
1078 r[r.t++] = 1
1079 r.subTo(t, r)
1080 }
1081 BigInteger.ONE.dlShiftTo(ys, t)
1082 t.subTo(y, y); // "negative" y so we can replace sub with am later
1083 while (y.t < ys) y[y.t++] = 0
1084 while (--j >= 0) {
1085 // Estimate quotient digit
1086 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1087 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1088 y.dlShiftTo(j, t)
1089 r.subTo(t, r)
1090 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1091 }
ab78acc6
IC
1092 }
1093 if (q != null) {
1094 r.drShiftTo(ys, q)
1095 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1096 }
1097 r.t = ys
1098 r.clamp()
1099 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1100 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1101}
3af2954a 1102
ab78acc6
IC
1103// (public) this mod a
1104function bnMod(a) {
1105 var r = new BigInteger()
1106 this.abs()
1107 .divRemTo(a, null, r)
1108 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1109 return r
1110}
3af2954a 1111
ab78acc6
IC
1112// Modular reduction using "classic" algorithm
1113function Classic(m) {
1114 this.m = m
1115}
3af2954a 1116
ab78acc6
IC
1117function cConvert(x) {
1118 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1119 else return x
1120}
1121
1122function cRevert(x) {
1123 return x
1124}
3af2954a 1125
ab78acc6
IC
1126function cReduce(x) {
1127 x.divRemTo(this.m, null, x)
1128}
3af2954a 1129
ab78acc6
IC
1130function cMulTo(x, y, r) {
1131 x.multiplyTo(y, r)
1132 this.reduce(r)
1133}
3af2954a 1134
ab78acc6
IC
1135function cSqrTo(x, r) {
1136 x.squareTo(r)
1137 this.reduce(r)
1138}
3af2954a 1139
ab78acc6
IC
1140Classic.prototype.convert = cConvert
1141Classic.prototype.revert = cRevert
1142Classic.prototype.reduce = cReduce
1143Classic.prototype.mulTo = cMulTo
1144Classic.prototype.sqrTo = cSqrTo
3af2954a 1145
ab78acc6
IC
1146// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1147// justification:
1148// xy == 1 (mod m)
1149// xy = 1+km
1150// xy(2-xy) = (1+km)(1-km)
1151// x[y(2-xy)] = 1-k^2m^2
1152// x[y(2-xy)] == 1 (mod m^2)
1153// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1154// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1155// JS multiply "overflows" differently from C/C++, so care is needed here.
1156function bnpInvDigit() {
1157 if (this.t < 1) return 0
1158 var x = this[0]
1159 if ((x & 1) == 0) return 0
1160 var y = x & 3; // y == 1/x mod 2^2
1161 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1162 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1163 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1164 // last step - calculate inverse mod DV directly
1165 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1166 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1167 // we really want the negative inverse, and -DV < y < DV
1168 return (y > 0) ? this.DV - y : -y
1169}
3af2954a 1170
ab78acc6
IC
1171// Montgomery reduction
1172function Montgomery(m) {
1173 this.m = m
1174 this.mp = m.invDigit()
1175 this.mpl = this.mp & 0x7fff
1176 this.mph = this.mp >> 15
1177 this.um = (1 << (m.DB - 15)) - 1
1178 this.mt2 = 2 * m.t
1179}
3af2954a 1180
ab78acc6
IC
1181// xR mod m
1182function montConvert(x) {
1183 var r = new BigInteger()
1184 x.abs()
1185 .dlShiftTo(this.m.t, r)
1186 r.divRemTo(this.m, null, r)
1187 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1188 return r
1189}
3af2954a 1190
ab78acc6
IC
1191// x/R mod m
1192function montRevert(x) {
1193 var r = new BigInteger()
1194 x.copyTo(r)
1195 this.reduce(r)
1196 return r
1197}
3af2954a 1198
ab78acc6
IC
1199// x = x/R mod m (HAC 14.32)
1200function montReduce(x) {
1201 while (x.t <= this.mt2) // pad x so am has enough room later
1202 x[x.t++] = 0
1203 for (var i = 0; i < this.m.t; ++i) {
1204 // faster way of calculating u0 = x[i]*mp mod DV
1205 var j = x[i] & 0x7fff
1206 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1207 // use am to combine the multiply-shift-add into one call
1208 j = i + this.m.t
1209 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1210 // propagate carry
1211 while (x[j] >= x.DV) {
1212 x[j] -= x.DV
1213 x[++j]++
1214 }
1215 }
1216 x.clamp()
1217 x.drShiftTo(this.m.t, x)
1218 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1219}
3af2954a 1220
ab78acc6
IC
1221// r = "x^2/R mod m"; x != r
1222function montSqrTo(x, r) {
1223 x.squareTo(r)
1224 this.reduce(r)
1225}
3af2954a 1226
ab78acc6
IC
1227// r = "xy/R mod m"; x,y != r
1228function montMulTo(x, y, r) {
1229 x.multiplyTo(y, r)
1230 this.reduce(r)
1231}
3af2954a 1232
ab78acc6
IC
1233Montgomery.prototype.convert = montConvert
1234Montgomery.prototype.revert = montRevert
1235Montgomery.prototype.reduce = montReduce
1236Montgomery.prototype.mulTo = montMulTo
1237Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1238
ab78acc6
IC
1239// (protected) true iff this is even
1240function bnpIsEven() {
1241 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1242}
3af2954a 1243
ab78acc6
IC
1244// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1245function bnpExp(e, z) {
1246 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1247 var r = new BigInteger(),
1248 r2 = new BigInteger(),
1249 g = z.convert(this),
1250 i = nbits(e) - 1
1251 g.copyTo(r)
1252 while (--i >= 0) {
1253 z.sqrTo(r, r2)
1254 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1255 else {
1256 var t = r
1257 r = r2
1258 r2 = t
3af2954a 1259 }
3af2954a 1260 }
ab78acc6
IC
1261 return z.revert(r)
1262}
3af2954a 1263
ab78acc6
IC
1264// (public) this^e % m, 0 <= e < 2^32
1265function bnModPowInt(e, m) {
1266 var z
1267 if (e < 256 || m.isEven()) z = new Classic(m)
1268 else z = new Montgomery(m)
1269 return this.exp(e, z)
1270}
3af2954a 1271
ab78acc6
IC
1272// protected
1273proto.copyTo = bnpCopyTo
1274proto.fromInt = bnpFromInt
1275proto.fromString = bnpFromString
1276proto.clamp = bnpClamp
1277proto.dlShiftTo = bnpDLShiftTo
1278proto.drShiftTo = bnpDRShiftTo
1279proto.lShiftTo = bnpLShiftTo
1280proto.rShiftTo = bnpRShiftTo
1281proto.subTo = bnpSubTo
1282proto.multiplyTo = bnpMultiplyTo
1283proto.squareTo = bnpSquareTo
1284proto.divRemTo = bnpDivRemTo
1285proto.invDigit = bnpInvDigit
1286proto.isEven = bnpIsEven
1287proto.exp = bnpExp
3af2954a 1288
ab78acc6
IC
1289// public
1290proto.toString = bnToString
1291proto.negate = bnNegate
1292proto.abs = bnAbs
1293proto.compareTo = bnCompareTo
1294proto.bitLength = bnBitLength
1295proto.byteLength = bnByteLength
1296proto.mod = bnMod
1297proto.modPowInt = bnModPowInt
3af2954a 1298
ab78acc6
IC
1299// (public)
1300function bnClone() {
1301 var r = new BigInteger()
1302 this.copyTo(r)
1303 return r
1304}
3af2954a 1305
ab78acc6
IC
1306// (public) return value as integer
1307function bnIntValue() {
1308 if (this.s < 0) {
1309 if (this.t == 1) return this[0] - this.DV
1310 else if (this.t == 0) return -1
1311 } else if (this.t == 1) return this[0]
1312 else if (this.t == 0) return 0
1313 // assumes 16 < DB < 32
1314 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1315}
3af2954a 1316
ab78acc6
IC
1317// (public) return value as byte
1318function bnByteValue() {
1319 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1320}
3af2954a 1321
ab78acc6
IC
1322// (public) return value as short (assumes DB>=16)
1323function bnShortValue() {
1324 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1325}
3af2954a 1326
ab78acc6
IC
1327// (protected) return x s.t. r^x < DV
1328function bnpChunkSize(r) {
1329 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1330}
3af2954a 1331
ab78acc6
IC
1332// (public) 0 if this == 0, 1 if this > 0
1333function bnSigNum() {
1334 if (this.s < 0) return -1
1335 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1336 else return 1
1337}
3af2954a 1338
ab78acc6
IC
1339// (protected) convert to radix string
1340function bnpToRadix(b) {
1341 if (b == null) b = 10
1342 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1343 var cs = this.chunkSize(b)
1344 var a = Math.pow(b, cs)
1345 var d = nbv(a),
1346 y = new BigInteger(),
1347 z = new BigInteger(),
1348 r = ""
1349 this.divRemTo(d, y, z)
1350 while (y.signum() > 0) {
1351 r = (a + z.intValue())
1352 .toString(b)
1353 .substr(1) + r
1354 y.divRemTo(d, y, z)
1355 }
1356 return z.intValue()
1357 .toString(b) + r
1358}
3af2954a 1359
ab78acc6
IC
1360// (protected) convert from radix string
1361function bnpFromRadix(s, b) {
1362 var self = this
1363 self.fromInt(0)
1364 if (b == null) b = 10
1365 var cs = self.chunkSize(b)
1366 var d = Math.pow(b, cs),
1367 mi = false,
1368 j = 0,
1369 w = 0
1370 for (var i = 0; i < s.length; ++i) {
1371 var x = intAt(s, i)
1372 if (x < 0) {
1373 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1374 continue
1375 }
1376 w = b * w + x
1377 if (++j >= cs) {
1378 self.dMultiply(d)
1379 self.dAddOffset(w, 0)
1380 j = 0
1381 w = 0
1382 }
1383 }
1384 if (j > 0) {
1385 self.dMultiply(Math.pow(b, j))
1386 self.dAddOffset(w, 0)
1387 }
1388 if (mi) BigInteger.ZERO.subTo(self, self)
1389}
3af2954a 1390
ab78acc6
IC
1391// (protected) alternate constructor
1392function bnpFromNumber(a, b, c) {
1393 var self = this
1394 if ("number" == typeof b) {
1395 // new BigInteger(int,int,RNG)
1396 if (a < 2) self.fromInt(1)
1397 else {
1398 self.fromNumber(a, c)
1399 if (!self.testBit(a - 1)) // force MSB set
1400 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1401 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1402 while (!self.isProbablePrime(b)) {
1403 self.dAddOffset(2, 0)
1404 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1405 }
1406 }
1407 } else {
1408 // new BigInteger(int,RNG)
1409 var x = new Array(),
1410 t = a & 7
1411 x.length = (a >> 3) + 1
1412 b.nextBytes(x)
1413 if (t > 0) x[0] &= ((1 << t) - 1)
1414 else x[0] = 0
1415 self.fromString(x, 256)
3af2954a 1416 }
ab78acc6 1417}
3af2954a 1418
ab78acc6
IC
1419// (public) convert to bigendian byte array
1420function bnToByteArray() {
1421 var self = this
1422 var i = self.t,
1423 r = new Array()
1424 r[0] = self.s
1425 var p = self.DB - (i * self.DB) % 8,
1426 d, k = 0
1427 if (i-- > 0) {
1428 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1429 r[k++] = d | (self.s << (self.DB - p))
1430 while (i >= 0) {
1431 if (p < 8) {
1432 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1433 d |= self[--i] >> (p += self.DB - 8)
1434 } else {
1435 d = (self[i] >> (p -= 8)) & 0xff
1436 if (p <= 0) {
1437 p += self.DB
1438 --i
1439 }
1440 }
1441 if ((d & 0x80) != 0) d |= -256
1442 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1443 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1444 }
3af2954a 1445 }
ab78acc6
IC
1446 return r
1447}
3af2954a 1448
ab78acc6
IC
1449function bnEquals(a) {
1450 return (this.compareTo(a) == 0)
1451}
3af2954a 1452
ab78acc6
IC
1453function bnMin(a) {
1454 return (this.compareTo(a) < 0) ? this : a
1455}
3af2954a 1456
ab78acc6
IC
1457function bnMax(a) {
1458 return (this.compareTo(a) > 0) ? this : a
1459}
3af2954a 1460
ab78acc6
IC
1461// (protected) r = this op a (bitwise)
1462function bnpBitwiseTo(a, op, r) {
1463 var self = this
1464 var i, f, m = Math.min(a.t, self.t)
1465 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1466 if (a.t < self.t) {
1467 f = a.s & self.DM
1468 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1469 r.t = self.t
1470 } else {
1471 f = self.s & self.DM
1472 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1473 r.t = a.t
3af2954a 1474 }
ab78acc6
IC
1475 r.s = op(self.s, a.s)
1476 r.clamp()
1477}
3af2954a 1478
ab78acc6
IC
1479// (public) this & a
1480function op_and(x, y) {
1481 return x & y
1482}
3af2954a 1483
ab78acc6
IC
1484function bnAnd(a) {
1485 var r = new BigInteger()
1486 this.bitwiseTo(a, op_and, r)
1487 return r
1488}
3af2954a 1489
ab78acc6
IC
1490// (public) this | a
1491function op_or(x, y) {
1492 return x | y
1493}
3af2954a 1494
ab78acc6
IC
1495function bnOr(a) {
1496 var r = new BigInteger()
1497 this.bitwiseTo(a, op_or, r)
1498 return r
1499}
3af2954a 1500
ab78acc6
IC
1501// (public) this ^ a
1502function op_xor(x, y) {
1503 return x ^ y
1504}
3af2954a 1505
ab78acc6
IC
1506function bnXor(a) {
1507 var r = new BigInteger()
1508 this.bitwiseTo(a, op_xor, r)
1509 return r
1510}
3af2954a 1511
ab78acc6
IC
1512// (public) this & ~a
1513function op_andnot(x, y) {
1514 return x & ~y
1515}
3af2954a 1516
ab78acc6
IC
1517function bnAndNot(a) {
1518 var r = new BigInteger()
1519 this.bitwiseTo(a, op_andnot, r)
1520 return r
1521}
3af2954a 1522
ab78acc6
IC
1523// (public) ~this
1524function bnNot() {
1525 var r = new BigInteger()
1526 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1527 r.t = this.t
1528 r.s = ~this.s
1529 return r
1530}
3af2954a 1531
ab78acc6
IC
1532// (public) this << n
1533function bnShiftLeft(n) {
1534 var r = new BigInteger()
1535 if (n < 0) this.rShiftTo(-n, r)
1536 else this.lShiftTo(n, r)
1537 return r
1538}
3af2954a 1539
ab78acc6
IC
1540// (public) this >> n
1541function bnShiftRight(n) {
1542 var r = new BigInteger()
1543 if (n < 0) this.lShiftTo(-n, r)
1544 else this.rShiftTo(n, r)
1545 return r
1546}
3af2954a 1547
ab78acc6
IC
1548// return index of lowest 1-bit in x, x < 2^31
1549function lbit(x) {
1550 if (x == 0) return -1
1551 var r = 0
1552 if ((x & 0xffff) == 0) {
1553 x >>= 16
1554 r += 16
3af2954a 1555 }
ab78acc6
IC
1556 if ((x & 0xff) == 0) {
1557 x >>= 8
1558 r += 8
1559 }
1560 if ((x & 0xf) == 0) {
1561 x >>= 4
1562 r += 4
1563 }
1564 if ((x & 3) == 0) {
1565 x >>= 2
1566 r += 2
1567 }
1568 if ((x & 1) == 0)++r
1569 return r
1570}
3af2954a 1571
ab78acc6
IC
1572// (public) returns index of lowest 1-bit (or -1 if none)
1573function bnGetLowestSetBit() {
1574 for (var i = 0; i < this.t; ++i)
1575 if (this[i] != 0) return i * this.DB + lbit(this[i])
1576 if (this.s < 0) return this.t * this.DB
1577 return -1
1578}
3af2954a 1579
ab78acc6
IC
1580// return number of 1 bits in x
1581function cbit(x) {
1582 var r = 0
1583 while (x != 0) {
1584 x &= x - 1
1585 ++r
3af2954a 1586 }
ab78acc6
IC
1587 return r
1588}
3af2954a 1589
ab78acc6
IC
1590// (public) return number of set bits
1591function bnBitCount() {
1592 var r = 0,
1593 x = this.s & this.DM
1594 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1595 return r
1596}
1597
1598// (public) true iff nth bit is set
1599function bnTestBit(n) {
1600 var j = Math.floor(n / this.DB)
1601 if (j >= this.t) return (this.s != 0)
1602 return ((this[j] & (1 << (n % this.DB))) != 0)
1603}
3af2954a 1604
ab78acc6
IC
1605// (protected) this op (1<<n)
1606function bnpChangeBit(n, op) {
1607 var r = BigInteger.ONE.shiftLeft(n)
1608 this.bitwiseTo(r, op, r)
1609 return r
1610}
3af2954a 1611
ab78acc6
IC
1612// (public) this | (1<<n)
1613function bnSetBit(n) {
1614 return this.changeBit(n, op_or)
1615}
3af2954a 1616
ab78acc6
IC
1617// (public) this & ~(1<<n)
1618function bnClearBit(n) {
1619 return this.changeBit(n, op_andnot)
1620}
3af2954a 1621
ab78acc6
IC
1622// (public) this ^ (1<<n)
1623function bnFlipBit(n) {
1624 return this.changeBit(n, op_xor)
1625}
3af2954a 1626
ab78acc6
IC
1627// (protected) r = this + a
1628function bnpAddTo(a, r) {
1629 var self = this
3af2954a 1630
ab78acc6
IC
1631 var i = 0,
1632 c = 0,
1633 m = Math.min(a.t, self.t)
1634 while (i < m) {
1635 c += self[i] + a[i]
1636 r[i++] = c & self.DM
1637 c >>= self.DB
1638 }
1639 if (a.t < self.t) {
1640 c += a.s
1641 while (i < self.t) {
1642 c += self[i]
1643 r[i++] = c & self.DM
1644 c >>= self.DB
1645 }
1646 c += self.s
1647 } else {
1648 c += self.s
1649 while (i < a.t) {
1650 c += a[i]
1651 r[i++] = c & self.DM
1652 c >>= self.DB
1653 }
1654 c += a.s
1655 }
1656 r.s = (c < 0) ? -1 : 0
1657 if (c > 0) r[i++] = c
1658 else if (c < -1) r[i++] = self.DV + c
1659 r.t = i
1660 r.clamp()
1661}
3af2954a 1662
ab78acc6
IC
1663// (public) this + a
1664function bnAdd(a) {
1665 var r = new BigInteger()
1666 this.addTo(a, r)
1667 return r
1668}
3af2954a 1669
ab78acc6
IC
1670// (public) this - a
1671function bnSubtract(a) {
1672 var r = new BigInteger()
1673 this.subTo(a, r)
1674 return r
1675}
3af2954a 1676
ab78acc6
IC
1677// (public) this * a
1678function bnMultiply(a) {
1679 var r = new BigInteger()
1680 this.multiplyTo(a, r)
1681 return r
1682}
3af2954a 1683
ab78acc6
IC
1684// (public) this^2
1685function bnSquare() {
1686 var r = new BigInteger()
1687 this.squareTo(r)
1688 return r
1689}
3af2954a 1690
ab78acc6
IC
1691// (public) this / a
1692function bnDivide(a) {
1693 var r = new BigInteger()
1694 this.divRemTo(a, r, null)
1695 return r
1696}
3af2954a 1697
ab78acc6
IC
1698// (public) this % a
1699function bnRemainder(a) {
1700 var r = new BigInteger()
1701 this.divRemTo(a, null, r)
1702 return r
1703}
3af2954a 1704
ab78acc6
IC
1705// (public) [this/a,this%a]
1706function bnDivideAndRemainder(a) {
1707 var q = new BigInteger(),
1708 r = new BigInteger()
1709 this.divRemTo(a, q, r)
1710 return new Array(q, r)
1711}
3af2954a 1712
ab78acc6
IC
1713// (protected) this *= n, this >= 0, 1 < n < DV
1714function bnpDMultiply(n) {
1715 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1716 ++this.t
1717 this.clamp()
1718}
3af2954a 1719
ab78acc6
IC
1720// (protected) this += n << w words, this >= 0
1721function bnpDAddOffset(n, w) {
1722 if (n == 0) return
1723 while (this.t <= w) this[this.t++] = 0
1724 this[w] += n
1725 while (this[w] >= this.DV) {
1726 this[w] -= this.DV
1727 if (++w >= this.t) this[this.t++] = 0
1728 ++this[w]
3af2954a 1729 }
ab78acc6 1730}
3af2954a 1731
ab78acc6
IC
1732// A "null" reducer
1733function NullExp() {}
3af2954a 1734
ab78acc6
IC
1735function nNop(x) {
1736 return x
1737}
3af2954a 1738
ab78acc6
IC
1739function nMulTo(x, y, r) {
1740 x.multiplyTo(y, r)
1741}
3af2954a 1742
ab78acc6
IC
1743function nSqrTo(x, r) {
1744 x.squareTo(r)
1745}
3af2954a 1746
ab78acc6
IC
1747NullExp.prototype.convert = nNop
1748NullExp.prototype.revert = nNop
1749NullExp.prototype.mulTo = nMulTo
1750NullExp.prototype.sqrTo = nSqrTo
3af2954a 1751
ab78acc6
IC
1752// (public) this^e
1753function bnPow(e) {
1754 return this.exp(e, new NullExp())
1755}
3af2954a 1756
ab78acc6
IC
1757// (protected) r = lower n words of "this * a", a.t <= n
1758// "this" should be the larger one if appropriate.
1759function bnpMultiplyLowerTo(a, n, r) {
1760 var i = Math.min(this.t + a.t, n)
1761 r.s = 0; // assumes a,this >= 0
1762 r.t = i
1763 while (i > 0) r[--i] = 0
1764 var j
1765 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1766 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1767 r.clamp()
1768}
3af2954a 1769
ab78acc6
IC
1770// (protected) r = "this * a" without lower n words, n > 0
1771// "this" should be the larger one if appropriate.
1772function bnpMultiplyUpperTo(a, n, r) {
1773 --n
1774 var i = r.t = this.t + a.t - n
1775 r.s = 0; // assumes a,this >= 0
1776 while (--i >= 0) r[i] = 0
1777 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1778 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1779 r.clamp()
1780 r.drShiftTo(1, r)
1781}
3af2954a 1782
ab78acc6
IC
1783// Barrett modular reduction
1784function Barrett(m) {
1785 // setup Barrett
1786 this.r2 = new BigInteger()
1787 this.q3 = new BigInteger()
1788 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1789 this.mu = this.r2.divide(m)
1790 this.m = m
1791}
3af2954a 1792
ab78acc6
IC
1793function barrettConvert(x) {
1794 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1795 else if (x.compareTo(this.m) < 0) return x
1796 else {
1797 var r = new BigInteger()
1798 x.copyTo(r)
1799 this.reduce(r)
1800 return r
3af2954a 1801 }
ab78acc6 1802}
3af2954a 1803
ab78acc6
IC
1804function barrettRevert(x) {
1805 return x
1806}
3af2954a 1807
ab78acc6
IC
1808// x = x mod m (HAC 14.42)
1809function barrettReduce(x) {
1810 var self = this
1811 x.drShiftTo(self.m.t - 1, self.r2)
1812 if (x.t > self.m.t + 1) {
1813 x.t = self.m.t + 1
1814 x.clamp()
3af2954a 1815 }
ab78acc6
IC
1816 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1817 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1818 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1819 x.subTo(self.r2, x)
1820 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1821}
3af2954a 1822
ab78acc6
IC
1823// r = x^2 mod m; x != r
1824function barrettSqrTo(x, r) {
1825 x.squareTo(r)
1826 this.reduce(r)
1827}
3af2954a 1828
ab78acc6
IC
1829// r = x*y mod m; x,y != r
1830function barrettMulTo(x, y, r) {
1831 x.multiplyTo(y, r)
1832 this.reduce(r)
1833}
3af2954a 1834
ab78acc6
IC
1835Barrett.prototype.convert = barrettConvert
1836Barrett.prototype.revert = barrettRevert
1837Barrett.prototype.reduce = barrettReduce
1838Barrett.prototype.mulTo = barrettMulTo
1839Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1840
ab78acc6
IC
1841// (public) this^e % m (HAC 14.85)
1842function bnModPow(e, m) {
1843 var i = e.bitLength(),
1844 k, r = nbv(1),
1845 z
1846 if (i <= 0) return r
1847 else if (i < 18) k = 1
1848 else if (i < 48) k = 3
1849 else if (i < 144) k = 4
1850 else if (i < 768) k = 5
1851 else k = 6
1852 if (i < 8)
1853 z = new Classic(m)
1854 else if (m.isEven())
1855 z = new Barrett(m)
1856 else
1857 z = new Montgomery(m)
3af2954a 1858
ab78acc6
IC
1859 // precomputation
1860 var g = new Array(),
1861 n = 3,
1862 k1 = k - 1,
1863 km = (1 << k) - 1
1864 g[1] = z.convert(this)
1865 if (k > 1) {
1866 var g2 = new BigInteger()
1867 z.sqrTo(g[1], g2)
1868 while (n <= km) {
1869 g[n] = new BigInteger()
1870 z.mulTo(g2, g[n - 2], g[n])
1871 n += 2
1872 }
1873 }
1874
1875 var j = e.t - 1,
1876 w, is1 = true,
1877 r2 = new BigInteger(),
1878 t
1879 i = nbits(e[j]) - 1
1880 while (j >= 0) {
1881 if (i >= k1) w = (e[j] >> (i - k1)) & km
1882 else {
1883 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1884 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1885 }
3af2954a 1886
ab78acc6
IC
1887 n = k
1888 while ((w & 1) == 0) {
1889 w >>= 1
1890 --n
1891 }
1892 if ((i -= n) < 0) {
1893 i += this.DB
1894 --j
1895 }
1896 if (is1) { // ret == 1, don't bother squaring or multiplying it
1897 g[w].copyTo(r)
1898 is1 = false
1899 } else {
1900 while (n > 1) {
1901 z.sqrTo(r, r2)
1902 z.sqrTo(r2, r)
1903 n -= 2
1904 }
1905 if (n > 0) z.sqrTo(r, r2)
1906 else {
1907 t = r
1908 r = r2
1909 r2 = t
1910 }
1911 z.mulTo(r2, g[w], r)
1912 }
3af2954a 1913
ab78acc6
IC
1914 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1915 z.sqrTo(r, r2)
1916 t = r
1917 r = r2
1918 r2 = t
1919 if (--i < 0) {
1920 i = this.DB - 1
1921 --j
3af2954a 1922 }
3af2954a
IC
1923 }
1924 }
ab78acc6
IC
1925 return z.revert(r)
1926}
3af2954a 1927
ab78acc6
IC
1928// (public) gcd(this,a) (HAC 14.54)
1929function bnGCD(a) {
1930 var x = (this.s < 0) ? this.negate() : this.clone()
1931 var y = (a.s < 0) ? a.negate() : a.clone()
1932 if (x.compareTo(y) < 0) {
1933 var t = x
1934 x = y
1935 y = t
1936 }
1937 var i = x.getLowestSetBit(),
1938 g = y.getLowestSetBit()
1939 if (g < 0) return x
1940 if (i < g) g = i
1941 if (g > 0) {
1942 x.rShiftTo(g, x)
1943 y.rShiftTo(g, y)
1944 }
1945 while (x.signum() > 0) {
1946 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1947 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1948 if (x.compareTo(y) >= 0) {
1949 x.subTo(y, x)
1950 x.rShiftTo(1, x)
1951 } else {
1952 y.subTo(x, y)
1953 y.rShiftTo(1, y)
1954 }
3af2954a 1955 }
ab78acc6
IC
1956 if (g > 0) y.lShiftTo(g, y)
1957 return y
1958}
3af2954a 1959
ab78acc6
IC
1960// (protected) this % n, n < 2^26
1961function bnpModInt(n) {
1962 if (n <= 0) return 0
1963 var d = this.DV % n,
1964 r = (this.s < 0) ? n - 1 : 0
1965 if (this.t > 0)
1966 if (d == 0) r = this[0] % n
1967 else
1968 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1969 return r
1970}
3af2954a 1971
ab78acc6
IC
1972// (public) 1/this % m (HAC 14.61)
1973function bnModInverse(m) {
1974 var ac = m.isEven()
1975 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1976 var u = m.clone(),
1977 v = this.clone()
1978 var a = nbv(1),
1979 b = nbv(0),
1980 c = nbv(0),
1981 d = nbv(1)
1982 while (u.signum() != 0) {
1983 while (u.isEven()) {
1984 u.rShiftTo(1, u)
1985 if (ac) {
1986 if (!a.isEven() || !b.isEven()) {
1987 a.addTo(this, a)
1988 b.subTo(m, b)
1989 }
1990 a.rShiftTo(1, a)
1991 } else if (!b.isEven()) b.subTo(m, b)
1992 b.rShiftTo(1, b)
1993 }
1994 while (v.isEven()) {
1995 v.rShiftTo(1, v)
1996 if (ac) {
1997 if (!c.isEven() || !d.isEven()) {
1998 c.addTo(this, c)
1999 d.subTo(m, d)
2000 }
2001 c.rShiftTo(1, c)
2002 } else if (!d.isEven()) d.subTo(m, d)
2003 d.rShiftTo(1, d)
2004 }
2005 if (u.compareTo(v) >= 0) {
2006 u.subTo(v, u)
2007 if (ac) a.subTo(c, a)
2008 b.subTo(d, b)
2009 } else {
2010 v.subTo(u, v)
2011 if (ac) c.subTo(a, c)
2012 d.subTo(b, d)
2013 }
2014 }
2015 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2016 if (d.compareTo(m) >= 0) return d.subtract(m)
2017 if (d.signum() < 0) d.addTo(m, d)
2018 else return d
2019 if (d.signum() < 0) return d.add(m)
2020 else return d
2021}
2022
2023var lowprimes = [
2024 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2025 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2026 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2027 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2028 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2029 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2030 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2031 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2032 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2033 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2034 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2035]
2036
2037var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2038
2039// (public) test primality with certainty >= 1-.5^t
2040function bnIsProbablePrime(t) {
2041 var i, x = this.abs()
2042 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2043 for (i = 0; i < lowprimes.length; ++i)
2044 if (x[0] == lowprimes[i]) return true
2045 return false
3af2954a 2046 }
ab78acc6
IC
2047 if (x.isEven()) return false
2048 i = 1
2049 while (i < lowprimes.length) {
2050 var m = lowprimes[i],
2051 j = i + 1
2052 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2053 m = x.modInt(m)
2054 while (i < j) if (m % lowprimes[i++] == 0) return false
2055 }
2056 return x.millerRabin(t)
2057}
2058
2059// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2060function bnpMillerRabin(t) {
2061 var n1 = this.subtract(BigInteger.ONE)
2062 var k = n1.getLowestSetBit()
2063 if (k <= 0) return false
2064 var r = n1.shiftRight(k)
2065 t = (t + 1) >> 1
2066 if (t > lowprimes.length) t = lowprimes.length
2067 var a = new BigInteger(null)
2068 var j, bases = []
2069 for (var i = 0; i < t; ++i) {
2070 for (;;) {
2071 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2072 if (bases.indexOf(j) == -1) break
2073 }
2074 bases.push(j)
2075 a.fromInt(j)
2076 var y = a.modPow(r, this)
2077 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2078 var j = 1
2079 while (j++ < k && y.compareTo(n1) != 0) {
2080 y = y.modPowInt(2, this)
2081 if (y.compareTo(BigInteger.ONE) == 0) return false
2082 }
2083 if (y.compareTo(n1) != 0) return false
2084 }
3af2954a 2085 }
ab78acc6
IC
2086 return true
2087}
3af2954a 2088
ab78acc6
IC
2089// protected
2090proto.chunkSize = bnpChunkSize
2091proto.toRadix = bnpToRadix
2092proto.fromRadix = bnpFromRadix
2093proto.fromNumber = bnpFromNumber
2094proto.bitwiseTo = bnpBitwiseTo
2095proto.changeBit = bnpChangeBit
2096proto.addTo = bnpAddTo
2097proto.dMultiply = bnpDMultiply
2098proto.dAddOffset = bnpDAddOffset
2099proto.multiplyLowerTo = bnpMultiplyLowerTo
2100proto.multiplyUpperTo = bnpMultiplyUpperTo
2101proto.modInt = bnpModInt
2102proto.millerRabin = bnpMillerRabin
3af2954a 2103
ab78acc6
IC
2104// public
2105proto.clone = bnClone
2106proto.intValue = bnIntValue
2107proto.byteValue = bnByteValue
2108proto.shortValue = bnShortValue
2109proto.signum = bnSigNum
2110proto.toByteArray = bnToByteArray
2111proto.equals = bnEquals
2112proto.min = bnMin
2113proto.max = bnMax
2114proto.and = bnAnd
2115proto.or = bnOr
2116proto.xor = bnXor
2117proto.andNot = bnAndNot
2118proto.not = bnNot
2119proto.shiftLeft = bnShiftLeft
2120proto.shiftRight = bnShiftRight
2121proto.getLowestSetBit = bnGetLowestSetBit
2122proto.bitCount = bnBitCount
2123proto.testBit = bnTestBit
2124proto.setBit = bnSetBit
2125proto.clearBit = bnClearBit
2126proto.flipBit = bnFlipBit
2127proto.add = bnAdd
2128proto.subtract = bnSubtract
2129proto.multiply = bnMultiply
2130proto.divide = bnDivide
2131proto.remainder = bnRemainder
2132proto.divideAndRemainder = bnDivideAndRemainder
2133proto.modPow = bnModPow
2134proto.modInverse = bnModInverse
2135proto.pow = bnPow
2136proto.gcd = bnGCD
2137proto.isProbablePrime = bnIsProbablePrime
3af2954a 2138
ab78acc6
IC
2139// JSBN-specific extension
2140proto.square = bnSquare
3af2954a 2141
ab78acc6
IC
2142// constants
2143BigInteger.ZERO = nbv(0)
2144BigInteger.ONE = nbv(1)
2145BigInteger.valueOf = nbv
3af2954a 2146
ab78acc6 2147module.exports = BigInteger
3af2954a 2148
ab78acc6
IC
2149},{"../package.json":4}],2:[function(require,module,exports){
2150(function (Buffer){
2151// FIXME: Kind of a weird way to throw exceptions, consider removing
2152var assert = require('assert')
2153var BigInteger = require('./bigi')
3af2954a 2154
ab78acc6
IC
2155/**
2156 * Turns a byte array into a big integer.
2157 *
2158 * This function will interpret a byte array as a big integer in big
2159 * endian notation.
2160 */
2161BigInteger.fromByteArrayUnsigned = function(byteArray) {
2162 // BigInteger expects a DER integer conformant byte array
2163 if (byteArray[0] & 0x80) {
2164 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2165 }
2166
ab78acc6
IC
2167 return new BigInteger(byteArray)
2168}
3af2954a 2169
ab78acc6
IC
2170/**
2171 * Returns a byte array representation of the big integer.
2172 *
2173 * This returns the absolute of the contained value in big endian
2174 * form. A value of zero results in an empty array.
2175 */
2176BigInteger.prototype.toByteArrayUnsigned = function() {
2177 var byteArray = this.toByteArray()
2178 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2179}
3af2954a 2180
ab78acc6
IC
2181BigInteger.fromDERInteger = function(byteArray) {
2182 return new BigInteger(byteArray)
2183}
3af2954a 2184
ab78acc6
IC
2185/*
2186 * Converts BigInteger to a DER integer representation.
2187 *
2188 * The format for this value uses the most significant bit as a sign
2189 * bit. If the most significant bit is already set and the integer is
2190 * positive, a 0x00 is prepended.
2191 *
2192 * Examples:
2193 *
2194 * 0 => 0x00
2195 * 1 => 0x01
2196 * -1 => 0xff
2197 * 127 => 0x7f
2198 * -127 => 0x81
2199 * 128 => 0x0080
2200 * -128 => 0x80
2201 * 255 => 0x00ff
2202 * -255 => 0xff01
2203 * 16300 => 0x3fac
2204 * -16300 => 0xc054
2205 * 62300 => 0x00f35c
2206 * -62300 => 0xff0ca4
2207*/
2208BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2209
ab78acc6
IC
2210BigInteger.fromBuffer = function(buffer) {
2211 // BigInteger expects a DER integer conformant byte array
2212 if (buffer[0] & 0x80) {
2213 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2214
ab78acc6 2215 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2216 }
2217
ab78acc6
IC
2218 return new BigInteger(buffer)
2219}
3af2954a 2220
ab78acc6
IC
2221BigInteger.fromHex = function(hex) {
2222 if (hex === '') return BigInteger.ZERO
3af2954a 2223
ab78acc6
IC
2224 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2225 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2226 return new BigInteger(hex, 16)
2227}
3af2954a 2228
ab78acc6
IC
2229BigInteger.prototype.toBuffer = function(size) {
2230 var byteArray = this.toByteArrayUnsigned()
2231 var zeros = []
3af2954a 2232
ab78acc6
IC
2233 var padding = size - byteArray.length
2234 while (zeros.length < padding) zeros.push(0)
3af2954a 2235
ab78acc6
IC
2236 return new Buffer(zeros.concat(byteArray))
2237}
3af2954a 2238
ab78acc6
IC
2239BigInteger.prototype.toHex = function(size) {
2240 return this.toBuffer(size).toString('hex')
2241}
3af2954a 2242
ab78acc6
IC
2243}).call(this,require("buffer").Buffer)
2244},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2245var BigInteger = require('./bigi')
3af2954a 2246
ab78acc6
IC
2247//addons
2248require('./convert')
3af2954a 2249
ab78acc6
IC
2250module.exports = BigInteger
2251},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2252module.exports={
2253 "name": "bigi",
2254 "version": "1.4.0",
2255 "description": "Big integers.",
2256 "keywords": [
2257 "cryptography",
2258 "math",
2259 "bitcoin",
2260 "arbitrary",
2261 "precision",
2262 "arithmetic",
2263 "big",
2264 "integer",
2265 "int",
2266 "number",
2267 "biginteger",
2268 "bigint",
2269 "bignumber",
2270 "decimal",
2271 "float"
2272 ],
2273 "devDependencies": {
2274 "mocha": "^1.20.1",
2275 "jshint": "^2.5.1",
2276 "coveralls": "^2.10.0",
2277 "istanbul": "^0.2.11"
2278 },
2279 "repository": {
2280 "url": "https://github.com/cryptocoinjs/bigi",
2281 "type": "git"
2282 },
2283 "main": "./lib/index.js",
2284 "scripts": {
2285 "test": "_mocha -- test/*.js",
2286 "jshint": "jshint --config jshint.json lib/*.js ; true",
2287 "unit": "mocha",
2288 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2289 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2290 },
2291 "dependencies": {},
2292 "testling": {
2293 "files": "test/*.js",
2294 "harness": "mocha",
2295 "browsers": [
2296 "ie/9..latest",
2297 "firefox/latest",
2298 "chrome/latest",
2299 "safari/6.0..latest",
2300 "iphone/6.0..latest",
2301 "android-browser/4.2..latest"
2302 ]
2303 },
2304 "bugs": {
2305 "url": "https://github.com/cryptocoinjs/bigi/issues"
2306 },
2307 "homepage": "https://github.com/cryptocoinjs/bigi",
2308 "_id": "bigi@1.4.0",
2309 "dist": {
2310 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2311 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2312 },
2313 "_from": "bigi@^1.4.0",
2314 "_npmVersion": "1.4.3",
2315 "_npmUser": {
2316 "name": "jp",
2317 "email": "jprichardson@gmail.com"
2318 },
2319 "maintainers": [
2320 {
2321 "name": "jp",
2322 "email": "jprichardson@gmail.com"
2323 },
2324 {
2325 "name": "midnightlightning",
2326 "email": "boydb@midnightdesign.ws"
2327 },
2328 {
2329 "name": "sidazhang",
2330 "email": "sidazhang89@gmail.com"
2331 },
2332 {
2333 "name": "nadav",
2334 "email": "npm@shesek.info"
3af2954a 2335 }
ab78acc6
IC
2336 ],
2337 "directories": {},
2338 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2339 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2340}
3af2954a 2341
ab78acc6
IC
2342},{}],5:[function(require,module,exports){
2343// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2344//
2345// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2346//
2347// Originally from narwhal.js (http://narwhaljs.org)
2348// Copyright (c) 2009 Thomas Robinson <280north.com>
2349//
2350// Permission is hereby granted, free of charge, to any person obtaining a copy
2351// of this software and associated documentation files (the 'Software'), to
2352// deal in the Software without restriction, including without limitation the
2353// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2354// sell copies of the Software, and to permit persons to whom the Software is
2355// furnished to do so, subject to the following conditions:
2356//
2357// The above copyright notice and this permission notice shall be included in
2358// all copies or substantial portions of the Software.
2359//
2360// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2361// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2362// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2363// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2364// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2365// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2366
ab78acc6
IC
2367// when used in node, this will actually load the util module we depend on
2368// versus loading the builtin util module as happens otherwise
2369// this is a bug in node module loading as far as I am concerned
2370var util = require('util/');
3af2954a 2371
ab78acc6
IC
2372var pSlice = Array.prototype.slice;
2373var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2374
ab78acc6
IC
2375// 1. The assert module provides functions that throw
2376// AssertionError's when particular conditions are not met. The
2377// assert module must conform to the following interface.
3af2954a 2378
ab78acc6 2379var assert = module.exports = ok;
3af2954a 2380
ab78acc6
IC
2381// 2. The AssertionError is defined in assert.
2382// new assert.AssertionError({ message: message,
2383// actual: actual,
2384// expected: expected })
3af2954a 2385
ab78acc6
IC
2386assert.AssertionError = function AssertionError(options) {
2387 this.name = 'AssertionError';
2388 this.actual = options.actual;
2389 this.expected = options.expected;
2390 this.operator = options.operator;
2391 if (options.message) {
2392 this.message = options.message;
2393 this.generatedMessage = false;
2394 } else {
2395 this.message = getMessage(this);
2396 this.generatedMessage = true;
2397 }
2398 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2399
ab78acc6
IC
2400 if (Error.captureStackTrace) {
2401 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2402 }
ab78acc6
IC
2403 else {
2404 // non v8 browsers so we can have a stacktrace
2405 var err = new Error();
2406 if (err.stack) {
2407 var out = err.stack;
3af2954a 2408
ab78acc6
IC
2409 // try to strip useless frames
2410 var fn_name = stackStartFunction.name;
2411 var idx = out.indexOf('\n' + fn_name);
2412 if (idx >= 0) {
2413 // once we have located the function frame
2414 // we need to strip out everything before it (and its line)
2415 var next_line = out.indexOf('\n', idx + 1);
2416 out = out.substring(next_line + 1);
2417 }
3af2954a 2418
ab78acc6 2419 this.stack = out;
3af2954a 2420 }
3af2954a 2421 }
ab78acc6 2422};
3af2954a 2423
ab78acc6
IC
2424// assert.AssertionError instanceof Error
2425util.inherits(assert.AssertionError, Error);
3af2954a 2426
ab78acc6
IC
2427function replacer(key, value) {
2428 if (util.isUndefined(value)) {
2429 return '' + value;
2430 }
2431 if (util.isNumber(value) && !isFinite(value)) {
2432 return value.toString();
2433 }
2434 if (util.isFunction(value) || util.isRegExp(value)) {
2435 return value.toString();
2436 }
2437 return value;
2438}
3af2954a 2439
ab78acc6
IC
2440function truncate(s, n) {
2441 if (util.isString(s)) {
2442 return s.length < n ? s : s.slice(0, n);
2443 } else {
2444 return s;
2445 }
2446}
3af2954a 2447
ab78acc6
IC
2448function getMessage(self) {
2449 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2450 self.operator + ' ' +
2451 truncate(JSON.stringify(self.expected, replacer), 128);
2452}
3af2954a 2453
ab78acc6
IC
2454// At present only the three keys mentioned above are used and
2455// understood by the spec. Implementations or sub modules can pass
2456// other keys to the AssertionError's constructor - they will be
2457// ignored.
3af2954a 2458
ab78acc6
IC
2459// 3. All of the following functions must throw an AssertionError
2460// when a corresponding condition is not met, with a message that
2461// may be undefined if not provided. All assertion methods provide
2462// both the actual and expected values to the assertion error for
2463// display purposes.
3af2954a 2464
ab78acc6
IC
2465function fail(actual, expected, message, operator, stackStartFunction) {
2466 throw new assert.AssertionError({
2467 message: message,
2468 actual: actual,
2469 expected: expected,
2470 operator: operator,
2471 stackStartFunction: stackStartFunction
2472 });
2473}
3af2954a 2474
ab78acc6
IC
2475// EXTENSION! allows for well behaved errors defined elsewhere.
2476assert.fail = fail;
ebd8d4e8 2477
ab78acc6
IC
2478// 4. Pure assertion tests whether a value is truthy, as determined
2479// by !!guard.
2480// assert.ok(guard, message_opt);
2481// This statement is equivalent to assert.equal(true, !!guard,
2482// message_opt);. To test strictly for the value true, use
2483// assert.strictEqual(true, guard, message_opt);.
3af2954a 2484
ab78acc6
IC
2485function ok(value, message) {
2486 if (!value) fail(value, true, message, '==', assert.ok);
2487}
2488assert.ok = ok;
3af2954a 2489
ab78acc6
IC
2490// 5. The equality assertion tests shallow, coercive equality with
2491// ==.
2492// assert.equal(actual, expected, message_opt);
3af2954a 2493
ab78acc6
IC
2494assert.equal = function equal(actual, expected, message) {
2495 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2496};
3af2954a 2497
ab78acc6
IC
2498// 6. The non-equality assertion tests for whether two objects are not equal
2499// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2500
ab78acc6
IC
2501assert.notEqual = function notEqual(actual, expected, message) {
2502 if (actual == expected) {
2503 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2504 }
ab78acc6 2505};
3af2954a 2506
ab78acc6
IC
2507// 7. The equivalence assertion tests a deep equality relation.
2508// assert.deepEqual(actual, expected, message_opt);
3af2954a 2509
ab78acc6
IC
2510assert.deepEqual = function deepEqual(actual, expected, message) {
2511 if (!_deepEqual(actual, expected)) {
2512 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2513 }
2514};
3af2954a 2515
ab78acc6
IC
2516function _deepEqual(actual, expected) {
2517 // 7.1. All identical values are equivalent, as determined by ===.
2518 if (actual === expected) {
2519 return true;
3af2954a 2520
ab78acc6
IC
2521 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2522 if (actual.length != expected.length) return false;
3af2954a 2523
ab78acc6
IC
2524 for (var i = 0; i < actual.length; i++) {
2525 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2526 }
2527
ab78acc6 2528 return true;
3af2954a 2529
ab78acc6
IC
2530 // 7.2. If the expected value is a Date object, the actual value is
2531 // equivalent if it is also a Date object that refers to the same time.
2532 } else if (util.isDate(actual) && util.isDate(expected)) {
2533 return actual.getTime() === expected.getTime();
3af2954a 2534
ab78acc6
IC
2535 // 7.3 If the expected value is a RegExp object, the actual value is
2536 // equivalent if it is also a RegExp object with the same source and
2537 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2538 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2539 return actual.source === expected.source &&
2540 actual.global === expected.global &&
2541 actual.multiline === expected.multiline &&
2542 actual.lastIndex === expected.lastIndex &&
2543 actual.ignoreCase === expected.ignoreCase;
3af2954a 2544
ab78acc6
IC
2545 // 7.4. Other pairs that do not both pass typeof value == 'object',
2546 // equivalence is determined by ==.
2547 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2548 return actual == expected;
3af2954a 2549
ab78acc6
IC
2550 // 7.5 For all other Object pairs, including Array objects, equivalence is
2551 // determined by having the same number of owned properties (as verified
2552 // with Object.prototype.hasOwnProperty.call), the same set of keys
2553 // (although not necessarily the same order), equivalent values for every
2554 // corresponding key, and an identical 'prototype' property. Note: this
2555 // accounts for both named and indexed properties on Arrays.
2556 } else {
2557 return objEquiv(actual, expected);
3af2954a 2558 }
ab78acc6 2559}
3af2954a 2560
ab78acc6
IC
2561function isArguments(object) {
2562 return Object.prototype.toString.call(object) == '[object Arguments]';
2563}
3af2954a 2564
ab78acc6
IC
2565function objEquiv(a, b) {
2566 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2567 return false;
2568 // an identical 'prototype' property.
2569 if (a.prototype !== b.prototype) return false;
2570 // if one is a primitive, the other must be same
2571 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2572 return a === b;
3af2954a 2573 }
ab78acc6
IC
2574 var aIsArgs = isArguments(a),
2575 bIsArgs = isArguments(b);
2576 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2577 return false;
2578 if (aIsArgs) {
2579 a = pSlice.call(a);
2580 b = pSlice.call(b);
2581 return _deepEqual(a, b);
3af2954a 2582 }
ab78acc6
IC
2583 var ka = objectKeys(a),
2584 kb = objectKeys(b),
2585 key, i;
2586 // having the same number of owned properties (keys incorporates
2587 // hasOwnProperty)
2588 if (ka.length != kb.length)
2589 return false;
2590 //the same set of keys (although not necessarily the same order),
2591 ka.sort();
2592 kb.sort();
2593 //~~~cheap key test
2594 for (i = ka.length - 1; i >= 0; i--) {
2595 if (ka[i] != kb[i])
2596 return false;
3af2954a 2597 }
ab78acc6
IC
2598 //equivalent values for every corresponding key, and
2599 //~~~possibly expensive deep test
2600 for (i = ka.length - 1; i >= 0; i--) {
2601 key = ka[i];
2602 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2603 }
ab78acc6
IC
2604 return true;
2605}
2606
2607// 8. The non-equivalence assertion tests for any deep inequality.
2608// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2609
ab78acc6
IC
2610assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2611 if (_deepEqual(actual, expected)) {
2612 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2613 }
ab78acc6 2614};
3af2954a 2615
ab78acc6
IC
2616// 9. The strict equality assertion tests strict equality, as determined by ===.
2617// assert.strictEqual(actual, expected, message_opt);
3af2954a 2618
ab78acc6
IC
2619assert.strictEqual = function strictEqual(actual, expected, message) {
2620 if (actual !== expected) {
2621 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2622 }
ab78acc6 2623};
3af2954a 2624
ab78acc6
IC
2625// 10. The strict non-equality assertion tests for strict inequality, as
2626// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2627
ab78acc6
IC
2628assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2629 if (actual === expected) {
2630 fail(actual, expected, message, '!==', assert.notStrictEqual);
2631 }
2632};
3af2954a 2633
ab78acc6
IC
2634function expectedException(actual, expected) {
2635 if (!actual || !expected) {
2636 return false;
2637 }
3af2954a 2638
ab78acc6
IC
2639 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2640 return expected.test(actual);
2641 } else if (actual instanceof expected) {
2642 return true;
2643 } else if (expected.call({}, actual) === true) {
2644 return true;
3af2954a
IC
2645 }
2646
ab78acc6
IC
2647 return false;
2648}
3af2954a 2649
ab78acc6
IC
2650function _throws(shouldThrow, block, expected, message) {
2651 var actual;
3af2954a 2652
ab78acc6
IC
2653 if (util.isString(expected)) {
2654 message = expected;
2655 expected = null;
3af2954a
IC
2656 }
2657
ab78acc6
IC
2658 try {
2659 block();
2660 } catch (e) {
2661 actual = e;
3af2954a
IC
2662 }
2663
ab78acc6
IC
2664 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2665 (message ? ' ' + message : '.');
3af2954a 2666
ab78acc6
IC
2667 if (shouldThrow && !actual) {
2668 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2669 }
2670
ab78acc6
IC
2671 if (!shouldThrow && expectedException(actual, expected)) {
2672 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2673 }
2674
ab78acc6
IC
2675 if ((shouldThrow && actual && expected &&
2676 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2677 throw actual;
3af2954a 2678 }
ab78acc6 2679}
3af2954a 2680
ab78acc6
IC
2681// 11. Expected to throw an error:
2682// assert.throws(block, Error_opt, message_opt);
3af2954a 2683
ab78acc6
IC
2684assert.throws = function(block, /*optional*/error, /*optional*/message) {
2685 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2686};
3af2954a 2687
ab78acc6
IC
2688// EXTENSION! This is annoying to write outside this module.
2689assert.doesNotThrow = function(block, /*optional*/message) {
2690 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2691};
3af2954a 2692
ab78acc6 2693assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2694
ab78acc6
IC
2695var objectKeys = Object.keys || function (obj) {
2696 var keys = [];
2697 for (var key in obj) {
2698 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2699 }
ab78acc6
IC
2700 return keys;
2701};
3af2954a 2702
ab78acc6 2703},{"util/":29}],6:[function(require,module,exports){
3af2954a 2704
ab78acc6
IC
2705},{}],7:[function(require,module,exports){
2706/*!
2707 * The buffer module from node.js, for the browser.
2708 *
2709 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2710 * @license MIT
2711 */
3af2954a 2712
ab78acc6
IC
2713var base64 = require('base64-js')
2714var ieee754 = require('ieee754')
2715var isArray = require('is-array')
3af2954a 2716
ab78acc6
IC
2717exports.Buffer = Buffer
2718exports.SlowBuffer = SlowBuffer
2719exports.INSPECT_MAX_BYTES = 50
2720Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2721
ab78acc6 2722var rootParent = {}
3af2954a 2723
ab78acc6
IC
2724/**
2725 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2726 * === true Use Uint8Array implementation (fastest)
2727 * === false Use Object implementation (most compatible, even IE6)
2728 *
2729 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2730 * Opera 11.6+, iOS 4.2+.
2731 *
2732 * Due to various browser bugs, sometimes the Object implementation will be used even
2733 * when the browser supports typed arrays.
2734 *
2735 * Note:
2736 *
2737 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2738 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2739 *
2740 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2741 * on objects.
2742 *
2743 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2744 *
2745 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2746 * incorrect length in some situations.
3af2954a 2747
ab78acc6
IC
2748 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2749 * get the Object implementation, which is slower but behaves correctly.
2750 */
2751Buffer.TYPED_ARRAY_SUPPORT = (function () {
2752 function Bar () {}
2753 try {
2754 var arr = new Uint8Array(1)
2755 arr.foo = function () { return 42 }
2756 arr.constructor = Bar
2757 return arr.foo() === 42 && // typed array instances can be augmented
2758 arr.constructor === Bar && // constructor can be set
2759 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2760 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2761 } catch (e) {
2762 return false
2763 }
2764})()
3af2954a 2765
ab78acc6
IC
2766function kMaxLength () {
2767 return Buffer.TYPED_ARRAY_SUPPORT
2768 ? 0x7fffffff
2769 : 0x3fffffff
2770}
3af2954a 2771
ab78acc6
IC
2772/**
2773 * Class: Buffer
2774 * =============
2775 *
2776 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2777 * with function properties for all the node `Buffer` API functions. We use
2778 * `Uint8Array` so that square bracket notation works as expected -- it returns
2779 * a single octet.
2780 *
2781 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2782 * prototype.
2783 */
2784function Buffer (arg) {
2785 if (!(this instanceof Buffer)) {
2786 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2787 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2788 return new Buffer(arg)
3af2954a
IC
2789 }
2790
ab78acc6
IC
2791 this.length = 0
2792 this.parent = undefined
3af2954a 2793
ab78acc6
IC
2794 // Common case.
2795 if (typeof arg === 'number') {
2796 return fromNumber(this, arg)
2797 }
3af2954a 2798
ab78acc6
IC
2799 // Slightly less common case.
2800 if (typeof arg === 'string') {
2801 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2802 }
3af2954a 2803
ab78acc6
IC
2804 // Unusual.
2805 return fromObject(this, arg)
2806}
3af2954a 2807
ab78acc6
IC
2808function fromNumber (that, length) {
2809 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2810 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2811 for (var i = 0; i < length; i++) {
2812 that[i] = 0
2813 }
3af2954a 2814 }
ab78acc6
IC
2815 return that
2816}
3af2954a 2817
ab78acc6
IC
2818function fromString (that, string, encoding) {
2819 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2820
ab78acc6
IC
2821 // Assumption: byteLength() return value is always < kMaxLength.
2822 var length = byteLength(string, encoding) | 0
2823 that = allocate(that, length)
3af2954a 2824
ab78acc6
IC
2825 that.write(string, encoding)
2826 return that
2827}
3af2954a 2828
ab78acc6
IC
2829function fromObject (that, object) {
2830 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2831
ab78acc6 2832 if (isArray(object)) return fromArray(that, object)
3af2954a 2833
ab78acc6
IC
2834 if (object == null) {
2835 throw new TypeError('must start with number, buffer, array or string')
2836 }
3af2954a 2837
ab78acc6
IC
2838 if (typeof ArrayBuffer !== 'undefined') {
2839 if (object.buffer instanceof ArrayBuffer) {
2840 return fromTypedArray(that, object)
2841 }
2842 if (object instanceof ArrayBuffer) {
2843 return fromArrayBuffer(that, object)
2844 }
3af2954a
IC
2845 }
2846
ab78acc6 2847 if (object.length) return fromArrayLike(that, object)
3af2954a 2848
ab78acc6
IC
2849 return fromJsonObject(that, object)
2850}
3af2954a 2851
ab78acc6
IC
2852function fromBuffer (that, buffer) {
2853 var length = checked(buffer.length) | 0
2854 that = allocate(that, length)
2855 buffer.copy(that, 0, 0, length)
2856 return that
2857}
3af2954a 2858
ab78acc6
IC
2859function fromArray (that, array) {
2860 var length = checked(array.length) | 0
2861 that = allocate(that, length)
2862 for (var i = 0; i < length; i += 1) {
2863 that[i] = array[i] & 255
3af2954a 2864 }
ab78acc6
IC
2865 return that
2866}
3af2954a 2867
ab78acc6
IC
2868// Duplicate of fromArray() to keep fromArray() monomorphic.
2869function fromTypedArray (that, array) {
2870 var length = checked(array.length) | 0
2871 that = allocate(that, length)
2872 // Truncating the elements is probably not what people expect from typed
2873 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2874 // of the old Buffer constructor.
2875 for (var i = 0; i < length; i += 1) {
2876 that[i] = array[i] & 255
3af2954a 2877 }
ab78acc6
IC
2878 return that
2879}
3af2954a 2880
ab78acc6
IC
2881function fromArrayBuffer (that, array) {
2882 if (Buffer.TYPED_ARRAY_SUPPORT) {
2883 // Return an augmented `Uint8Array` instance, for best performance
2884 array.byteLength
2885 that = Buffer._augment(new Uint8Array(array))
2886 } else {
2887 // Fallback: Return an object instance of the Buffer class
2888 that = fromTypedArray(that, new Uint8Array(array))
2889 }
2890 return that
2891}
3af2954a 2892
ab78acc6
IC
2893function fromArrayLike (that, array) {
2894 var length = checked(array.length) | 0
2895 that = allocate(that, length)
2896 for (var i = 0; i < length; i += 1) {
2897 that[i] = array[i] & 255
3af2954a 2898 }
ab78acc6
IC
2899 return that
2900}
3af2954a 2901
ab78acc6
IC
2902// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2903// Returns a zero-length buffer for inputs that don't conform to the spec.
2904function fromJsonObject (that, object) {
2905 var array
2906 var length = 0
2907
2908 if (object.type === 'Buffer' && isArray(object.data)) {
2909 array = object.data
2910 length = checked(array.length) | 0
3af2954a 2911 }
ab78acc6 2912 that = allocate(that, length)
3af2954a 2913
ab78acc6
IC
2914 for (var i = 0; i < length; i += 1) {
2915 that[i] = array[i] & 255
3af2954a 2916 }
ab78acc6
IC
2917 return that
2918}
3af2954a 2919
ab78acc6
IC
2920function allocate (that, length) {
2921 if (Buffer.TYPED_ARRAY_SUPPORT) {
2922 // Return an augmented `Uint8Array` instance, for best performance
2923 that = Buffer._augment(new Uint8Array(length))
2924 } else {
2925 // Fallback: Return an object instance of the Buffer class
2926 that.length = length
2927 that._isBuffer = true
2928 }
3af2954a 2929
ab78acc6
IC
2930 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2931 if (fromPool) that.parent = rootParent
3af2954a 2932
ab78acc6
IC
2933 return that
2934}
3af2954a 2935
ab78acc6
IC
2936function checked (length) {
2937 // Note: cannot use `length < kMaxLength` here because that fails when
2938 // length is NaN (which is otherwise coerced to zero.)
2939 if (length >= kMaxLength()) {
2940 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2941 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2942 }
ab78acc6
IC
2943 return length | 0
2944}
3af2954a 2945
ab78acc6
IC
2946function SlowBuffer (subject, encoding) {
2947 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2948
ab78acc6
IC
2949 var buf = new Buffer(subject, encoding)
2950 delete buf.parent
2951 return buf
2952}
3af2954a 2953
ab78acc6
IC
2954Buffer.isBuffer = function isBuffer (b) {
2955 return !!(b != null && b._isBuffer)
2956}
3af2954a 2957
ab78acc6
IC
2958Buffer.compare = function compare (a, b) {
2959 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2960 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2961 }
2962
ab78acc6 2963 if (a === b) return 0
3af2954a 2964
ab78acc6
IC
2965 var x = a.length
2966 var y = b.length
3af2954a 2967
ab78acc6
IC
2968 var i = 0
2969 var len = Math.min(x, y)
2970 while (i < len) {
2971 if (a[i] !== b[i]) break
3af2954a 2972
ab78acc6
IC
2973 ++i
2974 }
3af2954a 2975
ab78acc6
IC
2976 if (i !== len) {
2977 x = a[i]
2978 y = b[i]
2979 }
3af2954a 2980
ab78acc6
IC
2981 if (x < y) return -1
2982 if (y < x) return 1
2983 return 0
2984}
3af2954a 2985
ab78acc6
IC
2986Buffer.isEncoding = function isEncoding (encoding) {
2987 switch (String(encoding).toLowerCase()) {
2988 case 'hex':
2989 case 'utf8':
2990 case 'utf-8':
2991 case 'ascii':
2992 case 'binary':
2993 case 'base64':
2994 case 'raw':
2995 case 'ucs2':
2996 case 'ucs-2':
2997 case 'utf16le':
2998 case 'utf-16le':
2999 return true
3000 default:
3001 return false
3af2954a 3002 }
ab78acc6 3003}
3af2954a 3004
ab78acc6
IC
3005Buffer.concat = function concat (list, length) {
3006 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 3007
ab78acc6
IC
3008 if (list.length === 0) {
3009 return new Buffer(0)
3af2954a
IC
3010 }
3011
ab78acc6
IC
3012 var i
3013 if (length === undefined) {
3014 length = 0
3015 for (i = 0; i < list.length; i++) {
3016 length += list[i].length
3017 }
3af2954a
IC
3018 }
3019
ab78acc6
IC
3020 var buf = new Buffer(length)
3021 var pos = 0
3022 for (i = 0; i < list.length; i++) {
3023 var item = list[i]
3024 item.copy(buf, pos)
3025 pos += item.length
3026 }
3027 return buf
3028}
3af2954a 3029
ab78acc6
IC
3030function byteLength (string, encoding) {
3031 if (typeof string !== 'string') string = '' + string
3032
3033 var len = string.length
3034 if (len === 0) return 0
3035
3036 // Use a for loop to avoid recursion
3037 var loweredCase = false
3038 for (;;) {
3039 switch (encoding) {
3040 case 'ascii':
3041 case 'binary':
3042 // Deprecated
3043 case 'raw':
3044 case 'raws':
3045 return len
3046 case 'utf8':
3047 case 'utf-8':
3048 return utf8ToBytes(string).length
3049 case 'ucs2':
3050 case 'ucs-2':
3051 case 'utf16le':
3052 case 'utf-16le':
3053 return len * 2
3054 case 'hex':
3055 return len >>> 1
3056 case 'base64':
3057 return base64ToBytes(string).length
3058 default:
3059 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3060 encoding = ('' + encoding).toLowerCase()
3061 loweredCase = true
3af2954a 3062 }
3af2954a 3063 }
ab78acc6
IC
3064}
3065Buffer.byteLength = byteLength
3af2954a 3066
ab78acc6
IC
3067// pre-set for values that may exist in the future
3068Buffer.prototype.length = undefined
3069Buffer.prototype.parent = undefined
3af2954a 3070
ab78acc6
IC
3071function slowToString (encoding, start, end) {
3072 var loweredCase = false
3af2954a 3073
ab78acc6
IC
3074 start = start | 0
3075 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3076
ab78acc6
IC
3077 if (!encoding) encoding = 'utf8'
3078 if (start < 0) start = 0
3079 if (end > this.length) end = this.length
3080 if (end <= start) return ''
3af2954a 3081
ab78acc6
IC
3082 while (true) {
3083 switch (encoding) {
3084 case 'hex':
3085 return hexSlice(this, start, end)
3af2954a 3086
ab78acc6
IC
3087 case 'utf8':
3088 case 'utf-8':
3089 return utf8Slice(this, start, end)
3af2954a 3090
ab78acc6
IC
3091 case 'ascii':
3092 return asciiSlice(this, start, end)
3af2954a 3093
ab78acc6
IC
3094 case 'binary':
3095 return binarySlice(this, start, end)
3af2954a 3096
ab78acc6
IC
3097 case 'base64':
3098 return base64Slice(this, start, end)
3af2954a 3099
ab78acc6
IC
3100 case 'ucs2':
3101 case 'ucs-2':
3102 case 'utf16le':
3103 case 'utf-16le':
3104 return utf16leSlice(this, start, end)
3af2954a 3105
ab78acc6
IC
3106 default:
3107 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3108 encoding = (encoding + '').toLowerCase()
3109 loweredCase = true
3110 }
3af2954a 3111 }
ab78acc6 3112}
3af2954a 3113
ab78acc6
IC
3114Buffer.prototype.toString = function toString () {
3115 var length = this.length | 0
3116 if (length === 0) return ''
3117 if (arguments.length === 0) return utf8Slice(this, 0, length)
3118 return slowToString.apply(this, arguments)
3119}
3af2954a 3120
ab78acc6
IC
3121Buffer.prototype.equals = function equals (b) {
3122 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3123 if (this === b) return true
3124 return Buffer.compare(this, b) === 0
3125}
3af2954a 3126
ab78acc6
IC
3127Buffer.prototype.inspect = function inspect () {
3128 var str = ''
3129 var max = exports.INSPECT_MAX_BYTES
3130 if (this.length > 0) {
3131 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3132 if (this.length > max) str += ' ... '
3af2954a 3133 }
ab78acc6
IC
3134 return '<Buffer ' + str + '>'
3135}
3af2954a 3136
ab78acc6
IC
3137Buffer.prototype.compare = function compare (b) {
3138 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3139 if (this === b) return 0
3140 return Buffer.compare(this, b)
3141}
3af2954a 3142
ab78acc6
IC
3143Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3144 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3145 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3146 byteOffset >>= 0
3af2954a 3147
ab78acc6
IC
3148 if (this.length === 0) return -1
3149 if (byteOffset >= this.length) return -1
3af2954a 3150
ab78acc6
IC
3151 // Negative offsets start from the end of the buffer
3152 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3153
ab78acc6
IC
3154 if (typeof val === 'string') {
3155 if (val.length === 0) return -1 // special case: looking for empty string always fails
3156 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3157 }
ab78acc6
IC
3158 if (Buffer.isBuffer(val)) {
3159 return arrayIndexOf(this, val, byteOffset)
3af2954a 3160 }
ab78acc6
IC
3161 if (typeof val === 'number') {
3162 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3163 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3164 }
ab78acc6 3165 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3166 }
3167
ab78acc6
IC
3168 function arrayIndexOf (arr, val, byteOffset) {
3169 var foundIndex = -1
3170 for (var i = 0; byteOffset + i < arr.length; i++) {
3171 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3172 if (foundIndex === -1) foundIndex = i
3173 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3174 } else {
ab78acc6 3175 foundIndex = -1
3af2954a 3176 }
3af2954a 3177 }
ab78acc6
IC
3178 return -1
3179 }
3af2954a 3180
ab78acc6
IC
3181 throw new TypeError('val must be string, number or Buffer')
3182}
3af2954a 3183
ab78acc6
IC
3184// `get` is deprecated
3185Buffer.prototype.get = function get (offset) {
3186 console.log('.get() is deprecated. Access using array indexes instead.')
3187 return this.readUInt8(offset)
3188}
3af2954a 3189
ab78acc6
IC
3190// `set` is deprecated
3191Buffer.prototype.set = function set (v, offset) {
3192 console.log('.set() is deprecated. Access using array indexes instead.')
3193 return this.writeUInt8(v, offset)
3194}
3af2954a 3195
ab78acc6
IC
3196function hexWrite (buf, string, offset, length) {
3197 offset = Number(offset) || 0
3198 var remaining = buf.length - offset
3199 if (!length) {
3200 length = remaining
3201 } else {
3202 length = Number(length)
3203 if (length > remaining) {
3204 length = remaining
3205 }
3206 }
3af2954a 3207
ab78acc6
IC
3208 // must be an even number of digits
3209 var strLen = string.length
3210 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3211
ab78acc6
IC
3212 if (length > strLen / 2) {
3213 length = strLen / 2
3214 }
3215 for (var i = 0; i < length; i++) {
3216 var parsed = parseInt(string.substr(i * 2, 2), 16)
3217 if (isNaN(parsed)) throw new Error('Invalid hex string')
3218 buf[offset + i] = parsed
3af2954a 3219 }
ab78acc6
IC
3220 return i
3221}
3222
3223function utf8Write (buf, string, offset, length) {
3224 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3225}
3af2954a 3226
ab78acc6
IC
3227function asciiWrite (buf, string, offset, length) {
3228 return blitBuffer(asciiToBytes(string), buf, offset, length)
3229}
3af2954a 3230
ab78acc6
IC
3231function binaryWrite (buf, string, offset, length) {
3232 return asciiWrite(buf, string, offset, length)
3233}
3af2954a 3234
ab78acc6
IC
3235function base64Write (buf, string, offset, length) {
3236 return blitBuffer(base64ToBytes(string), buf, offset, length)
3237}
3af2954a 3238
ab78acc6
IC
3239function ucs2Write (buf, string, offset, length) {
3240 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3241}
3af2954a 3242
ab78acc6
IC
3243Buffer.prototype.write = function write (string, offset, length, encoding) {
3244 // Buffer#write(string)
3245 if (offset === undefined) {
3246 encoding = 'utf8'
3247 length = this.length
3248 offset = 0
3249 // Buffer#write(string, encoding)
3250 } else if (length === undefined && typeof offset === 'string') {
3251 encoding = offset
3252 length = this.length
3253 offset = 0
3254 // Buffer#write(string, offset[, length][, encoding])
3255 } else if (isFinite(offset)) {
3256 offset = offset | 0
3257 if (isFinite(length)) {
3258 length = length | 0
3259 if (encoding === undefined) encoding = 'utf8'
3260 } else {
3261 encoding = length
3262 length = undefined
3263 }
3264 // legacy write(string, encoding, offset, length) - remove in v0.13
3265 } else {
3266 var swap = encoding
3267 encoding = offset
3268 offset = length | 0
3269 length = swap
3af2954a
IC
3270 }
3271
ab78acc6
IC
3272 var remaining = this.length - offset
3273 if (length === undefined || length > remaining) length = remaining
3af2954a 3274
ab78acc6
IC
3275 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3276 throw new RangeError('attempt to write outside buffer bounds')
3277 }
3af2954a 3278
ab78acc6 3279 if (!encoding) encoding = 'utf8'
3af2954a 3280
ab78acc6
IC
3281 var loweredCase = false
3282 for (;;) {
3283 switch (encoding) {
3284 case 'hex':
3285 return hexWrite(this, string, offset, length)
ebd8d4e8 3286
ab78acc6
IC
3287 case 'utf8':
3288 case 'utf-8':
3289 return utf8Write(this, string, offset, length)
ebd8d4e8 3290
ab78acc6
IC
3291 case 'ascii':
3292 return asciiWrite(this, string, offset, length)
ebd8d4e8 3293
ab78acc6
IC
3294 case 'binary':
3295 return binaryWrite(this, string, offset, length)
ebd8d4e8 3296
ab78acc6
IC
3297 case 'base64':
3298 // Warning: maxLength not taken into account in base64Write
3299 return base64Write(this, string, offset, length)
ebd8d4e8 3300
ab78acc6
IC
3301 case 'ucs2':
3302 case 'ucs-2':
3303 case 'utf16le':
3304 case 'utf-16le':
3305 return ucs2Write(this, string, offset, length)
ebd8d4e8 3306
ab78acc6
IC
3307 default:
3308 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3309 encoding = ('' + encoding).toLowerCase()
3310 loweredCase = true
3311 }
3312 }
3313}
212b1b46 3314
ab78acc6
IC
3315Buffer.prototype.toJSON = function toJSON () {
3316 return {
3317 type: 'Buffer',
3318 data: Array.prototype.slice.call(this._arr || this, 0)
3319 }
3320}
212b1b46 3321
ab78acc6
IC
3322function base64Slice (buf, start, end) {
3323 if (start === 0 && end === buf.length) {
3324 return base64.fromByteArray(buf)
3325 } else {
3326 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3327 }
ab78acc6
IC
3328}
3329
3330function utf8Slice (buf, start, end) {
3331 end = Math.min(buf.length, end)
3332 var firstByte
3333 var secondByte
3334 var thirdByte
3335 var fourthByte
3336 var bytesPerSequence
3337 var tempCodePoint
3338 var codePoint
3339 var res = []
3340 var i = start
3341
3342 for (; i < end; i += bytesPerSequence) {
3343 firstByte = buf[i]
3344 codePoint = 0xFFFD
3345
3346 if (firstByte > 0xEF) {
3347 bytesPerSequence = 4
3348 } else if (firstByte > 0xDF) {
3349 bytesPerSequence = 3
3350 } else if (firstByte > 0xBF) {
3351 bytesPerSequence = 2
3352 } else {
3353 bytesPerSequence = 1
3354 }
212b1b46 3355
ab78acc6
IC
3356 if (i + bytesPerSequence <= end) {
3357 switch (bytesPerSequence) {
3358 case 1:
3359 if (firstByte < 0x80) {
3360 codePoint = firstByte
3361 }
3362 break
3363 case 2:
3364 secondByte = buf[i + 1]
3365 if ((secondByte & 0xC0) === 0x80) {
3366 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3367 if (tempCodePoint > 0x7F) {
3368 codePoint = tempCodePoint
3369 }
3370 }
3371 break
3372 case 3:
3373 secondByte = buf[i + 1]
3374 thirdByte = buf[i + 2]
3375 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3376 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3377 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3378 codePoint = tempCodePoint
3379 }
3380 }
3381 break
3382 case 4:
3383 secondByte = buf[i + 1]
3384 thirdByte = buf[i + 2]
3385 fourthByte = buf[i + 3]
3386 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3387 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3388 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3389 codePoint = tempCodePoint
3390 }
3391 }
3392 }
3393 }
212b1b46 3394
ab78acc6
IC
3395 if (codePoint === 0xFFFD) {
3396 // we generated an invalid codePoint so make sure to only advance by 1 byte
3397 bytesPerSequence = 1
3398 } else if (codePoint > 0xFFFF) {
3399 // encode to utf16 (surrogate pair dance)
3400 codePoint -= 0x10000
3401 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3402 codePoint = 0xDC00 | codePoint & 0x3FF
3403 }
212b1b46 3404
ab78acc6 3405 res.push(codePoint)
3af2954a 3406 }
212b1b46 3407
ab78acc6
IC
3408 return String.fromCharCode.apply(String, res)
3409}
212b1b46 3410
ab78acc6
IC
3411function asciiSlice (buf, start, end) {
3412 var ret = ''
3413 end = Math.min(buf.length, end)
3414
3415 for (var i = start; i < end; i++) {
3416 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3417 }
ab78acc6
IC
3418 return ret
3419}
212b1b46 3420
ab78acc6
IC
3421function binarySlice (buf, start, end) {
3422 var ret = ''
3423 end = Math.min(buf.length, end)
212b1b46 3424
ab78acc6
IC
3425 for (var i = start; i < end; i++) {
3426 ret += String.fromCharCode(buf[i])
3427 }
3428 return ret
3429}
212b1b46 3430
ab78acc6
IC
3431function hexSlice (buf, start, end) {
3432 var len = buf.length
212b1b46 3433
ab78acc6
IC
3434 if (!start || start < 0) start = 0
3435 if (!end || end < 0 || end > len) end = len
212b1b46 3436
ab78acc6
IC
3437 var out = ''
3438 for (var i = start; i < end; i++) {
3439 out += toHex(buf[i])
3440 }
3441 return out
3442}
212b1b46 3443
ab78acc6
IC
3444function utf16leSlice (buf, start, end) {
3445 var bytes = buf.slice(start, end)
3446 var res = ''
3447 for (var i = 0; i < bytes.length; i += 2) {
3448 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3449 }
3450 return res
3451}
212b1b46 3452
ab78acc6
IC
3453Buffer.prototype.slice = function slice (start, end) {
3454 var len = this.length
3455 start = ~~start
3456 end = end === undefined ? len : ~~end
212b1b46 3457
ab78acc6
IC
3458 if (start < 0) {
3459 start += len
3460 if (start < 0) start = 0
3461 } else if (start > len) {
3462 start = len
3463 }
212b1b46 3464
ab78acc6
IC
3465 if (end < 0) {
3466 end += len
3467 if (end < 0) end = 0
3468 } else if (end > len) {
3469 end = len
3470 }
212b1b46 3471
ab78acc6 3472 if (end < start) end = start
212b1b46 3473
ab78acc6
IC
3474 var newBuf
3475 if (Buffer.TYPED_ARRAY_SUPPORT) {
3476 newBuf = Buffer._augment(this.subarray(start, end))
3477 } else {
3478 var sliceLen = end - start
3479 newBuf = new Buffer(sliceLen, undefined)
3480 for (var i = 0; i < sliceLen; i++) {
3481 newBuf[i] = this[i + start]
3af2954a
IC
3482 }
3483 }
212b1b46 3484
ab78acc6 3485 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3486
ab78acc6
IC
3487 return newBuf
3488}
ebd8d4e8 3489
ab78acc6
IC
3490/*
3491 * Need to make sure that buffer isn't trying to write out of bounds.
3492 */
3493function checkOffset (offset, ext, length) {
3494 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3495 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3496}
ebd8d4e8 3497
ab78acc6
IC
3498Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3499 offset = offset | 0
3500 byteLength = byteLength | 0
3501 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3502
ab78acc6
IC
3503 var val = this[offset]
3504 var mul = 1
3505 var i = 0
3506 while (++i < byteLength && (mul *= 0x100)) {
3507 val += this[offset + i] * mul
3508 }
3af2954a 3509
ab78acc6
IC
3510 return val
3511}
3af2954a 3512
ab78acc6
IC
3513Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3514 offset = offset | 0
3515 byteLength = byteLength | 0
3516 if (!noAssert) {
3517 checkOffset(offset, byteLength, this.length)
3518 }
3af2954a 3519
ab78acc6
IC
3520 var val = this[offset + --byteLength]
3521 var mul = 1
3522 while (byteLength > 0 && (mul *= 0x100)) {
3523 val += this[offset + --byteLength] * mul
3af2954a
IC
3524 }
3525
ab78acc6
IC
3526 return val
3527}
3af2954a 3528
ab78acc6
IC
3529Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3530 if (!noAssert) checkOffset(offset, 1, this.length)
3531 return this[offset]
3532}
3af2954a 3533
ab78acc6
IC
3534Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3535 if (!noAssert) checkOffset(offset, 2, this.length)
3536 return this[offset] | (this[offset + 1] << 8)
3537}
3af2954a 3538
ab78acc6
IC
3539Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3540 if (!noAssert) checkOffset(offset, 2, this.length)
3541 return (this[offset] << 8) | this[offset + 1]
3542}
ebd8d4e8 3543
ab78acc6
IC
3544Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3545 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3546
ab78acc6
IC
3547 return ((this[offset]) |
3548 (this[offset + 1] << 8) |
3549 (this[offset + 2] << 16)) +
3550 (this[offset + 3] * 0x1000000)
3551}
3af2954a 3552
ab78acc6
IC
3553Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3554 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3555
ab78acc6
IC
3556 return (this[offset] * 0x1000000) +
3557 ((this[offset + 1] << 16) |
3558 (this[offset + 2] << 8) |
3559 this[offset + 3])
3560}
ebd8d4e8 3561
ab78acc6
IC
3562Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3563 offset = offset | 0
3564 byteLength = byteLength | 0
3565 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3566
ab78acc6
IC
3567 var val = this[offset]
3568 var mul = 1
3569 var i = 0
3570 while (++i < byteLength && (mul *= 0x100)) {
3571 val += this[offset + i] * mul
ebd8d4e8 3572 }
ab78acc6 3573 mul *= 0x80
ebd8d4e8 3574
ab78acc6
IC
3575 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3576
3577 return val
ebd8d4e8
IC
3578}
3579
ab78acc6
IC
3580Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3581 offset = offset | 0
3582 byteLength = byteLength | 0
3583 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3584
ab78acc6
IC
3585 var i = byteLength
3586 var mul = 1
3587 var val = this[offset + --i]
3588 while (i > 0 && (mul *= 0x100)) {
3589 val += this[offset + --i] * mul
3590 }
3591 mul *= 0x80
ebd8d4e8 3592
ab78acc6 3593 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3594
ab78acc6
IC
3595 return val
3596}
ebd8d4e8 3597
ab78acc6
IC
3598Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3599 if (!noAssert) checkOffset(offset, 1, this.length)
3600 if (!(this[offset] & 0x80)) return (this[offset])
3601 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3602}
ab78acc6
IC
3603
3604Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3605 if (!noAssert) checkOffset(offset, 2, this.length)
3606 var val = this[offset] | (this[offset + 1] << 8)
3607 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3608}
ab78acc6
IC
3609
3610Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3611 if (!noAssert) checkOffset(offset, 2, this.length)
3612 var val = this[offset + 1] | (this[offset] << 8)
3613 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3614}
3615
ab78acc6
IC
3616Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3617 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3618
ab78acc6
IC
3619 return (this[offset]) |
3620 (this[offset + 1] << 8) |
3621 (this[offset + 2] << 16) |
3622 (this[offset + 3] << 24)
ebd8d4e8 3623}
ebd8d4e8 3624
ab78acc6
IC
3625Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3626 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3627
ab78acc6
IC
3628 return (this[offset] << 24) |
3629 (this[offset + 1] << 16) |
3630 (this[offset + 2] << 8) |
3631 (this[offset + 3])
ebd8d4e8
IC
3632}
3633
ab78acc6
IC
3634Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3635 if (!noAssert) checkOffset(offset, 4, this.length)
3636 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3637}
3638
ab78acc6
IC
3639Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset, 4, this.length)
3641 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3642}
3643
ab78acc6
IC
3644Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3645 if (!noAssert) checkOffset(offset, 8, this.length)
3646 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3647}
3648
ab78acc6
IC
3649Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3650 if (!noAssert) checkOffset(offset, 8, this.length)
3651 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3652}
3653
ab78acc6
IC
3654function checkInt (buf, value, offset, ext, max, min) {
3655 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3656 if (value > max || value < min) throw new RangeError('value is out of bounds')
3657 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3658}
3659
ab78acc6
IC
3660Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3661 value = +value
3662 offset = offset | 0
3663 byteLength = byteLength | 0
3664 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3665
ab78acc6
IC
3666 var mul = 1
3667 var i = 0
3668 this[offset] = value & 0xFF
3669 while (++i < byteLength && (mul *= 0x100)) {
3670 this[offset + i] = (value / mul) & 0xFF
3671 }
ebd8d4e8 3672
ab78acc6 3673 return offset + byteLength
ebd8d4e8
IC
3674}
3675
ab78acc6
IC
3676Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3677 value = +value
3678 offset = offset | 0
3679 byteLength = byteLength | 0
3680 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3681
ab78acc6
IC
3682 var i = byteLength - 1
3683 var mul = 1
3684 this[offset + i] = value & 0xFF
3685 while (--i >= 0 && (mul *= 0x100)) {
3686 this[offset + i] = (value / mul) & 0xFF
3687 }
ebd8d4e8 3688
ab78acc6 3689 return offset + byteLength
ebd8d4e8
IC
3690}
3691
ab78acc6
IC
3692Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3693 value = +value
3694 offset = offset | 0
3695 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3696 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3697 this[offset] = value
3698 return offset + 1
ebd8d4e8
IC
3699}
3700
ab78acc6
IC
3701function objectWriteUInt16 (buf, value, offset, littleEndian) {
3702 if (value < 0) value = 0xffff + value + 1
3703 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3704 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3705 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3706 }
ebd8d4e8
IC
3707}
3708
ab78acc6
IC
3709Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3710 value = +value
3711 offset = offset | 0
3712 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3713 if (Buffer.TYPED_ARRAY_SUPPORT) {
3714 this[offset] = value
3715 this[offset + 1] = (value >>> 8)
3716 } else {
3717 objectWriteUInt16(this, value, offset, true)
3718 }
3719 return offset + 2
ebd8d4e8
IC
3720}
3721
ab78acc6
IC
3722Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3723 value = +value
3724 offset = offset | 0
3725 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3726 if (Buffer.TYPED_ARRAY_SUPPORT) {
3727 this[offset] = (value >>> 8)
3728 this[offset + 1] = value
3729 } else {
3730 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3731 }
ab78acc6 3732 return offset + 2
ebd8d4e8
IC
3733}
3734
ab78acc6
IC
3735function objectWriteUInt32 (buf, value, offset, littleEndian) {
3736 if (value < 0) value = 0xffffffff + value + 1
3737 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3738 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3739 }
ebd8d4e8
IC
3740}
3741
ab78acc6
IC
3742Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3743 value = +value
3744 offset = offset | 0
3745 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3746 if (Buffer.TYPED_ARRAY_SUPPORT) {
3747 this[offset + 3] = (value >>> 24)
3748 this[offset + 2] = (value >>> 16)
3749 this[offset + 1] = (value >>> 8)
3750 this[offset] = value
3751 } else {
3752 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3753 }
ab78acc6 3754 return offset + 4
ebd8d4e8
IC
3755}
3756
ab78acc6
IC
3757Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3758 value = +value
3759 offset = offset | 0
3760 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3761 if (Buffer.TYPED_ARRAY_SUPPORT) {
3762 this[offset] = (value >>> 24)
3763 this[offset + 1] = (value >>> 16)
3764 this[offset + 2] = (value >>> 8)
3765 this[offset + 3] = value
3766 } else {
3767 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3768 }
ab78acc6
IC
3769 return offset + 4
3770}
3771
3772Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3773 value = +value
3774 offset = offset | 0
3775 if (!noAssert) {
3776 var limit = Math.pow(2, 8 * byteLength - 1)
3777
3778 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3779 }
ab78acc6
IC
3780
3781 var i = 0
3782 var mul = 1
3783 var sub = value < 0 ? 1 : 0
3784 this[offset] = value & 0xFF
3785 while (++i < byteLength && (mul *= 0x100)) {
3786 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3787 }
ebd8d4e8 3788
ab78acc6 3789 return offset + byteLength
ebd8d4e8
IC
3790}
3791
ab78acc6
IC
3792Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3793 value = +value
3794 offset = offset | 0
3795 if (!noAssert) {
3796 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3797
ab78acc6
IC
3798 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3799 }
ebd8d4e8 3800
ab78acc6
IC
3801 var i = byteLength - 1
3802 var mul = 1
3803 var sub = value < 0 ? 1 : 0
3804 this[offset + i] = value & 0xFF
3805 while (--i >= 0 && (mul *= 0x100)) {
3806 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3807 }
3808
3809 return offset + byteLength
ebd8d4e8
IC
3810}
3811
ab78acc6
IC
3812Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3813 value = +value
3814 offset = offset | 0
3815 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3816 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3817 if (value < 0) value = 0xff + value + 1
3818 this[offset] = value
3819 return offset + 1
ebd8d4e8
IC
3820}
3821
ab78acc6
IC
3822Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3823 value = +value
3824 offset = offset | 0
3825 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3826 if (Buffer.TYPED_ARRAY_SUPPORT) {
3827 this[offset] = value
3828 this[offset + 1] = (value >>> 8)
3829 } else {
3830 objectWriteUInt16(this, value, offset, true)
3831 }
3832 return offset + 2
ebd8d4e8
IC
3833}
3834
ab78acc6
IC
3835Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3836 value = +value
3837 offset = offset | 0
3838 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3839 if (Buffer.TYPED_ARRAY_SUPPORT) {
3840 this[offset] = (value >>> 8)
3841 this[offset + 1] = value
3842 } else {
3843 objectWriteUInt16(this, value, offset, false)
3844 }
3845 return offset + 2
ebd8d4e8
IC
3846}
3847
ab78acc6
IC
3848Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3849 value = +value
3850 offset = offset | 0
3851 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3852 if (Buffer.TYPED_ARRAY_SUPPORT) {
3853 this[offset] = value
3854 this[offset + 1] = (value >>> 8)
3855 this[offset + 2] = (value >>> 16)
3856 this[offset + 3] = (value >>> 24)
3857 } else {
3858 objectWriteUInt32(this, value, offset, true)
3859 }
3860 return offset + 4
3861}
3862
3863Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3864 value = +value
3865 offset = offset | 0
3866 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3867 if (value < 0) value = 0xffffffff + value + 1
3868 if (Buffer.TYPED_ARRAY_SUPPORT) {
3869 this[offset] = (value >>> 24)
3870 this[offset + 1] = (value >>> 16)
3871 this[offset + 2] = (value >>> 8)
3872 this[offset + 3] = value
3873 } else {
3874 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3875 }
ab78acc6 3876 return offset + 4
ebd8d4e8
IC
3877}
3878
ab78acc6
IC
3879function checkIEEE754 (buf, value, offset, ext, max, min) {
3880 if (value > max || value < min) throw new RangeError('value is out of bounds')
3881 if (offset + ext > buf.length) throw new RangeError('index out of range')
3882 if (offset < 0) throw new RangeError('index out of range')
3883}
ebd8d4e8 3884
ab78acc6
IC
3885function writeFloat (buf, value, offset, littleEndian, noAssert) {
3886 if (!noAssert) {
3887 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3888 }
3889 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3890 return offset + 4
3891}
ebd8d4e8 3892
ab78acc6
IC
3893Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3894 return writeFloat(this, value, offset, true, noAssert)
3895}
ebd8d4e8 3896
ab78acc6
IC
3897Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3898 return writeFloat(this, value, offset, false, noAssert)
3899}
ebd8d4e8 3900
ab78acc6
IC
3901function writeDouble (buf, value, offset, littleEndian, noAssert) {
3902 if (!noAssert) {
3903 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3904 }
ab78acc6
IC
3905 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3906 return offset + 8
ebd8d4e8
IC
3907}
3908
ab78acc6
IC
3909Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3910 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3911}
3912
ab78acc6
IC
3913Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3914 return writeDouble(this, value, offset, false, noAssert)
3915}
ebd8d4e8 3916
ab78acc6
IC
3917// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3918Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3919 if (!start) start = 0
3920 if (!end && end !== 0) end = this.length
3921 if (targetStart >= target.length) targetStart = target.length
3922 if (!targetStart) targetStart = 0
3923 if (end > 0 && end < start) end = start
3924
3925 // Copy 0 bytes; we're done
3926 if (end === start) return 0
3927 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3928
ab78acc6
IC
3929 // Fatal error conditions
3930 if (targetStart < 0) {
3931 throw new RangeError('targetStart out of bounds')
3932 }
3933 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3934 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3935
ab78acc6
IC
3936 // Are we oob?
3937 if (end > this.length) end = this.length
3938 if (target.length - targetStart < end - start) {
3939 end = target.length - targetStart + start
3940 }
ebd8d4e8 3941
ab78acc6
IC
3942 var len = end - start
3943 var i
ebd8d4e8 3944
ab78acc6
IC
3945 if (this === target && start < targetStart && targetStart < end) {
3946 // descending copy from end
3947 for (i = len - 1; i >= 0; i--) {
3948 target[i + targetStart] = this[i + start]
3949 }
3950 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3951 // ascending copy from start
3952 for (i = 0; i < len; i++) {
3953 target[i + targetStart] = this[i + start]
3954 }
3955 } else {
3956 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3957 }
ebd8d4e8 3958
ab78acc6
IC
3959 return len
3960}
ebd8d4e8 3961
ab78acc6
IC
3962// fill(value, start=0, end=buffer.length)
3963Buffer.prototype.fill = function fill (value, start, end) {
3964 if (!value) value = 0
3965 if (!start) start = 0
3966 if (!end) end = this.length
ebd8d4e8 3967
ab78acc6 3968 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3969
ab78acc6
IC
3970 // Fill 0 bytes; we're done
3971 if (end === start) return
3972 if (this.length === 0) return
ebd8d4e8 3973
ab78acc6
IC
3974 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3975 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3976
ab78acc6
IC
3977 var i
3978 if (typeof value === 'number') {
3979 for (i = start; i < end; i++) {
3980 this[i] = value
ebd8d4e8 3981 }
ab78acc6
IC
3982 } else {
3983 var bytes = utf8ToBytes(value.toString())
3984 var len = bytes.length
3985 for (i = start; i < end; i++) {
3986 this[i] = bytes[i % len]
ebd8d4e8
IC
3987 }
3988 }
ebd8d4e8 3989
ab78acc6 3990 return this
ebd8d4e8
IC
3991}
3992
ab78acc6
IC
3993/**
3994 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3995 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3996 */
3997Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3998 if (typeof Uint8Array !== 'undefined') {
3999 if (Buffer.TYPED_ARRAY_SUPPORT) {
4000 return (new Buffer(this)).buffer
4001 } else {
4002 var buf = new Uint8Array(this.length)
4003 for (var i = 0, len = buf.length; i < len; i += 1) {
4004 buf[i] = this[i]
ebd8d4e8 4005 }
ab78acc6 4006 return buf.buffer
ebd8d4e8 4007 }
ab78acc6
IC
4008 } else {
4009 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 4010 }
ebd8d4e8
IC
4011}
4012
ab78acc6
IC
4013// HELPER FUNCTIONS
4014// ================
ebd8d4e8 4015
ab78acc6 4016var BP = Buffer.prototype
ebd8d4e8 4017
ab78acc6
IC
4018/**
4019 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4020 */
4021Buffer._augment = function _augment (arr) {
4022 arr.constructor = Buffer
4023 arr._isBuffer = true
ebd8d4e8 4024
ab78acc6
IC
4025 // save reference to original Uint8Array set method before overwriting
4026 arr._set = arr.set
ebd8d4e8 4027
ab78acc6
IC
4028 // deprecated
4029 arr.get = BP.get
4030 arr.set = BP.set
ebd8d4e8 4031
ab78acc6
IC
4032 arr.write = BP.write
4033 arr.toString = BP.toString
4034 arr.toLocaleString = BP.toString
4035 arr.toJSON = BP.toJSON
4036 arr.equals = BP.equals
4037 arr.compare = BP.compare
4038 arr.indexOf = BP.indexOf
4039 arr.copy = BP.copy
4040 arr.slice = BP.slice
4041 arr.readUIntLE = BP.readUIntLE
4042 arr.readUIntBE = BP.readUIntBE
4043 arr.readUInt8 = BP.readUInt8
4044 arr.readUInt16LE = BP.readUInt16LE
4045 arr.readUInt16BE = BP.readUInt16BE
4046 arr.readUInt32LE = BP.readUInt32LE
4047 arr.readUInt32BE = BP.readUInt32BE
4048 arr.readIntLE = BP.readIntLE
4049 arr.readIntBE = BP.readIntBE
4050 arr.readInt8 = BP.readInt8
4051 arr.readInt16LE = BP.readInt16LE
4052 arr.readInt16BE = BP.readInt16BE
4053 arr.readInt32LE = BP.readInt32LE
4054 arr.readInt32BE = BP.readInt32BE
4055 arr.readFloatLE = BP.readFloatLE
4056 arr.readFloatBE = BP.readFloatBE
4057 arr.readDoubleLE = BP.readDoubleLE
4058 arr.readDoubleBE = BP.readDoubleBE
4059 arr.writeUInt8 = BP.writeUInt8
4060 arr.writeUIntLE = BP.writeUIntLE
4061 arr.writeUIntBE = BP.writeUIntBE
4062 arr.writeUInt16LE = BP.writeUInt16LE
4063 arr.writeUInt16BE = BP.writeUInt16BE
4064 arr.writeUInt32LE = BP.writeUInt32LE
4065 arr.writeUInt32BE = BP.writeUInt32BE
4066 arr.writeIntLE = BP.writeIntLE
4067 arr.writeIntBE = BP.writeIntBE
4068 arr.writeInt8 = BP.writeInt8
4069 arr.writeInt16LE = BP.writeInt16LE
4070 arr.writeInt16BE = BP.writeInt16BE
4071 arr.writeInt32LE = BP.writeInt32LE
4072 arr.writeInt32BE = BP.writeInt32BE
4073 arr.writeFloatLE = BP.writeFloatLE
4074 arr.writeFloatBE = BP.writeFloatBE
4075 arr.writeDoubleLE = BP.writeDoubleLE
4076 arr.writeDoubleBE = BP.writeDoubleBE
4077 arr.fill = BP.fill
4078 arr.inspect = BP.inspect
4079 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4080
ab78acc6 4081 return arr
ebd8d4e8
IC
4082}
4083
ab78acc6 4084var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4085
ab78acc6
IC
4086function base64clean (str) {
4087 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4088 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4089 // Node converts strings with length < 2 to ''
4090 if (str.length < 2) return ''
4091 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4092 while (str.length % 4 !== 0) {
4093 str = str + '='
4094 }
4095 return str
ebd8d4e8
IC
4096}
4097
ab78acc6
IC
4098function stringtrim (str) {
4099 if (str.trim) return str.trim()
4100 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4101}
4102
ab78acc6
IC
4103function toHex (n) {
4104 if (n < 16) return '0' + n.toString(16)
4105 return n.toString(16)
ebd8d4e8
IC
4106}
4107
ab78acc6
IC
4108function utf8ToBytes (string, units) {
4109 units = units || Infinity
4110 var codePoint
4111 var length = string.length
4112 var leadSurrogate = null
4113 var bytes = []
ebd8d4e8 4114
ab78acc6
IC
4115 for (var i = 0; i < length; i++) {
4116 codePoint = string.charCodeAt(i)
ebd8d4e8 4117
ab78acc6
IC
4118 // is surrogate component
4119 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4120 // last char was a lead
4121 if (!leadSurrogate) {
4122 // no lead yet
4123 if (codePoint > 0xDBFF) {
4124 // unexpected trail
4125 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4126 continue
ebd8d4e8 4127
ab78acc6
IC
4128 } else if (i + 1 === length) {
4129 // unpaired lead
4130 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4131 continue
4132 }
ebd8d4e8 4133
ab78acc6
IC
4134 // valid lead
4135 leadSurrogate = codePoint
ebd8d4e8 4136
ab78acc6
IC
4137 continue
4138 }
ebd8d4e8 4139
ab78acc6
IC
4140 // 2 leads in a row
4141 if (codePoint < 0xDC00) {
4142 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4143 leadSurrogate = codePoint
4144 continue
4145 }
ebd8d4e8 4146
ab78acc6
IC
4147 // valid surrogate pair
4148 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4149
4150 } else if (leadSurrogate) {
4151 // valid bmp char, but last char was a lead
4152 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4153 }
4154
4155 leadSurrogate = null
4156
4157 // encode utf8
4158 if (codePoint < 0x80) {
4159 if ((units -= 1) < 0) break
4160 bytes.push(codePoint)
4161 } else if (codePoint < 0x800) {
4162 if ((units -= 2) < 0) break
4163 bytes.push(
4164 codePoint >> 0x6 | 0xC0,
4165 codePoint & 0x3F | 0x80
4166 )
4167 } else if (codePoint < 0x10000) {
4168 if ((units -= 3) < 0) break
4169 bytes.push(
4170 codePoint >> 0xC | 0xE0,
4171 codePoint >> 0x6 & 0x3F | 0x80,
4172 codePoint & 0x3F | 0x80
4173 )
4174 } else if (codePoint < 0x110000) {
4175 if ((units -= 4) < 0) break
4176 bytes.push(
4177 codePoint >> 0x12 | 0xF0,
4178 codePoint >> 0xC & 0x3F | 0x80,
4179 codePoint >> 0x6 & 0x3F | 0x80,
4180 codePoint & 0x3F | 0x80
4181 )
4182 } else {
4183 throw new Error('Invalid code point')
ebd8d4e8 4184 }
ebd8d4e8 4185 }
ab78acc6
IC
4186
4187 return bytes
4188}
4189
4190function asciiToBytes (str) {
4191 var byteArray = []
4192 for (var i = 0; i < str.length; i++) {
4193 // Node's code seems to be doing this and not & 0x7F..
4194 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4195 }
ab78acc6 4196 return byteArray
ebd8d4e8
IC
4197}
4198
ab78acc6
IC
4199function utf16leToBytes (str, units) {
4200 var c, hi, lo
4201 var byteArray = []
4202 for (var i = 0; i < str.length; i++) {
4203 if ((units -= 2) < 0) break
ebd8d4e8 4204
ab78acc6
IC
4205 c = str.charCodeAt(i)
4206 hi = c >> 8
4207 lo = c % 256
4208 byteArray.push(lo)
4209 byteArray.push(hi)
4210 }
ebd8d4e8 4211
ab78acc6
IC
4212 return byteArray
4213}
ebd8d4e8 4214
ab78acc6
IC
4215function base64ToBytes (str) {
4216 return base64.toByteArray(base64clean(str))
4217}
ebd8d4e8 4218
ab78acc6
IC
4219function blitBuffer (src, dst, offset, length) {
4220 for (var i = 0; i < length; i++) {
4221 if ((i + offset >= dst.length) || (i >= src.length)) break
4222 dst[i + offset] = src[i]
4223 }
4224 return i
4225}
4226
4227},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4228var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4229
4230;(function (exports) {
4231 'use strict';
4232
4233 var Arr = (typeof Uint8Array !== 'undefined')
4234 ? Uint8Array
4235 : Array
ebd8d4e8 4236
ab78acc6
IC
4237 var PLUS = '+'.charCodeAt(0)
4238 var SLASH = '/'.charCodeAt(0)
4239 var NUMBER = '0'.charCodeAt(0)
4240 var LOWER = 'a'.charCodeAt(0)
4241 var UPPER = 'A'.charCodeAt(0)
4242 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4243 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4244
ab78acc6
IC
4245 function decode (elt) {
4246 var code = elt.charCodeAt(0)
4247 if (code === PLUS ||
4248 code === PLUS_URL_SAFE)
4249 return 62 // '+'
4250 if (code === SLASH ||
4251 code === SLASH_URL_SAFE)
4252 return 63 // '/'
4253 if (code < NUMBER)
4254 return -1 //no match
4255 if (code < NUMBER + 10)
4256 return code - NUMBER + 26 + 26
4257 if (code < UPPER + 26)
4258 return code - UPPER
4259 if (code < LOWER + 26)
4260 return code - LOWER + 26
4261 }
ebd8d4e8 4262
ab78acc6
IC
4263 function b64ToByteArray (b64) {
4264 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4265
ab78acc6
IC
4266 if (b64.length % 4 > 0) {
4267 throw new Error('Invalid string. Length must be a multiple of 4')
4268 }
ebd8d4e8 4269
ab78acc6
IC
4270 // the number of equal signs (place holders)
4271 // if there are two placeholders, than the two characters before it
4272 // represent one byte
4273 // if there is only one, then the three characters before it represent 2 bytes
4274 // this is just a cheap hack to not do indexOf twice
4275 var len = b64.length
4276 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4277
ab78acc6
IC
4278 // base64 is 4/3 + up to two characters of the original data
4279 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4280
ab78acc6
IC
4281 // if there are placeholders, only get up to the last complete 4 chars
4282 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4283
ab78acc6 4284 var L = 0
ebd8d4e8 4285
ab78acc6
IC
4286 function push (v) {
4287 arr[L++] = v
4288 }
ebd8d4e8 4289
ab78acc6
IC
4290 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4291 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4292 push((tmp & 0xFF0000) >> 16)
4293 push((tmp & 0xFF00) >> 8)
4294 push(tmp & 0xFF)
4295 }
ebd8d4e8 4296
ab78acc6
IC
4297 if (placeHolders === 2) {
4298 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4299 push(tmp & 0xFF)
4300 } else if (placeHolders === 1) {
4301 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4302 push((tmp >> 8) & 0xFF)
4303 push(tmp & 0xFF)
4304 }
ebd8d4e8 4305
ab78acc6
IC
4306 return arr
4307 }
ebd8d4e8 4308
ab78acc6
IC
4309 function uint8ToBase64 (uint8) {
4310 var i,
4311 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4312 output = "",
4313 temp, length
ebd8d4e8 4314
ab78acc6
IC
4315 function encode (num) {
4316 return lookup.charAt(num)
4317 }
ebd8d4e8 4318
ab78acc6
IC
4319 function tripletToBase64 (num) {
4320 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4321 }
ebd8d4e8 4322
ab78acc6
IC
4323 // go through the array every three bytes, we'll deal with trailing stuff later
4324 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4325 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4326 output += tripletToBase64(temp)
4327 }
ebd8d4e8 4328
ab78acc6
IC
4329 // pad the end with zeros, but make sure to not forget the extra bytes
4330 switch (extraBytes) {
4331 case 1:
4332 temp = uint8[uint8.length - 1]
4333 output += encode(temp >> 2)
4334 output += encode((temp << 4) & 0x3F)
4335 output += '=='
4336 break
4337 case 2:
4338 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4339 output += encode(temp >> 10)
4340 output += encode((temp >> 4) & 0x3F)
4341 output += encode((temp << 2) & 0x3F)
4342 output += '='
4343 break
4344 }
ebd8d4e8 4345
ab78acc6
IC
4346 return output
4347 }
ebd8d4e8 4348
ab78acc6
IC
4349 exports.toByteArray = b64ToByteArray
4350 exports.fromByteArray = uint8ToBase64
4351}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4352
ab78acc6
IC
4353},{}],9:[function(require,module,exports){
4354exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4355 var e, m
4356 var eLen = nBytes * 8 - mLen - 1
4357 var eMax = (1 << eLen) - 1
4358 var eBias = eMax >> 1
4359 var nBits = -7
4360 var i = isLE ? (nBytes - 1) : 0
4361 var d = isLE ? -1 : 1
4362 var s = buffer[offset + i]
4363
4364 i += d
4365
4366 e = s & ((1 << (-nBits)) - 1)
4367 s >>= (-nBits)
4368 nBits += eLen
4369 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4370
4371 m = e & ((1 << (-nBits)) - 1)
4372 e >>= (-nBits)
4373 nBits += mLen
4374 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4375
ab78acc6
IC
4376 if (e === 0) {
4377 e = 1 - eBias
4378 } else if (e === eMax) {
4379 return m ? NaN : ((s ? -1 : 1) * Infinity)
4380 } else {
4381 m = m + Math.pow(2, mLen)
4382 e = e - eBias
ebd8d4e8 4383 }
ab78acc6 4384 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4385}
4386
ab78acc6
IC
4387exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4388 var e, m, c
4389 var eLen = nBytes * 8 - mLen - 1
4390 var eMax = (1 << eLen) - 1
4391 var eBias = eMax >> 1
4392 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4393 var i = isLE ? 0 : (nBytes - 1)
4394 var d = isLE ? 1 : -1
4395 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4396
ab78acc6 4397 value = Math.abs(value)
ebd8d4e8 4398
ab78acc6
IC
4399 if (isNaN(value) || value === Infinity) {
4400 m = isNaN(value) ? 1 : 0
4401 e = eMax
4402 } else {
4403 e = Math.floor(Math.log(value) / Math.LN2)
4404 if (value * (c = Math.pow(2, -e)) < 1) {
4405 e--
4406 c *= 2
ebd8d4e8 4407 }
ab78acc6
IC
4408 if (e + eBias >= 1) {
4409 value += rt / c
4410 } else {
4411 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4412 }
ab78acc6
IC
4413 if (value * c >= 2) {
4414 e++
4415 c /= 2
ebd8d4e8 4416 }
ab78acc6
IC
4417
4418 if (e + eBias >= eMax) {
4419 m = 0
4420 e = eMax
4421 } else if (e + eBias >= 1) {
4422 m = (value * c - 1) * Math.pow(2, mLen)
4423 e = e + eBias
4424 } else {
4425 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4426 e = 0
ebd8d4e8
IC
4427 }
4428 }
ebd8d4e8 4429
ab78acc6 4430 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4431
ab78acc6
IC
4432 e = (e << mLen) | m
4433 eLen += mLen
4434 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4435
ab78acc6
IC
4436 buffer[offset + i - d] |= s * 128
4437}
ebd8d4e8 4438
ab78acc6 4439},{}],10:[function(require,module,exports){
ebd8d4e8 4440
ab78acc6
IC
4441/**
4442 * isArray
4443 */
ebd8d4e8 4444
ab78acc6 4445var isArray = Array.isArray;
ebd8d4e8
IC
4446
4447/**
ab78acc6 4448 * toString
ebd8d4e8 4449 */
ebd8d4e8 4450
ab78acc6 4451var str = Object.prototype.toString;
ebd8d4e8
IC
4452
4453/**
ab78acc6
IC
4454 * Whether or not the given `val`
4455 * is an array.
ebd8d4e8 4456 *
ab78acc6
IC
4457 * example:
4458 *
4459 * isArray([]);
4460 * // > true
4461 * isArray(arguments);
4462 * // > false
4463 * isArray('');
4464 * // > false
4465 *
4466 * @param {mixed} val
4467 * @return {bool}
ebd8d4e8 4468 */
ebd8d4e8 4469
ab78acc6
IC
4470module.exports = isArray || function (val) {
4471 return !! val && '[object Array]' == str.call(val);
4472};
4473
4474},{}],11:[function(require,module,exports){
4475// Copyright Joyent, Inc. and other Node contributors.
4476//
4477// Permission is hereby granted, free of charge, to any person obtaining a
4478// copy of this software and associated documentation files (the
4479// "Software"), to deal in the Software without restriction, including
4480// without limitation the rights to use, copy, modify, merge, publish,
4481// distribute, sublicense, and/or sell copies of the Software, and to permit
4482// persons to whom the Software is furnished to do so, subject to the
4483// following conditions:
4484//
4485// The above copyright notice and this permission notice shall be included
4486// in all copies or substantial portions of the Software.
4487//
4488// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4489// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4490// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4491// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4492// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4493// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4494// USE OR OTHER DEALINGS IN THE SOFTWARE.
4495
4496function EventEmitter() {
4497 this._events = this._events || {};
4498 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4499}
ab78acc6 4500module.exports = EventEmitter;
ebd8d4e8 4501
ab78acc6
IC
4502// Backwards-compat with node 0.10.x
4503EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4504
ab78acc6
IC
4505EventEmitter.prototype._events = undefined;
4506EventEmitter.prototype._maxListeners = undefined;
4507
4508// By default EventEmitters will print a warning if more than 10 listeners are
4509// added to it. This is a useful default which helps finding memory leaks.
4510EventEmitter.defaultMaxListeners = 10;
4511
4512// Obviously not all Emitters should be limited to 10. This function allows
4513// that to be increased. Set to zero for unlimited.
4514EventEmitter.prototype.setMaxListeners = function(n) {
4515 if (!isNumber(n) || n < 0 || isNaN(n))
4516 throw TypeError('n must be a positive number');
4517 this._maxListeners = n;
4518 return this;
4519};
4520
4521EventEmitter.prototype.emit = function(type) {
4522 var er, handler, len, args, i, listeners;
4523
4524 if (!this._events)
4525 this._events = {};
4526
4527 // If there is no 'error' event listener then throw.
4528 if (type === 'error') {
4529 if (!this._events.error ||
4530 (isObject(this._events.error) && !this._events.error.length)) {
4531 er = arguments[1];
4532 if (er instanceof Error) {
4533 throw er; // Unhandled 'error' event
4534 }
4535 throw TypeError('Uncaught, unspecified "error" event.');
4536 }
4537 }
4538
4539 handler = this._events[type];
4540
4541 if (isUndefined(handler))
4542 return false;
4543
4544 if (isFunction(handler)) {
4545 switch (arguments.length) {
4546 // fast cases
4547 case 1:
4548 handler.call(this);
4549 break;
4550 case 2:
4551 handler.call(this, arguments[1]);
4552 break;
4553 case 3:
4554 handler.call(this, arguments[1], arguments[2]);
4555 break;
4556 // slower
4557 default:
4558 len = arguments.length;
4559 args = new Array(len - 1);
4560 for (i = 1; i < len; i++)
4561 args[i - 1] = arguments[i];
4562 handler.apply(this, args);
4563 }
4564 } else if (isObject(handler)) {
4565 len = arguments.length;
4566 args = new Array(len - 1);
4567 for (i = 1; i < len; i++)
4568 args[i - 1] = arguments[i];
ebd8d4e8 4569
ab78acc6
IC
4570 listeners = handler.slice();
4571 len = listeners.length;
4572 for (i = 0; i < len; i++)
4573 listeners[i].apply(this, args);
ebd8d4e8
IC
4574 }
4575
ab78acc6
IC
4576 return true;
4577};
ebd8d4e8 4578
ab78acc6
IC
4579EventEmitter.prototype.addListener = function(type, listener) {
4580 var m;
ebd8d4e8 4581
ab78acc6
IC
4582 if (!isFunction(listener))
4583 throw TypeError('listener must be a function');
ebd8d4e8 4584
ab78acc6
IC
4585 if (!this._events)
4586 this._events = {};
ebd8d4e8 4587
ab78acc6
IC
4588 // To avoid recursion in the case that type === "newListener"! Before
4589 // adding it to the listeners, first emit "newListener".
4590 if (this._events.newListener)
4591 this.emit('newListener', type,
4592 isFunction(listener.listener) ?
4593 listener.listener : listener);
ebd8d4e8 4594
ab78acc6
IC
4595 if (!this._events[type])
4596 // Optimize the case of one listener. Don't need the extra array object.
4597 this._events[type] = listener;
4598 else if (isObject(this._events[type]))
4599 // If we've already got an array, just append.
4600 this._events[type].push(listener);
4601 else
4602 // Adding the second element, need to change to array.
4603 this._events[type] = [this._events[type], listener];
4604
4605 // Check for listener leak
4606 if (isObject(this._events[type]) && !this._events[type].warned) {
4607 var m;
4608 if (!isUndefined(this._maxListeners)) {
4609 m = this._maxListeners;
4610 } else {
4611 m = EventEmitter.defaultMaxListeners;
4612 }
4613
4614 if (m && m > 0 && this._events[type].length > m) {
4615 this._events[type].warned = true;
4616 console.error('(node) warning: possible EventEmitter memory ' +
4617 'leak detected. %d listeners added. ' +
4618 'Use emitter.setMaxListeners() to increase limit.',
4619 this._events[type].length);
4620 if (typeof console.trace === 'function') {
4621 // not supported in IE 10
4622 console.trace();
4623 }
4624 }
4625 }
ebd8d4e8 4626
ab78acc6
IC
4627 return this;
4628};
ebd8d4e8 4629
ab78acc6 4630EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4631
ab78acc6
IC
4632EventEmitter.prototype.once = function(type, listener) {
4633 if (!isFunction(listener))
4634 throw TypeError('listener must be a function');
ebd8d4e8 4635
ab78acc6 4636 var fired = false;
ebd8d4e8 4637
ab78acc6
IC
4638 function g() {
4639 this.removeListener(type, g);
ebd8d4e8 4640
ab78acc6
IC
4641 if (!fired) {
4642 fired = true;
4643 listener.apply(this, arguments);
4644 }
4645 }
ebd8d4e8 4646
ab78acc6
IC
4647 g.listener = listener;
4648 this.on(type, g);
ebd8d4e8 4649
ab78acc6
IC
4650 return this;
4651};
ebd8d4e8 4652
ab78acc6
IC
4653// emits a 'removeListener' event iff the listener was removed
4654EventEmitter.prototype.removeListener = function(type, listener) {
4655 var list, position, length, i;
ebd8d4e8 4656
ab78acc6
IC
4657 if (!isFunction(listener))
4658 throw TypeError('listener must be a function');
ebd8d4e8 4659
ab78acc6
IC
4660 if (!this._events || !this._events[type])
4661 return this;
ebd8d4e8 4662
ab78acc6
IC
4663 list = this._events[type];
4664 length = list.length;
4665 position = -1;
4666
4667 if (list === listener ||
4668 (isFunction(list.listener) && list.listener === listener)) {
4669 delete this._events[type];
4670 if (this._events.removeListener)
4671 this.emit('removeListener', type, listener);
4672
4673 } else if (isObject(list)) {
4674 for (i = length; i-- > 0;) {
4675 if (list[i] === listener ||
4676 (list[i].listener && list[i].listener === listener)) {
4677 position = i;
4678 break;
ebd8d4e8 4679 }
ab78acc6 4680 }
ebd8d4e8 4681
ab78acc6
IC
4682 if (position < 0)
4683 return this;
4684
4685 if (list.length === 1) {
4686 list.length = 0;
4687 delete this._events[type];
4688 } else {
4689 list.splice(position, 1);
ebd8d4e8 4690 }
ab78acc6
IC
4691
4692 if (this._events.removeListener)
4693 this.emit('removeListener', type, listener);
ebd8d4e8 4694 }
ab78acc6
IC
4695
4696 return this;
ebd8d4e8
IC
4697};
4698
ab78acc6
IC
4699EventEmitter.prototype.removeAllListeners = function(type) {
4700 var key, listeners;
ebd8d4e8 4701
ab78acc6
IC
4702 if (!this._events)
4703 return this;
4704
4705 // not listening for removeListener, no need to emit
4706 if (!this._events.removeListener) {
4707 if (arguments.length === 0)
4708 this._events = {};
4709 else if (this._events[type])
4710 delete this._events[type];
4711 return this;
ebd8d4e8 4712 }
ab78acc6
IC
4713
4714 // emit removeListener for all listeners on all events
4715 if (arguments.length === 0) {
4716 for (key in this._events) {
4717 if (key === 'removeListener') continue;
4718 this.removeAllListeners(key);
4719 }
4720 this.removeAllListeners('removeListener');
4721 this._events = {};
4722 return this;
ebd8d4e8 4723 }
ebd8d4e8 4724
ab78acc6
IC
4725 listeners = this._events[type];
4726
4727 if (isFunction(listeners)) {
4728 this.removeListener(type, listeners);
ebd8d4e8 4729 } else {
ab78acc6
IC
4730 // LIFO order
4731 while (listeners.length)
4732 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4733 }
ab78acc6 4734 delete this._events[type];
ebd8d4e8 4735
ab78acc6
IC
4736 return this;
4737};
ebd8d4e8 4738
ab78acc6
IC
4739EventEmitter.prototype.listeners = function(type) {
4740 var ret;
4741 if (!this._events || !this._events[type])
4742 ret = [];
4743 else if (isFunction(this._events[type]))
4744 ret = [this._events[type]];
4745 else
4746 ret = this._events[type].slice();
4747 return ret;
4748};
ebd8d4e8 4749
ab78acc6
IC
4750EventEmitter.listenerCount = function(emitter, type) {
4751 var ret;
4752 if (!emitter._events || !emitter._events[type])
4753 ret = 0;
4754 else if (isFunction(emitter._events[type]))
4755 ret = 1;
4756 else
4757 ret = emitter._events[type].length;
4758 return ret;
4759};
ebd8d4e8 4760
ab78acc6
IC
4761function isFunction(arg) {
4762 return typeof arg === 'function';
ebd8d4e8
IC
4763}
4764
ab78acc6
IC
4765function isNumber(arg) {
4766 return typeof arg === 'number';
4767}
ebd8d4e8 4768
ab78acc6
IC
4769function isObject(arg) {
4770 return typeof arg === 'object' && arg !== null;
4771}
ebd8d4e8 4772
ab78acc6
IC
4773function isUndefined(arg) {
4774 return arg === void 0;
ebd8d4e8 4775}
ebd8d4e8 4776
ab78acc6
IC
4777},{}],12:[function(require,module,exports){
4778if (typeof Object.create === 'function') {
4779 // implementation from standard node.js 'util' module
4780 module.exports = function inherits(ctor, superCtor) {
4781 ctor.super_ = superCtor
4782 ctor.prototype = Object.create(superCtor.prototype, {
4783 constructor: {
4784 value: ctor,
4785 enumerable: false,
4786 writable: true,
4787 configurable: true
4788 }
4789 });
4790 };
4791} else {
4792 // old school shim for old browsers
4793 module.exports = function inherits(ctor, superCtor) {
4794 ctor.super_ = superCtor
4795 var TempCtor = function () {}
4796 TempCtor.prototype = superCtor.prototype
4797 ctor.prototype = new TempCtor()
4798 ctor.prototype.constructor = ctor
4799 }
4800}
ebd8d4e8 4801
ab78acc6
IC
4802},{}],13:[function(require,module,exports){
4803module.exports = Array.isArray || function (arr) {
4804 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4805};
4806
ab78acc6
IC
4807},{}],14:[function(require,module,exports){
4808// shim for using process in browser
ebd8d4e8 4809
ab78acc6
IC
4810var process = module.exports = {};
4811var queue = [];
4812var draining = false;
4813var currentQueue;
4814var queueIndex = -1;
4815
4816function cleanUpNextTick() {
4817 draining = false;
4818 if (currentQueue.length) {
4819 queue = currentQueue.concat(queue);
4820 } else {
4821 queueIndex = -1;
4822 }
4823 if (queue.length) {
4824 drainQueue();
4825 }
4826}
ebd8d4e8 4827
ab78acc6
IC
4828function drainQueue() {
4829 if (draining) {
4830 return;
4831 }
4832 var timeout = setTimeout(cleanUpNextTick);
4833 draining = true;
ebd8d4e8 4834
ab78acc6
IC
4835 var len = queue.length;
4836 while(len) {
4837 currentQueue = queue;
4838 queue = [];
4839 while (++queueIndex < len) {
4840 currentQueue[queueIndex].run();
4841 }
4842 queueIndex = -1;
4843 len = queue.length;
4844 }
4845 currentQueue = null;
4846 draining = false;
4847 clearTimeout(timeout);
4848}
4849
4850process.nextTick = function (fun) {
4851 var args = new Array(arguments.length - 1);
4852 if (arguments.length > 1) {
4853 for (var i = 1; i < arguments.length; i++) {
4854 args[i - 1] = arguments[i];
4855 }
4856 }
4857 queue.push(new Item(fun, args));
4858 if (queue.length === 1 && !draining) {
4859 setTimeout(drainQueue, 0);
4860 }
ebd8d4e8
IC
4861};
4862
ab78acc6
IC
4863// v8 likes predictible objects
4864function Item(fun, array) {
4865 this.fun = fun;
4866 this.array = array;
4867}
4868Item.prototype.run = function () {
4869 this.fun.apply(null, this.array);
4870};
4871process.title = 'browser';
4872process.browser = true;
4873process.env = {};
4874process.argv = [];
4875process.version = ''; // empty string to avoid regexp issues
4876process.versions = {};
ebd8d4e8 4877
ab78acc6
IC
4878function noop() {}
4879
4880process.on = noop;
4881process.addListener = noop;
4882process.once = noop;
4883process.off = noop;
4884process.removeListener = noop;
4885process.removeAllListeners = noop;
4886process.emit = noop;
4887
4888process.binding = function (name) {
4889 throw new Error('process.binding is not supported');
4890};
ebd8d4e8 4891
ab78acc6
IC
4892// TODO(shtylman)
4893process.cwd = function () { return '/' };
4894process.chdir = function (dir) {
4895 throw new Error('process.chdir is not supported');
4896};
4897process.umask = function() { return 0; };
ebd8d4e8 4898
ab78acc6
IC
4899},{}],15:[function(require,module,exports){
4900module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4901
ab78acc6
IC
4902},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4903(function (process){
4904// Copyright Joyent, Inc. and other Node contributors.
4905//
4906// Permission is hereby granted, free of charge, to any person obtaining a
4907// copy of this software and associated documentation files (the
4908// "Software"), to deal in the Software without restriction, including
4909// without limitation the rights to use, copy, modify, merge, publish,
4910// distribute, sublicense, and/or sell copies of the Software, and to permit
4911// persons to whom the Software is furnished to do so, subject to the
4912// following conditions:
4913//
4914// The above copyright notice and this permission notice shall be included
4915// in all copies or substantial portions of the Software.
4916//
4917// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4918// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4919// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4920// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4921// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4922// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4923// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4924
ab78acc6
IC
4925// a duplex stream is just a stream that is both readable and writable.
4926// Since JS doesn't have multiple prototypal inheritance, this class
4927// prototypally inherits from Readable, and then parasitically from
4928// Writable.
ebd8d4e8 4929
ab78acc6 4930module.exports = Duplex;
ebd8d4e8 4931
ab78acc6
IC
4932/*<replacement>*/
4933var objectKeys = Object.keys || function (obj) {
4934 var keys = [];
4935 for (var key in obj) keys.push(key);
4936 return keys;
ebd8d4e8 4937}
ab78acc6 4938/*</replacement>*/
ebd8d4e8 4939
ebd8d4e8 4940
ab78acc6
IC
4941/*<replacement>*/
4942var util = require('core-util-is');
4943util.inherits = require('inherits');
4944/*</replacement>*/
ebd8d4e8 4945
ab78acc6
IC
4946var Readable = require('./_stream_readable');
4947var Writable = require('./_stream_writable');
ebd8d4e8 4948
ab78acc6 4949util.inherits(Duplex, Readable);
ebd8d4e8 4950
ab78acc6
IC
4951forEach(objectKeys(Writable.prototype), function(method) {
4952 if (!Duplex.prototype[method])
4953 Duplex.prototype[method] = Writable.prototype[method];
4954});
ebd8d4e8 4955
ab78acc6
IC
4956function Duplex(options) {
4957 if (!(this instanceof Duplex))
4958 return new Duplex(options);
ebd8d4e8 4959
ab78acc6
IC
4960 Readable.call(this, options);
4961 Writable.call(this, options);
ebd8d4e8 4962
ab78acc6
IC
4963 if (options && options.readable === false)
4964 this.readable = false;
ebd8d4e8 4965
ab78acc6
IC
4966 if (options && options.writable === false)
4967 this.writable = false;
ebd8d4e8 4968
ab78acc6
IC
4969 this.allowHalfOpen = true;
4970 if (options && options.allowHalfOpen === false)
4971 this.allowHalfOpen = false;
ebd8d4e8 4972
ab78acc6 4973 this.once('end', onend);
ebd8d4e8
IC
4974}
4975
ab78acc6
IC
4976// the no-half-open enforcer
4977function onend() {
4978 // if we allow half-open state, or if the writable side ended,
4979 // then we're ok.
4980 if (this.allowHalfOpen || this._writableState.ended)
4981 return;
ebd8d4e8 4982
ab78acc6
IC
4983 // no more data can be written.
4984 // But allow more writes to happen in this tick.
4985 process.nextTick(this.end.bind(this));
4986}
ebd8d4e8 4987
ab78acc6
IC
4988function forEach (xs, f) {
4989 for (var i = 0, l = xs.length; i < l; i++) {
4990 f(xs[i], i);
ebd8d4e8 4991 }
ab78acc6 4992}
ebd8d4e8 4993
ab78acc6
IC
4994}).call(this,require('_process'))
4995},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4996// Copyright Joyent, Inc. and other Node contributors.
4997//
4998// Permission is hereby granted, free of charge, to any person obtaining a
4999// copy of this software and associated documentation files (the
5000// "Software"), to deal in the Software without restriction, including
5001// without limitation the rights to use, copy, modify, merge, publish,
5002// distribute, sublicense, and/or sell copies of the Software, and to permit
5003// persons to whom the Software is furnished to do so, subject to the
5004// following conditions:
5005//
5006// The above copyright notice and this permission notice shall be included
5007// in all copies or substantial portions of the Software.
5008//
5009// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5010// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5011// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5012// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5013// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5014// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5015// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5016
ab78acc6
IC
5017// a passthrough stream.
5018// basically just the most minimal sort of Transform stream.
5019// Every written chunk gets output as-is.
ebd8d4e8 5020
ab78acc6 5021module.exports = PassThrough;
ebd8d4e8 5022
ab78acc6 5023var Transform = require('./_stream_transform');
ebd8d4e8 5024
ab78acc6
IC
5025/*<replacement>*/
5026var util = require('core-util-is');
5027util.inherits = require('inherits');
5028/*</replacement>*/
ebd8d4e8 5029
ab78acc6 5030util.inherits(PassThrough, Transform);
ebd8d4e8 5031
ab78acc6
IC
5032function PassThrough(options) {
5033 if (!(this instanceof PassThrough))
5034 return new PassThrough(options);
ebd8d4e8 5035
ab78acc6
IC
5036 Transform.call(this, options);
5037}
ebd8d4e8 5038
ab78acc6
IC
5039PassThrough.prototype._transform = function(chunk, encoding, cb) {
5040 cb(null, chunk);
ebd8d4e8
IC
5041};
5042
ab78acc6
IC
5043},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5044(function (process){
ebd8d4e8
IC
5045// Copyright Joyent, Inc. and other Node contributors.
5046//
5047// Permission is hereby granted, free of charge, to any person obtaining a
5048// copy of this software and associated documentation files (the
5049// "Software"), to deal in the Software without restriction, including
5050// without limitation the rights to use, copy, modify, merge, publish,
5051// distribute, sublicense, and/or sell copies of the Software, and to permit
5052// persons to whom the Software is furnished to do so, subject to the
5053// following conditions:
5054//
5055// The above copyright notice and this permission notice shall be included
5056// in all copies or substantial portions of the Software.
5057//
5058// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5059// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5060// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5061// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5062// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5063// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5064// USE OR OTHER DEALINGS IN THE SOFTWARE.
5065
ab78acc6 5066module.exports = Readable;
ebd8d4e8 5067
ab78acc6
IC
5068/*<replacement>*/
5069var isArray = require('isarray');
5070/*</replacement>*/
5071
5072
5073/*<replacement>*/
5074var Buffer = require('buffer').Buffer;
5075/*</replacement>*/
5076
5077Readable.ReadableState = ReadableState;
5078
5079var EE = require('events').EventEmitter;
5080
5081/*<replacement>*/
5082if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5083 return emitter.listeners(type).length;
ebd8d4e8 5084};
ab78acc6
IC
5085/*</replacement>*/
5086
5087var Stream = require('stream');
5088
5089/*<replacement>*/
5090var util = require('core-util-is');
5091util.inherits = require('inherits');
5092/*</replacement>*/
5093
5094var StringDecoder;
5095
5096
5097/*<replacement>*/
5098var debug = require('util');
5099if (debug && debug.debuglog) {
5100 debug = debug.debuglog('stream');
5101} else {
5102 debug = function () {};
5103}
5104/*</replacement>*/
5105
5106
5107util.inherits(Readable, Stream);
5108
5109function ReadableState(options, stream) {
5110 var Duplex = require('./_stream_duplex');
5111
5112 options = options || {};
5113
5114 // the point at which it stops calling _read() to fill the buffer
5115 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5116 var hwm = options.highWaterMark;
5117 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5118 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5119
5120 // cast to ints.
5121 this.highWaterMark = ~~this.highWaterMark;
5122
5123 this.buffer = [];
5124 this.length = 0;
5125 this.pipes = null;
5126 this.pipesCount = 0;
5127 this.flowing = null;
5128 this.ended = false;
5129 this.endEmitted = false;
5130 this.reading = false;
ebd8d4e8 5131
ab78acc6
IC
5132 // a flag to be able to tell if the onwrite cb is called immediately,
5133 // or on a later tick. We set this to true at first, because any
5134 // actions that shouldn't happen until "later" should generally also
5135 // not happen before the first write call.
5136 this.sync = true;
ebd8d4e8 5137
ab78acc6
IC
5138 // whenever we return null, then we set a flag to say
5139 // that we're awaiting a 'readable' event emission.
5140 this.needReadable = false;
5141 this.emittedReadable = false;
5142 this.readableListening = false;
ebd8d4e8 5143
ab78acc6
IC
5144
5145 // object stream flag. Used to make read(n) ignore n and to
5146 // make all the buffer merging and length checks go away
5147 this.objectMode = !!options.objectMode;
5148
5149 if (stream instanceof Duplex)
5150 this.objectMode = this.objectMode || !!options.readableObjectMode;
5151
5152 // Crypto is kind of old and crusty. Historically, its default string
5153 // encoding is 'binary' so we have to make this configurable.
5154 // Everything else in the universe uses 'utf8', though.
5155 this.defaultEncoding = options.defaultEncoding || 'utf8';
5156
5157 // when piping, we only care about 'readable' events that happen
5158 // after read()ing all the bytes and not getting any pushback.
5159 this.ranOut = false;
5160
5161 // the number of writers that are awaiting a drain event in .pipe()s
5162 this.awaitDrain = 0;
5163
5164 // if true, a maybeReadMore has been scheduled
5165 this.readingMore = false;
5166
5167 this.decoder = null;
5168 this.encoding = null;
5169 if (options.encoding) {
5170 if (!StringDecoder)
5171 StringDecoder = require('string_decoder/').StringDecoder;
5172 this.decoder = new StringDecoder(options.encoding);
5173 this.encoding = options.encoding;
ebd8d4e8 5174 }
ab78acc6 5175}
ebd8d4e8 5176
ab78acc6
IC
5177function Readable(options) {
5178 var Duplex = require('./_stream_duplex');
5179
5180 if (!(this instanceof Readable))
5181 return new Readable(options);
5182
5183 this._readableState = new ReadableState(options, this);
5184
5185 // legacy
5186 this.readable = true;
5187
5188 Stream.call(this);
5189}
5190
5191// Manually shove something into the read() buffer.
5192// This returns true if the highWaterMark has not been hit yet,
5193// similar to how Writable.write() returns true if you should
5194// write() some more.
5195Readable.prototype.push = function(chunk, encoding) {
5196 var state = this._readableState;
5197
5198 if (util.isString(chunk) && !state.objectMode) {
5199 encoding = encoding || state.defaultEncoding;
5200 if (encoding !== state.encoding) {
5201 chunk = new Buffer(chunk, encoding);
5202 encoding = '';
ebd8d4e8 5203 }
ebd8d4e8
IC
5204 }
5205
ab78acc6 5206 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5207};
5208
ab78acc6
IC
5209// Unshift should *always* be something directly out of read()
5210Readable.prototype.unshift = function(chunk) {
5211 var state = this._readableState;
5212 return readableAddChunk(this, state, chunk, '', true);
5213};
ebd8d4e8 5214
ab78acc6
IC
5215function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5216 var er = chunkInvalid(state, chunk);
5217 if (er) {
5218 stream.emit('error', er);
5219 } else if (util.isNullOrUndefined(chunk)) {
5220 state.reading = false;
5221 if (!state.ended)
5222 onEofChunk(stream, state);
5223 } else if (state.objectMode || chunk && chunk.length > 0) {
5224 if (state.ended && !addToFront) {
5225 var e = new Error('stream.push() after EOF');
5226 stream.emit('error', e);
5227 } else if (state.endEmitted && addToFront) {
5228 var e = new Error('stream.unshift() after end event');
5229 stream.emit('error', e);
ebd8d4e8 5230 } else {
ab78acc6
IC
5231 if (state.decoder && !addToFront && !encoding)
5232 chunk = state.decoder.write(chunk);
5233
5234 if (!addToFront)
5235 state.reading = false;
5236
5237 // if we want the data now, just emit it.
5238 if (state.flowing && state.length === 0 && !state.sync) {
5239 stream.emit('data', chunk);
5240 stream.read(0);
5241 } else {
5242 // update the buffer info.
5243 state.length += state.objectMode ? 1 : chunk.length;
5244 if (addToFront)
5245 state.buffer.unshift(chunk);
5246 else
5247 state.buffer.push(chunk);
5248
5249 if (state.needReadable)
5250 emitReadable(stream);
5251 }
5252
5253 maybeReadMore(stream, state);
ebd8d4e8 5254 }
ab78acc6
IC
5255 } else if (!addToFront) {
5256 state.reading = false;
ebd8d4e8 5257 }
ebd8d4e8 5258
ab78acc6
IC
5259 return needMoreData(state);
5260}
ebd8d4e8 5261
ab78acc6
IC
5262
5263
5264// if it's past the high water mark, we can push in some more.
5265// Also, if we have no data yet, we can stand some
5266// more bytes. This is to work around cases where hwm=0,
5267// such as the repl. Also, if the push() triggered a
5268// readable event, and the user called read(largeNumber) such that
5269// needReadable was set, then we ought to push more, so that another
5270// 'readable' event will be triggered.
5271function needMoreData(state) {
5272 return !state.ended &&
5273 (state.needReadable ||
5274 state.length < state.highWaterMark ||
5275 state.length === 0);
5276}
5277
5278// backwards compatibility.
5279Readable.prototype.setEncoding = function(enc) {
5280 if (!StringDecoder)
5281 StringDecoder = require('string_decoder/').StringDecoder;
5282 this._readableState.decoder = new StringDecoder(enc);
5283 this._readableState.encoding = enc;
5284 return this;
5285};
5286
5287// Don't raise the hwm > 128MB
5288var MAX_HWM = 0x800000;
5289function roundUpToNextPowerOf2(n) {
5290 if (n >= MAX_HWM) {
5291 n = MAX_HWM;
5292 } else {
5293 // Get the next highest power of 2
5294 n--;
5295 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5296 n++;
ebd8d4e8 5297 }
ab78acc6 5298 return n;
ebd8d4e8 5299}
ebd8d4e8 5300
ab78acc6
IC
5301function howMuchToRead(n, state) {
5302 if (state.length === 0 && state.ended)
5303 return 0;
ebd8d4e8 5304
ab78acc6
IC
5305 if (state.objectMode)
5306 return n === 0 ? 0 : 1;
ebd8d4e8 5307
ab78acc6
IC
5308 if (isNaN(n) || util.isNull(n)) {
5309 // only flow one buffer at a time
5310 if (state.flowing && state.buffer.length)
5311 return state.buffer[0].length;
5312 else
5313 return state.length;
5314 }
ebd8d4e8 5315
ab78acc6
IC
5316 if (n <= 0)
5317 return 0;
ebd8d4e8 5318
ab78acc6
IC
5319 // If we're asking for more than the target buffer level,
5320 // then raise the water mark. Bump up to the next highest
5321 // power of 2, to prevent increasing it excessively in tiny
5322 // amounts.
5323 if (n > state.highWaterMark)
5324 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5325
ab78acc6
IC
5326 // don't have that much. return null, unless we've ended.
5327 if (n > state.length) {
5328 if (!state.ended) {
5329 state.needReadable = true;
5330 return 0;
5331 } else
5332 return state.length;
ebd8d4e8 5333 }
ab78acc6
IC
5334
5335 return n;
ebd8d4e8
IC
5336}
5337
ab78acc6
IC
5338// you can override either this method, or the async _read(n) below.
5339Readable.prototype.read = function(n) {
5340 debug('read', n);
5341 var state = this._readableState;
5342 var nOrig = n;
ebd8d4e8 5343
ab78acc6
IC
5344 if (!util.isNumber(n) || n > 0)
5345 state.emittedReadable = false;
5346
5347 // if we're doing read(0) to trigger a readable event, but we
5348 // already have a bunch of data in the buffer, then just trigger
5349 // the 'readable' event and move on.
5350 if (n === 0 &&
5351 state.needReadable &&
5352 (state.length >= state.highWaterMark || state.ended)) {
5353 debug('read: emitReadable', state.length, state.ended);
5354 if (state.length === 0 && state.ended)
5355 endReadable(this);
5356 else
5357 emitReadable(this);
5358 return null;
5359 }
5360
5361 n = howMuchToRead(n, state);
5362
5363 // if we've ended, and we're now clear, then finish it up.
5364 if (n === 0 && state.ended) {
5365 if (state.length === 0)
5366 endReadable(this);
5367 return null;
5368 }
5369
5370 // All the actual chunk generation logic needs to be
5371 // *below* the call to _read. The reason is that in certain
5372 // synthetic stream cases, such as passthrough streams, _read
5373 // may be a completely synchronous operation which may change
5374 // the state of the read buffer, providing enough data when
5375 // before there was *not* enough.
5376 //
5377 // So, the steps are:
5378 // 1. Figure out what the state of things will be after we do
5379 // a read from the buffer.
5380 //
5381 // 2. If that resulting state will trigger a _read, then call _read.
5382 // Note that this may be asynchronous, or synchronous. Yes, it is
5383 // deeply ugly to write APIs this way, but that still doesn't mean
5384 // that the Readable class should behave improperly, as streams are
5385 // designed to be sync/async agnostic.
5386 // Take note if the _read call is sync or async (ie, if the read call
5387 // has returned yet), so that we know whether or not it's safe to emit
5388 // 'readable' etc.
5389 //
5390 // 3. Actually pull the requested chunks out of the buffer and return.
5391
5392 // if we need a readable event, then we need to do some reading.
5393 var doRead = state.needReadable;
5394 debug('need readable', doRead);
5395
5396 // if we currently have less than the highWaterMark, then also read some
5397 if (state.length === 0 || state.length - n < state.highWaterMark) {
5398 doRead = true;
5399 debug('length less than watermark', doRead);
5400 }
5401
5402 // however, if we've ended, then there's no point, and if we're already
5403 // reading, then it's unnecessary.
5404 if (state.ended || state.reading) {
5405 doRead = false;
5406 debug('reading or ended', doRead);
5407 }
5408
5409 if (doRead) {
5410 debug('do read');
5411 state.reading = true;
5412 state.sync = true;
5413 // if the length is currently zero, then we *need* a readable event.
5414 if (state.length === 0)
5415 state.needReadable = true;
5416 // call internal read method
5417 this._read(state.highWaterMark);
5418 state.sync = false;
5419 }
5420
5421 // If _read pushed data synchronously, then `reading` will be false,
5422 // and we need to re-evaluate how much data we can return to the user.
5423 if (doRead && !state.reading)
5424 n = howMuchToRead(nOrig, state);
5425
5426 var ret;
5427 if (n > 0)
5428 ret = fromList(n, state);
5429 else
5430 ret = null;
ebd8d4e8 5431
ab78acc6
IC
5432 if (util.isNull(ret)) {
5433 state.needReadable = true;
5434 n = 0;
5435 }
ebd8d4e8 5436
ab78acc6 5437 state.length -= n;
ebd8d4e8 5438
ab78acc6
IC
5439 // If we have nothing in the buffer, then we want to know
5440 // as soon as we *do* get something into the buffer.
5441 if (state.length === 0 && !state.ended)
5442 state.needReadable = true;
ebd8d4e8 5443
ab78acc6
IC
5444 // If we tried to read() past the EOF, then emit end on the next tick.
5445 if (nOrig !== n && state.ended && state.length === 0)
5446 endReadable(this);
5447
5448 if (!util.isNull(ret))
5449 this.emit('data', ret);
5450
5451 return ret;
5452};
5453
5454function chunkInvalid(state, chunk) {
5455 var er = null;
5456 if (!util.isBuffer(chunk) &&
5457 !util.isString(chunk) &&
5458 !util.isNullOrUndefined(chunk) &&
5459 !state.objectMode) {
5460 er = new TypeError('Invalid non-string/buffer chunk');
5461 }
5462 return er;
ebd8d4e8
IC
5463}
5464
5465
ab78acc6
IC
5466function onEofChunk(stream, state) {
5467 if (state.decoder && !state.ended) {
5468 var chunk = state.decoder.end();
5469 if (chunk && chunk.length) {
5470 state.buffer.push(chunk);
5471 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5472 }
ebd8d4e8 5473 }
ab78acc6 5474 state.ended = true;
ebd8d4e8 5475
ab78acc6
IC
5476 // emit 'readable' now to make sure it gets picked up.
5477 emitReadable(stream);
5478}
5479
5480// Don't emit readable right away in sync mode, because this can trigger
5481// another read() call => stack overflow. This way, it might trigger
5482// a nextTick recursion warning, but that's not so bad.
5483function emitReadable(stream) {
5484 var state = stream._readableState;
5485 state.needReadable = false;
5486 if (!state.emittedReadable) {
5487 debug('emitReadable', state.flowing);
5488 state.emittedReadable = true;
5489 if (state.sync)
5490 process.nextTick(function() {
5491 emitReadable_(stream);
5492 });
5493 else
5494 emitReadable_(stream);
ebd8d4e8 5495 }
ab78acc6 5496}
ebd8d4e8 5497
ab78acc6
IC
5498function emitReadable_(stream) {
5499 debug('emit readable');
5500 stream.emit('readable');
5501 flow(stream);
5502}
ebd8d4e8 5503
ab78acc6
IC
5504
5505// at this point, the user has presumably seen the 'readable' event,
5506// and called read() to consume some data. that may have triggered
5507// in turn another _read(n) call, in which case reading = true if
5508// it's in progress.
5509// However, if we're not ended, or reading, and the length < hwm,
5510// then go ahead and try to read some more preemptively.
5511function maybeReadMore(stream, state) {
5512 if (!state.readingMore) {
5513 state.readingMore = true;
5514 process.nextTick(function() {
5515 maybeReadMore_(stream, state);
5516 });
ebd8d4e8 5517 }
ab78acc6 5518}
ebd8d4e8 5519
ab78acc6
IC
5520function maybeReadMore_(stream, state) {
5521 var len = state.length;
5522 while (!state.reading && !state.flowing && !state.ended &&
5523 state.length < state.highWaterMark) {
5524 debug('maybeReadMore read 0');
5525 stream.read(0);
5526 if (len === state.length)
5527 // didn't get any data, stop spinning.
5528 break;
5529 else
5530 len = state.length;
ebd8d4e8 5531 }
ab78acc6
IC
5532 state.readingMore = false;
5533}
ebd8d4e8 5534
ab78acc6
IC
5535// abstract method. to be overridden in specific implementation classes.
5536// call cb(er, data) where data is <= n in length.
5537// for virtual (non-string, non-buffer) streams, "length" is somewhat
5538// arbitrary, and perhaps not very meaningful.
5539Readable.prototype._read = function(n) {
5540 this.emit('error', new Error('not implemented'));
5541};
5542
5543Readable.prototype.pipe = function(dest, pipeOpts) {
5544 var src = this;
5545 var state = this._readableState;
5546
5547 switch (state.pipesCount) {
5548 case 0:
5549 state.pipes = dest;
5550 break;
5551 case 1:
5552 state.pipes = [state.pipes, dest];
5553 break;
5554 default:
5555 state.pipes.push(dest);
5556 break;
ebd8d4e8 5557 }
ab78acc6
IC
5558 state.pipesCount += 1;
5559 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5560
ab78acc6
IC
5561 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5562 dest !== process.stdout &&
5563 dest !== process.stderr;
ebd8d4e8 5564
ab78acc6
IC
5565 var endFn = doEnd ? onend : cleanup;
5566 if (state.endEmitted)
5567 process.nextTick(endFn);
5568 else
5569 src.once('end', endFn);
5570
5571 dest.on('unpipe', onunpipe);
5572 function onunpipe(readable) {
5573 debug('onunpipe');
5574 if (readable === src) {
5575 cleanup();
5576 }
5577 }
5578
5579 function onend() {
5580 debug('onend');
5581 dest.end();
5582 }
5583
5584 // when the dest drains, it reduces the awaitDrain counter
5585 // on the source. This would be more elegant with a .once()
5586 // handler in flow(), but adding and removing repeatedly is
5587 // too slow.
5588 var ondrain = pipeOnDrain(src);
5589 dest.on('drain', ondrain);
5590
5591 function cleanup() {
5592 debug('cleanup');
5593 // cleanup event handlers once the pipe is broken
5594 dest.removeListener('close', onclose);
5595 dest.removeListener('finish', onfinish);
5596 dest.removeListener('drain', ondrain);
5597 dest.removeListener('error', onerror);
5598 dest.removeListener('unpipe', onunpipe);
5599 src.removeListener('end', onend);
5600 src.removeListener('end', cleanup);
5601 src.removeListener('data', ondata);
5602
5603 // if the reader is waiting for a drain event from this
5604 // specific writer, then it would cause it to never start
5605 // flowing again.
5606 // So, if this is awaiting a drain, then we just call it now.
5607 // If we don't know, then assume that we are waiting for one.
5608 if (state.awaitDrain &&
5609 (!dest._writableState || dest._writableState.needDrain))
5610 ondrain();
5611 }
5612
5613 src.on('data', ondata);
5614 function ondata(chunk) {
5615 debug('ondata');
5616 var ret = dest.write(chunk);
5617 if (false === ret) {
5618 debug('false write response, pause',
5619 src._readableState.awaitDrain);
5620 src._readableState.awaitDrain++;
5621 src.pause();
5622 }
5623 }
5624
5625 // if the dest has an error, then stop piping into it.
5626 // however, don't suppress the throwing behavior for this.
5627 function onerror(er) {
5628 debug('onerror', er);
5629 unpipe();
5630 dest.removeListener('error', onerror);
5631 if (EE.listenerCount(dest, 'error') === 0)
5632 dest.emit('error', er);
5633 }
5634 // This is a brutally ugly hack to make sure that our error handler
5635 // is attached before any userland ones. NEVER DO THIS.
5636 if (!dest._events || !dest._events.error)
5637 dest.on('error', onerror);
5638 else if (isArray(dest._events.error))
5639 dest._events.error.unshift(onerror);
5640 else
5641 dest._events.error = [onerror, dest._events.error];
5642
5643
5644
5645 // Both close and finish should trigger unpipe, but only once.
5646 function onclose() {
5647 dest.removeListener('finish', onfinish);
5648 unpipe();
ebd8d4e8 5649 }
ab78acc6
IC
5650 dest.once('close', onclose);
5651 function onfinish() {
5652 debug('onfinish');
5653 dest.removeListener('close', onclose);
5654 unpipe();
5655 }
5656 dest.once('finish', onfinish);
ebd8d4e8 5657
ab78acc6
IC
5658 function unpipe() {
5659 debug('unpipe');
5660 src.unpipe(dest);
ebd8d4e8
IC
5661 }
5662
ab78acc6
IC
5663 // tell the dest that it's being piped to
5664 dest.emit('pipe', src);
5665
5666 // start the flow if it hasn't been started already.
5667 if (!state.flowing) {
5668 debug('pipe resume');
5669 src.resume();
ebd8d4e8
IC
5670 }
5671
ab78acc6
IC
5672 return dest;
5673};
5674
5675function pipeOnDrain(src) {
5676 return function() {
5677 var state = src._readableState;
5678 debug('pipeOnDrain', state.awaitDrain);
5679 if (state.awaitDrain)
5680 state.awaitDrain--;
5681 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5682 state.flowing = true;
5683 flow(src);
5684 }
5685 };
5686}
5687
5688
5689Readable.prototype.unpipe = function(dest) {
5690 var state = this._readableState;
5691
5692 // if we're not piping anywhere, then do nothing.
5693 if (state.pipesCount === 0)
5694 return this;
5695
5696 // just one destination. most common case.
5697 if (state.pipesCount === 1) {
5698 // passed in one, but it's not the right one.
5699 if (dest && dest !== state.pipes)
5700 return this;
5701
5702 if (!dest)
5703 dest = state.pipes;
5704
5705 // got a match.
5706 state.pipes = null;
5707 state.pipesCount = 0;
5708 state.flowing = false;
5709 if (dest)
5710 dest.emit('unpipe', this);
5711 return this;
ebd8d4e8
IC
5712 }
5713
ab78acc6
IC
5714 // slow case. multiple pipe destinations.
5715
5716 if (!dest) {
5717 // remove all.
5718 var dests = state.pipes;
5719 var len = state.pipesCount;
5720 state.pipes = null;
5721 state.pipesCount = 0;
5722 state.flowing = false;
5723
5724 for (var i = 0; i < len; i++)
5725 dests[i].emit('unpipe', this);
5726 return this;
ebd8d4e8
IC
5727 }
5728
ab78acc6
IC
5729 // try to find the right one.
5730 var i = indexOf(state.pipes, dest);
5731 if (i === -1)
5732 return this;
5733
5734 state.pipes.splice(i, 1);
5735 state.pipesCount -= 1;
5736 if (state.pipesCount === 1)
5737 state.pipes = state.pipes[0];
5738
5739 dest.emit('unpipe', this);
ebd8d4e8 5740
ab78acc6
IC
5741 return this;
5742};
5743
5744// set up data events if they are asked for
5745// Ensure readable listeners eventually get something
5746Readable.prototype.on = function(ev, fn) {
5747 var res = Stream.prototype.on.call(this, ev, fn);
5748
5749 // If listening to data, and it has not explicitly been paused,
5750 // then call resume to start the flow of data on the next tick.
5751 if (ev === 'data' && false !== this._readableState.flowing) {
5752 this.resume();
5753 }
5754
5755 if (ev === 'readable' && this.readable) {
5756 var state = this._readableState;
5757 if (!state.readableListening) {
5758 state.readableListening = true;
5759 state.emittedReadable = false;
5760 state.needReadable = true;
5761 if (!state.reading) {
5762 var self = this;
5763 process.nextTick(function() {
5764 debug('readable nexttick read 0');
5765 self.read(0);
5766 });
5767 } else if (state.length) {
5768 emitReadable(this, state);
5769 }
ebd8d4e8
IC
5770 }
5771 }
5772
ab78acc6
IC
5773 return res;
5774};
5775Readable.prototype.addListener = Readable.prototype.on;
5776
5777// pause() and resume() are remnants of the legacy readable stream API
5778// If the user uses them, then switch into old mode.
5779Readable.prototype.resume = function() {
5780 var state = this._readableState;
5781 if (!state.flowing) {
5782 debug('resume');
5783 state.flowing = true;
5784 if (!state.reading) {
5785 debug('resume read 0');
5786 this.read(0);
5787 }
5788 resume(this, state);
5789 }
5790 return this;
5791};
ebd8d4e8 5792
ab78acc6
IC
5793function resume(stream, state) {
5794 if (!state.resumeScheduled) {
5795 state.resumeScheduled = true;
5796 process.nextTick(function() {
5797 resume_(stream, state);
ebd8d4e8
IC
5798 });
5799 }
ebd8d4e8
IC
5800}
5801
ab78acc6
IC
5802function resume_(stream, state) {
5803 state.resumeScheduled = false;
5804 stream.emit('resume');
5805 flow(stream);
5806 if (state.flowing && !state.reading)
5807 stream.read(0);
ebd8d4e8
IC
5808}
5809
ab78acc6
IC
5810Readable.prototype.pause = function() {
5811 debug('call pause flowing=%j', this._readableState.flowing);
5812 if (false !== this._readableState.flowing) {
5813 debug('pause');
5814 this._readableState.flowing = false;
5815 this.emit('pause');
5816 }
5817 return this;
5818};
ebd8d4e8 5819
ab78acc6
IC
5820function flow(stream) {
5821 var state = stream._readableState;
5822 debug('flow', state.flowing);
5823 if (state.flowing) {
5824 do {
5825 var chunk = stream.read();
5826 } while (null !== chunk && state.flowing);
5827 }
ebd8d4e8
IC
5828}
5829
ab78acc6
IC
5830// wrap an old-style stream as the async data source.
5831// This is *not* part of the readable stream interface.
5832// It is an ugly unfortunate mess of history.
5833Readable.prototype.wrap = function(stream) {
5834 var state = this._readableState;
5835 var paused = false;
ebd8d4e8 5836
ab78acc6
IC
5837 var self = this;
5838 stream.on('end', function() {
5839 debug('wrapped end');
5840 if (state.decoder && !state.ended) {
5841 var chunk = state.decoder.end();
5842 if (chunk && chunk.length)
5843 self.push(chunk);
ebd8d4e8 5844 }
ab78acc6
IC
5845
5846 self.push(null);
ebd8d4e8 5847 });
ebd8d4e8 5848
ab78acc6
IC
5849 stream.on('data', function(chunk) {
5850 debug('wrapped data');
5851 if (state.decoder)
5852 chunk = state.decoder.write(chunk);
5853 if (!chunk || !state.objectMode && !chunk.length)
5854 return;
ebd8d4e8 5855
ab78acc6
IC
5856 var ret = self.push(chunk);
5857 if (!ret) {
5858 paused = true;
5859 stream.pause();
ebd8d4e8 5860 }
ab78acc6
IC
5861 });
5862
5863 // proxy all the other methods.
5864 // important when wrapping filters and duplexes.
5865 for (var i in stream) {
5866 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5867 this[i] = function(method) { return function() {
5868 return stream[method].apply(stream, arguments);
5869 }}(i);
ebd8d4e8
IC
5870 }
5871 }
ab78acc6
IC
5872
5873 // proxy certain important events.
5874 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5875 forEach(events, function(ev) {
5876 stream.on(ev, self.emit.bind(self, ev));
5877 });
5878
5879 // when we try to consume some more bytes, simply unpause the
5880 // underlying stream.
5881 self._read = function(n) {
5882 debug('wrapped _read', n);
5883 if (paused) {
5884 paused = false;
5885 stream.resume();
ebd8d4e8 5886 }
ab78acc6
IC
5887 };
5888
5889 return self;
5890};
5891
5892
5893
5894// exposed for testing purposes only.
5895Readable._fromList = fromList;
5896
5897// Pluck off n bytes from an array of buffers.
5898// Length is the combined lengths of all the buffers in the list.
5899function fromList(n, state) {
5900 var list = state.buffer;
5901 var length = state.length;
5902 var stringMode = !!state.decoder;
5903 var objectMode = !!state.objectMode;
5904 var ret;
5905
5906 // nothing in the list, definitely empty.
5907 if (list.length === 0)
5908 return null;
5909
5910 if (length === 0)
5911 ret = null;
5912 else if (objectMode)
5913 ret = list.shift();
5914 else if (!n || n >= length) {
5915 // read it all, truncate the array.
5916 if (stringMode)
5917 ret = list.join('');
5918 else
5919 ret = Buffer.concat(list, length);
5920 list.length = 0;
5921 } else {
5922 // read just some of it.
5923 if (n < list[0].length) {
5924 // just take a part of the first list item.
5925 // slice is the same for buffers and strings.
5926 var buf = list[0];
5927 ret = buf.slice(0, n);
5928 list[0] = buf.slice(n);
5929 } else if (n === list[0].length) {
5930 // first list is a perfect match
5931 ret = list.shift();
ebd8d4e8 5932 } else {
ab78acc6
IC
5933 // complex case.
5934 // we have enough to cover it, but it spans past the first buffer.
5935 if (stringMode)
5936 ret = '';
5937 else
5938 ret = new Buffer(n);
ebd8d4e8 5939
ab78acc6
IC
5940 var c = 0;
5941 for (var i = 0, l = list.length; i < l && c < n; i++) {
5942 var buf = list[0];
5943 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5944
ab78acc6
IC
5945 if (stringMode)
5946 ret += buf.slice(0, cpy);
5947 else
5948 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5949
ab78acc6
IC
5950 if (cpy < buf.length)
5951 list[0] = buf.slice(cpy);
5952 else
5953 list.shift();
ebd8d4e8 5954
ab78acc6
IC
5955 c += cpy;
5956 }
5957 }
ebd8d4e8
IC
5958 }
5959
ab78acc6 5960 return ret;
ebd8d4e8
IC
5961}
5962
ab78acc6
IC
5963function endReadable(stream) {
5964 var state = stream._readableState;
ebd8d4e8 5965
ab78acc6
IC
5966 // If we get here before consuming all the bytes, then that is a
5967 // bug in node. Should never happen.
5968 if (state.length > 0)
5969 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5970
ab78acc6
IC
5971 if (!state.endEmitted) {
5972 state.ended = true;
5973 process.nextTick(function() {
5974 // Check that we didn't get one last unshift.
5975 if (!state.endEmitted && state.length === 0) {
5976 state.endEmitted = true;
5977 stream.readable = false;
5978 stream.emit('end');
5979 }
5980 });
5981 }
ebd8d4e8 5982}
ebd8d4e8 5983
ab78acc6
IC
5984function forEach (xs, f) {
5985 for (var i = 0, l = xs.length; i < l; i++) {
5986 f(xs[i], i);
5987 }
ebd8d4e8 5988}
ebd8d4e8 5989
ab78acc6
IC
5990function indexOf (xs, x) {
5991 for (var i = 0, l = xs.length; i < l; i++) {
5992 if (xs[i] === x) return i;
5993 }
5994 return -1;
ebd8d4e8 5995}
ebd8d4e8 5996
ab78acc6
IC
5997}).call(this,require('_process'))
5998},{"./_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){
5999// Copyright Joyent, Inc. and other Node contributors.
6000//
6001// Permission is hereby granted, free of charge, to any person obtaining a
6002// copy of this software and associated documentation files (the
6003// "Software"), to deal in the Software without restriction, including
6004// without limitation the rights to use, copy, modify, merge, publish,
6005// distribute, sublicense, and/or sell copies of the Software, and to permit
6006// persons to whom the Software is furnished to do so, subject to the
6007// following conditions:
6008//
6009// The above copyright notice and this permission notice shall be included
6010// in all copies or substantial portions of the Software.
6011//
6012// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6013// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6014// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6015// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6016// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6017// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6018// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6019
ebd8d4e8 6020
ab78acc6
IC
6021// a transform stream is a readable/writable stream where you do
6022// something with the data. Sometimes it's called a "filter",
6023// but that's not a great name for it, since that implies a thing where
6024// some bits pass through, and others are simply ignored. (That would
6025// be a valid example of a transform, of course.)
6026//
6027// While the output is causally related to the input, it's not a
6028// necessarily symmetric or synchronous transformation. For example,
6029// a zlib stream might take multiple plain-text writes(), and then
6030// emit a single compressed chunk some time in the future.
6031//
6032// Here's how this works:
6033//
6034// The Transform stream has all the aspects of the readable and writable
6035// stream classes. When you write(chunk), that calls _write(chunk,cb)
6036// internally, and returns false if there's a lot of pending writes
6037// buffered up. When you call read(), that calls _read(n) until
6038// there's enough pending readable data buffered up.
6039//
6040// In a transform stream, the written data is placed in a buffer. When
6041// _read(n) is called, it transforms the queued up data, calling the
6042// buffered _write cb's as it consumes chunks. If consuming a single
6043// written chunk would result in multiple output chunks, then the first
6044// outputted bit calls the readcb, and subsequent chunks just go into
6045// the read buffer, and will cause it to emit 'readable' if necessary.
6046//
6047// This way, back-pressure is actually determined by the reading side,
6048// since _read has to be called to start processing a new chunk. However,
6049// a pathological inflate type of transform can cause excessive buffering
6050// here. For example, imagine a stream where every byte of input is
6051// interpreted as an integer from 0-255, and then results in that many
6052// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6053// 1kb of data being output. In this case, you could write a very small
6054// amount of input, and end up with a very large amount of output. In
6055// such a pathological inflating mechanism, there'd be no way to tell
6056// the system to stop doing the transform. A single 4MB write could
6057// cause the system to run out of memory.
6058//
6059// However, even in such a pathological case, only a single written chunk
6060// would be consumed, and then the rest would wait (un-transformed) until
6061// the results of the previous transformed chunk were consumed.
ebd8d4e8 6062
ab78acc6 6063module.exports = Transform;
ebd8d4e8 6064
ab78acc6 6065var Duplex = require('./_stream_duplex');
ebd8d4e8 6066
ab78acc6
IC
6067/*<replacement>*/
6068var util = require('core-util-is');
6069util.inherits = require('inherits');
6070/*</replacement>*/
6071
6072util.inherits(Transform, Duplex);
6073
6074
6075function TransformState(options, stream) {
6076 this.afterTransform = function(er, data) {
6077 return afterTransform(stream, er, data);
6078 };
6079
6080 this.needTransform = false;
6081 this.transforming = false;
6082 this.writecb = null;
6083 this.writechunk = null;
ebd8d4e8 6084}
ebd8d4e8 6085
ab78acc6
IC
6086function afterTransform(stream, er, data) {
6087 var ts = stream._transformState;
6088 ts.transforming = false;
6089
6090 var cb = ts.writecb;
6091
6092 if (!cb)
6093 return stream.emit('error', new Error('no writecb in Transform class'));
6094
6095 ts.writechunk = null;
6096 ts.writecb = null;
6097
6098 if (!util.isNullOrUndefined(data))
6099 stream.push(data);
6100
6101 if (cb)
6102 cb(er);
6103
6104 var rs = stream._readableState;
6105 rs.reading = false;
6106 if (rs.needReadable || rs.length < rs.highWaterMark) {
6107 stream._read(rs.highWaterMark);
6108 }
ebd8d4e8 6109}
ebd8d4e8 6110
ab78acc6
IC
6111
6112function Transform(options) {
6113 if (!(this instanceof Transform))
6114 return new Transform(options);
6115
6116 Duplex.call(this, options);
6117
6118 this._transformState = new TransformState(options, this);
6119
6120 // when the writable side finishes, then flush out anything remaining.
6121 var stream = this;
6122
6123 // start out asking for a readable event once data is transformed.
6124 this._readableState.needReadable = true;
6125
6126 // we have implemented the _read method, and done the other things
6127 // that Readable wants before the first _read call, so unset the
6128 // sync guard flag.
6129 this._readableState.sync = false;
6130
6131 this.once('prefinish', function() {
6132 if (util.isFunction(this._flush))
6133 this._flush(function(er) {
6134 done(stream, er);
6135 });
6136 else
6137 done(stream);
6138 });
ebd8d4e8 6139}
ebd8d4e8 6140
ab78acc6
IC
6141Transform.prototype.push = function(chunk, encoding) {
6142 this._transformState.needTransform = false;
6143 return Duplex.prototype.push.call(this, chunk, encoding);
6144};
6145
6146// This is the part where you do stuff!
6147// override this function in implementation classes.
6148// 'chunk' is an input chunk.
6149//
6150// Call `push(newChunk)` to pass along transformed output
6151// to the readable side. You may call 'push' zero or more times.
6152//
6153// Call `cb(err)` when you are done with this chunk. If you pass
6154// an error, then that'll put the hurt on the whole operation. If you
6155// never call cb(), then you'll never get another chunk.
6156Transform.prototype._transform = function(chunk, encoding, cb) {
6157 throw new Error('not implemented');
6158};
6159
6160Transform.prototype._write = function(chunk, encoding, cb) {
6161 var ts = this._transformState;
6162 ts.writecb = cb;
6163 ts.writechunk = chunk;
6164 ts.writeencoding = encoding;
6165 if (!ts.transforming) {
6166 var rs = this._readableState;
6167 if (ts.needTransform ||
6168 rs.needReadable ||
6169 rs.length < rs.highWaterMark)
6170 this._read(rs.highWaterMark);
6171 }
6172};
6173
6174// Doesn't matter what the args are here.
6175// _transform does all the work.
6176// That we got here means that the readable side wants more data.
6177Transform.prototype._read = function(n) {
6178 var ts = this._transformState;
ebd8d4e8 6179
ab78acc6
IC
6180 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6181 ts.transforming = true;
6182 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6183 } else {
6184 // mark that we need a transform, so that any data that comes in
6185 // will get processed, now that we've asked for it.
6186 ts.needTransform = true;
6187 }
6188};
ebd8d4e8 6189
ebd8d4e8 6190
ab78acc6
IC
6191function done(stream, er) {
6192 if (er)
6193 return stream.emit('error', er);
ebd8d4e8 6194
ab78acc6
IC
6195 // if there's nothing in the write buffer, then that means
6196 // that nothing more will ever be provided
6197 var ws = stream._writableState;
6198 var ts = stream._transformState;
ebd8d4e8 6199
ab78acc6
IC
6200 if (ws.length)
6201 throw new Error('calling transform done when ws.length != 0');
6202
6203 if (ts.transforming)
6204 throw new Error('calling transform done when still transforming');
6205
6206 return stream.push(null);
ebd8d4e8
IC
6207}
6208
ab78acc6
IC
6209},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6210(function (process){
6211// Copyright Joyent, Inc. and other Node contributors.
6212//
6213// Permission is hereby granted, free of charge, to any person obtaining a
6214// copy of this software and associated documentation files (the
6215// "Software"), to deal in the Software without restriction, including
6216// without limitation the rights to use, copy, modify, merge, publish,
6217// distribute, sublicense, and/or sell copies of the Software, and to permit
6218// persons to whom the Software is furnished to do so, subject to the
6219// following conditions:
6220//
6221// The above copyright notice and this permission notice shall be included
6222// in all copies or substantial portions of the Software.
6223//
6224// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6225// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6226// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6227// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6228// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6229// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6230// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6231
ab78acc6
IC
6232// A bit simpler than readable streams.
6233// Implement an async ._write(chunk, cb), and it'll handle all
6234// the drain event emission and buffering.
ebd8d4e8 6235
ab78acc6 6236module.exports = Writable;
ebd8d4e8 6237
ab78acc6
IC
6238/*<replacement>*/
6239var Buffer = require('buffer').Buffer;
6240/*</replacement>*/
ebd8d4e8 6241
ab78acc6 6242Writable.WritableState = WritableState;
ebd8d4e8
IC
6243
6244
ab78acc6
IC
6245/*<replacement>*/
6246var util = require('core-util-is');
6247util.inherits = require('inherits');
6248/*</replacement>*/
ebd8d4e8 6249
ab78acc6 6250var Stream = require('stream');
ebd8d4e8 6251
ab78acc6 6252util.inherits(Writable, Stream);
ebd8d4e8 6253
ab78acc6
IC
6254function WriteReq(chunk, encoding, cb) {
6255 this.chunk = chunk;
6256 this.encoding = encoding;
6257 this.callback = cb;
ebd8d4e8
IC
6258}
6259
ab78acc6
IC
6260function WritableState(options, stream) {
6261 var Duplex = require('./_stream_duplex');
ebd8d4e8 6262
ab78acc6 6263 options = options || {};
ebd8d4e8 6264
ab78acc6
IC
6265 // the point at which write() starts returning false
6266 // Note: 0 is a valid value, means that we always return false if
6267 // the entire buffer is not flushed immediately on write()
6268 var hwm = options.highWaterMark;
6269 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6270 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6271
ab78acc6
IC
6272 // object stream flag to indicate whether or not this stream
6273 // contains buffers or objects.
6274 this.objectMode = !!options.objectMode;
ebd8d4e8 6275
ab78acc6
IC
6276 if (stream instanceof Duplex)
6277 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6278
ab78acc6
IC
6279 // cast to ints.
6280 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6281
ab78acc6
IC
6282 this.needDrain = false;
6283 // at the start of calling end()
6284 this.ending = false;
6285 // when end() has been called, and returned
6286 this.ended = false;
6287 // when 'finish' is emitted
6288 this.finished = false;
ebd8d4e8 6289
ab78acc6
IC
6290 // should we decode strings into buffers before passing to _write?
6291 // this is here so that some node-core streams can optimize string
6292 // handling at a lower level.
6293 var noDecode = options.decodeStrings === false;
6294 this.decodeStrings = !noDecode;
ebd8d4e8 6295
ab78acc6
IC
6296 // Crypto is kind of old and crusty. Historically, its default string
6297 // encoding is 'binary' so we have to make this configurable.
6298 // Everything else in the universe uses 'utf8', though.
6299 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6300
ab78acc6
IC
6301 // not an actual buffer we keep track of, but a measurement
6302 // of how much we're waiting to get pushed to some underlying
6303 // socket or file.
6304 this.length = 0;
ebd8d4e8 6305
ab78acc6
IC
6306 // a flag to see when we're in the middle of a write.
6307 this.writing = false;
ebd8d4e8 6308
ab78acc6
IC
6309 // when true all writes will be buffered until .uncork() call
6310 this.corked = 0;
ebd8d4e8 6311
ab78acc6
IC
6312 // a flag to be able to tell if the onwrite cb is called immediately,
6313 // or on a later tick. We set this to true at first, because any
6314 // actions that shouldn't happen until "later" should generally also
6315 // not happen before the first write call.
6316 this.sync = true;
ebd8d4e8 6317
ab78acc6
IC
6318 // a flag to know if we're processing previously buffered items, which
6319 // may call the _write() callback in the same tick, so that we don't
6320 // end up in an overlapped onwrite situation.
6321 this.bufferProcessing = false;
ebd8d4e8 6322
ab78acc6
IC
6323 // the callback that's passed to _write(chunk,cb)
6324 this.onwrite = function(er) {
6325 onwrite(stream, er);
6326 };
ebd8d4e8 6327
ab78acc6
IC
6328 // the callback that the user supplies to write(chunk,encoding,cb)
6329 this.writecb = null;
ebd8d4e8 6330
ab78acc6
IC
6331 // the amount that is being written when _write is called.
6332 this.writelen = 0;
ebd8d4e8 6333
ab78acc6 6334 this.buffer = [];
ebd8d4e8 6335
ab78acc6
IC
6336 // number of pending user-supplied write callbacks
6337 // this must be 0 before 'finish' can be emitted
6338 this.pendingcb = 0;
ebd8d4e8 6339
ab78acc6
IC
6340 // emit prefinish if the only thing we're waiting for is _write cbs
6341 // This is relevant for synchronous Transform streams
6342 this.prefinished = false;
ebd8d4e8 6343
ab78acc6
IC
6344 // True if the error was already emitted and should not be thrown again
6345 this.errorEmitted = false;
ebd8d4e8
IC
6346}
6347
ab78acc6
IC
6348function Writable(options) {
6349 var Duplex = require('./_stream_duplex');
ebd8d4e8 6350
ab78acc6
IC
6351 // Writable ctor is applied to Duplexes, though they're not
6352 // instanceof Writable, they're instanceof Readable.
6353 if (!(this instanceof Writable) && !(this instanceof Duplex))
6354 return new Writable(options);
ebd8d4e8 6355
ab78acc6 6356 this._writableState = new WritableState(options, this);
ebd8d4e8 6357
ab78acc6
IC
6358 // legacy.
6359 this.writable = true;
ebd8d4e8 6360
ab78acc6 6361 Stream.call(this);
ebd8d4e8
IC
6362}
6363
ab78acc6
IC
6364// Otherwise people can pipe Writable streams, which is just wrong.
6365Writable.prototype.pipe = function() {
6366 this.emit('error', new Error('Cannot pipe. Not readable.'));
6367};
ebd8d4e8 6368
ebd8d4e8 6369
ab78acc6
IC
6370function writeAfterEnd(stream, state, cb) {
6371 var er = new Error('write after end');
6372 // TODO: defer error events consistently everywhere, not just the cb
6373 stream.emit('error', er);
6374 process.nextTick(function() {
6375 cb(er);
6376 });
ebd8d4e8
IC
6377}
6378
ab78acc6
IC
6379// If we get something that is not a buffer, string, null, or undefined,
6380// and we're not in objectMode, then that's an error.
6381// Otherwise stream chunks are all considered to be of length=1, and the
6382// watermarks determine how many objects to keep in the buffer, rather than
6383// how many bytes or characters.
6384function validChunk(stream, state, chunk, cb) {
6385 var valid = true;
6386 if (!util.isBuffer(chunk) &&
6387 !util.isString(chunk) &&
6388 !util.isNullOrUndefined(chunk) &&
6389 !state.objectMode) {
6390 var er = new TypeError('Invalid non-string/buffer chunk');
6391 stream.emit('error', er);
6392 process.nextTick(function() {
6393 cb(er);
6394 });
6395 valid = false;
6396 }
6397 return valid;
ebd8d4e8
IC
6398}
6399
ab78acc6
IC
6400Writable.prototype.write = function(chunk, encoding, cb) {
6401 var state = this._writableState;
6402 var ret = false;
ebd8d4e8 6403
ab78acc6
IC
6404 if (util.isFunction(encoding)) {
6405 cb = encoding;
6406 encoding = null;
ebd8d4e8 6407 }
ebd8d4e8 6408
ab78acc6
IC
6409 if (util.isBuffer(chunk))
6410 encoding = 'buffer';
6411 else if (!encoding)
6412 encoding = state.defaultEncoding;
6413
6414 if (!util.isFunction(cb))
6415 cb = function() {};
6416
6417 if (state.ended)
6418 writeAfterEnd(this, state, cb);
6419 else if (validChunk(this, state, chunk, cb)) {
6420 state.pendingcb++;
6421 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6422 }
ebd8d4e8 6423
ab78acc6
IC
6424 return ret;
6425};
6426
6427Writable.prototype.cork = function() {
6428 var state = this._writableState;
6429
6430 state.corked++;
6431};
ebd8d4e8 6432
ab78acc6
IC
6433Writable.prototype.uncork = function() {
6434 var state = this._writableState;
ebd8d4e8 6435
ab78acc6
IC
6436 if (state.corked) {
6437 state.corked--;
ebd8d4e8 6438
ab78acc6
IC
6439 if (!state.writing &&
6440 !state.corked &&
6441 !state.finished &&
6442 !state.bufferProcessing &&
6443 state.buffer.length)
6444 clearBuffer(this, state);
ebd8d4e8 6445 }
ab78acc6 6446};
ebd8d4e8 6447
ab78acc6
IC
6448function decodeChunk(state, chunk, encoding) {
6449 if (!state.objectMode &&
6450 state.decodeStrings !== false &&
6451 util.isString(chunk)) {
6452 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6453 }
ab78acc6 6454 return chunk;
ebd8d4e8
IC
6455}
6456
ab78acc6
IC
6457// if we're already writing something, then just put this
6458// in the queue, and wait our turn. Otherwise, call _write
6459// If we return false, then we need a drain event, so set that flag.
6460function writeOrBuffer(stream, state, chunk, encoding, cb) {
6461 chunk = decodeChunk(state, chunk, encoding);
6462 if (util.isBuffer(chunk))
6463 encoding = 'buffer';
6464 var len = state.objectMode ? 1 : chunk.length;
6465
6466 state.length += len;
6467
6468 var ret = state.length < state.highWaterMark;
6469 // we must ensure that previous needDrain will not be reset to false.
6470 if (!ret)
6471 state.needDrain = true;
6472
6473 if (state.writing || state.corked)
6474 state.buffer.push(new WriteReq(chunk, encoding, cb));
6475 else
6476 doWrite(stream, state, false, len, chunk, encoding, cb);
6477
6478 return ret;
ebd8d4e8
IC
6479}
6480
ab78acc6
IC
6481function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6482 state.writelen = len;
6483 state.writecb = cb;
6484 state.writing = true;
6485 state.sync = true;
6486 if (writev)
6487 stream._writev(chunk, state.onwrite);
6488 else
6489 stream._write(chunk, encoding, state.onwrite);
6490 state.sync = false;
ebd8d4e8
IC
6491}
6492
ab78acc6
IC
6493function onwriteError(stream, state, sync, er, cb) {
6494 if (sync)
6495 process.nextTick(function() {
6496 state.pendingcb--;
6497 cb(er);
6498 });
6499 else {
6500 state.pendingcb--;
6501 cb(er);
6502 }
ebd8d4e8 6503
ab78acc6
IC
6504 stream._writableState.errorEmitted = true;
6505 stream.emit('error', er);
6506}
ebd8d4e8 6507
ab78acc6
IC
6508function onwriteStateUpdate(state) {
6509 state.writing = false;
6510 state.writecb = null;
6511 state.length -= state.writelen;
6512 state.writelen = 0;
6513}
ebd8d4e8 6514
ab78acc6
IC
6515function onwrite(stream, er) {
6516 var state = stream._writableState;
6517 var sync = state.sync;
6518 var cb = state.writecb;
ebd8d4e8 6519
ab78acc6 6520 onwriteStateUpdate(state);
ebd8d4e8 6521
ab78acc6
IC
6522 if (er)
6523 onwriteError(stream, state, sync, er, cb);
6524 else {
6525 // Check if we're actually ready to finish, but don't emit yet
6526 var finished = needFinish(stream, state);
ebd8d4e8 6527
ab78acc6
IC
6528 if (!finished &&
6529 !state.corked &&
6530 !state.bufferProcessing &&
6531 state.buffer.length) {
6532 clearBuffer(stream, state);
6533 }
6534
6535 if (sync) {
6536 process.nextTick(function() {
6537 afterWrite(stream, state, finished, cb);
6538 });
6539 } else {
6540 afterWrite(stream, state, finished, cb);
ebd8d4e8 6541 }
ebd8d4e8
IC
6542 }
6543}
6544
ab78acc6
IC
6545function afterWrite(stream, state, finished, cb) {
6546 if (!finished)
6547 onwriteDrain(stream, state);
6548 state.pendingcb--;
6549 cb();
6550 finishMaybe(stream, state);
6551}
6552
6553// Must force callback to be called on nextTick, so that we don't
6554// emit 'drain' before the write() consumer gets the 'false' return
6555// value, and has a chance to attach a 'drain' listener.
6556function onwriteDrain(stream, state) {
6557 if (state.length === 0 && state.needDrain) {
6558 state.needDrain = false;
6559 stream.emit('drain');
ebd8d4e8
IC
6560 }
6561}
6562
ebd8d4e8 6563
ab78acc6
IC
6564// if there's something in the buffer waiting, then process it
6565function clearBuffer(stream, state) {
6566 state.bufferProcessing = true;
6567
6568 if (stream._writev && state.buffer.length > 1) {
6569 // Fast case, write everything using _writev()
6570 var cbs = [];
6571 for (var c = 0; c < state.buffer.length; c++)
6572 cbs.push(state.buffer[c].callback);
6573
6574 // count the one we are adding, as well.
6575 // TODO(isaacs) clean this up
6576 state.pendingcb++;
6577 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6578 for (var i = 0; i < cbs.length; i++) {
6579 state.pendingcb--;
6580 cbs[i](err);
6581 }
6582 });
6583
6584 // Clear buffer
6585 state.buffer = [];
6586 } else {
6587 // Slow case, write chunks one-by-one
6588 for (var c = 0; c < state.buffer.length; c++) {
6589 var entry = state.buffer[c];
6590 var chunk = entry.chunk;
6591 var encoding = entry.encoding;
6592 var cb = entry.callback;
6593 var len = state.objectMode ? 1 : chunk.length;
6594
6595 doWrite(stream, state, false, len, chunk, encoding, cb);
6596
6597 // if we didn't call the onwrite immediately, then
6598 // it means that we need to wait until it does.
6599 // also, that means that the chunk and cb are currently
6600 // being processed, so move the buffer counter past them.
6601 if (state.writing) {
6602 c++;
6603 break;
6604 }
ebd8d4e8 6605 }
ab78acc6
IC
6606
6607 if (c < state.buffer.length)
6608 state.buffer = state.buffer.slice(c);
6609 else
6610 state.buffer.length = 0;
ebd8d4e8
IC
6611 }
6612
ab78acc6 6613 state.bufferProcessing = false;
ebd8d4e8
IC
6614}
6615
ab78acc6
IC
6616Writable.prototype._write = function(chunk, encoding, cb) {
6617 cb(new Error('not implemented'));
ebd8d4e8 6618
ab78acc6 6619};
ebd8d4e8 6620
ab78acc6 6621Writable.prototype._writev = null;
ebd8d4e8 6622
ab78acc6
IC
6623Writable.prototype.end = function(chunk, encoding, cb) {
6624 var state = this._writableState;
ebd8d4e8 6625
ab78acc6
IC
6626 if (util.isFunction(chunk)) {
6627 cb = chunk;
6628 chunk = null;
6629 encoding = null;
6630 } else if (util.isFunction(encoding)) {
6631 cb = encoding;
6632 encoding = null;
6633 }
ebd8d4e8 6634
ab78acc6
IC
6635 if (!util.isNullOrUndefined(chunk))
6636 this.write(chunk, encoding);
6637
6638 // .end() fully uncorks
6639 if (state.corked) {
6640 state.corked = 1;
6641 this.uncork();
ebd8d4e8 6642 }
ab78acc6
IC
6643
6644 // ignore unnecessary end() calls.
6645 if (!state.ending && !state.finished)
6646 endWritable(this, state, cb);
6647};
6648
6649
6650function needFinish(stream, state) {
6651 return (state.ending &&
6652 state.length === 0 &&
6653 !state.finished &&
6654 !state.writing);
ebd8d4e8
IC
6655}
6656
ab78acc6
IC
6657function prefinish(stream, state) {
6658 if (!state.prefinished) {
6659 state.prefinished = true;
6660 stream.emit('prefinish');
ebd8d4e8 6661 }
ebd8d4e8
IC
6662}
6663
ab78acc6
IC
6664function finishMaybe(stream, state) {
6665 var need = needFinish(stream, state);
6666 if (need) {
6667 if (state.pendingcb === 0) {
6668 prefinish(stream, state);
6669 state.finished = true;
6670 stream.emit('finish');
6671 } else
6672 prefinish(stream, state);
6673 }
6674 return need;
6675}
ebd8d4e8 6676
ab78acc6
IC
6677function endWritable(stream, state, cb) {
6678 state.ending = true;
6679 finishMaybe(stream, state);
6680 if (cb) {
6681 if (state.finished)
6682 process.nextTick(cb);
6683 else
6684 stream.once('finish', cb);
ebd8d4e8 6685 }
ab78acc6 6686 state.ended = true;
ebd8d4e8
IC
6687}
6688
ab78acc6
IC
6689}).call(this,require('_process'))
6690},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6691(function (Buffer){
6692// Copyright Joyent, Inc. and other Node contributors.
6693//
6694// Permission is hereby granted, free of charge, to any person obtaining a
6695// copy of this software and associated documentation files (the
6696// "Software"), to deal in the Software without restriction, including
6697// without limitation the rights to use, copy, modify, merge, publish,
6698// distribute, sublicense, and/or sell copies of the Software, and to permit
6699// persons to whom the Software is furnished to do so, subject to the
6700// following conditions:
6701//
6702// The above copyright notice and this permission notice shall be included
6703// in all copies or substantial portions of the Software.
6704//
6705// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6706// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6707// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6708// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6709// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6710// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6711// USE OR OTHER DEALINGS IN THE SOFTWARE.
6712
6713// NOTE: These type checking functions intentionally don't use `instanceof`
6714// because it is fragile and can be easily faked with `Object.create()`.
6715function isArray(ar) {
6716 return Array.isArray(ar);
ebd8d4e8 6717}
ab78acc6 6718exports.isArray = isArray;
ebd8d4e8 6719
ab78acc6
IC
6720function isBoolean(arg) {
6721 return typeof arg === 'boolean';
ebd8d4e8 6722}
ab78acc6 6723exports.isBoolean = isBoolean;
ebd8d4e8 6724
ab78acc6
IC
6725function isNull(arg) {
6726 return arg === null;
6727}
6728exports.isNull = isNull;
ebd8d4e8 6729
ab78acc6
IC
6730function isNullOrUndefined(arg) {
6731 return arg == null;
6732}
6733exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6734
ab78acc6
IC
6735function isNumber(arg) {
6736 return typeof arg === 'number';
ebd8d4e8 6737}
ab78acc6 6738exports.isNumber = isNumber;
ebd8d4e8 6739
ab78acc6
IC
6740function isString(arg) {
6741 return typeof arg === 'string';
6742}
6743exports.isString = isString;
ebd8d4e8 6744
ab78acc6
IC
6745function isSymbol(arg) {
6746 return typeof arg === 'symbol';
6747}
6748exports.isSymbol = isSymbol;
ebd8d4e8 6749
ab78acc6
IC
6750function isUndefined(arg) {
6751 return arg === void 0;
ebd8d4e8 6752}
ab78acc6 6753exports.isUndefined = isUndefined;
ebd8d4e8 6754
ab78acc6
IC
6755function isRegExp(re) {
6756 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6757}
ab78acc6 6758exports.isRegExp = isRegExp;
ebd8d4e8 6759
ab78acc6
IC
6760function isObject(arg) {
6761 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6762}
ab78acc6 6763exports.isObject = isObject;
ebd8d4e8 6764
ab78acc6
IC
6765function isDate(d) {
6766 return isObject(d) && objectToString(d) === '[object Date]';
6767}
6768exports.isDate = isDate;
ebd8d4e8 6769
ab78acc6
IC
6770function isError(e) {
6771 return isObject(e) &&
6772 (objectToString(e) === '[object Error]' || e instanceof Error);
6773}
6774exports.isError = isError;
ebd8d4e8 6775
ab78acc6
IC
6776function isFunction(arg) {
6777 return typeof arg === 'function';
6778}
6779exports.isFunction = isFunction;
6780
6781function isPrimitive(arg) {
6782 return arg === null ||
6783 typeof arg === 'boolean' ||
6784 typeof arg === 'number' ||
6785 typeof arg === 'string' ||
6786 typeof arg === 'symbol' || // ES6 symbol
6787 typeof arg === 'undefined';
ebd8d4e8 6788}
ab78acc6 6789exports.isPrimitive = isPrimitive;
ebd8d4e8 6790
ab78acc6
IC
6791function isBuffer(arg) {
6792 return Buffer.isBuffer(arg);
ebd8d4e8 6793}
ab78acc6 6794exports.isBuffer = isBuffer;
ebd8d4e8 6795
ab78acc6
IC
6796function objectToString(o) {
6797 return Object.prototype.toString.call(o);
ebd8d4e8 6798}
ab78acc6
IC
6799}).call(this,require("buffer").Buffer)
6800},{"buffer":7}],22:[function(require,module,exports){
6801module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6802
ab78acc6
IC
6803},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6804exports = module.exports = require('./lib/_stream_readable.js');
6805exports.Stream = require('stream');
6806exports.Readable = exports;
6807exports.Writable = require('./lib/_stream_writable.js');
6808exports.Duplex = require('./lib/_stream_duplex.js');
6809exports.Transform = require('./lib/_stream_transform.js');
6810exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6811
ab78acc6
IC
6812},{"./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){
6813module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6814
ab78acc6
IC
6815},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6816module.exports = require("./lib/_stream_writable.js")
6817
6818},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6819// Copyright Joyent, Inc. and other Node contributors.
6820//
6821// Permission is hereby granted, free of charge, to any person obtaining a
6822// copy of this software and associated documentation files (the
6823// "Software"), to deal in the Software without restriction, including
6824// without limitation the rights to use, copy, modify, merge, publish,
6825// distribute, sublicense, and/or sell copies of the Software, and to permit
6826// persons to whom the Software is furnished to do so, subject to the
6827// following conditions:
6828//
6829// The above copyright notice and this permission notice shall be included
6830// in all copies or substantial portions of the Software.
6831//
6832// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6833// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6834// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6835// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6836// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6837// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6838// USE OR OTHER DEALINGS IN THE SOFTWARE.
6839
6840module.exports = Stream;
6841
6842var EE = require('events').EventEmitter;
6843var inherits = require('inherits');
6844
6845inherits(Stream, EE);
6846Stream.Readable = require('readable-stream/readable.js');
6847Stream.Writable = require('readable-stream/writable.js');
6848Stream.Duplex = require('readable-stream/duplex.js');
6849Stream.Transform = require('readable-stream/transform.js');
6850Stream.PassThrough = require('readable-stream/passthrough.js');
6851
6852// Backwards-compat with node 0.4.x
6853Stream.Stream = Stream;
6854
6855
6856
6857// old-style streams. Note that the pipe method (the only relevant
6858// part of this class) is overridden in the Readable class.
6859
6860function Stream() {
6861 EE.call(this);
ebd8d4e8
IC
6862}
6863
ab78acc6
IC
6864Stream.prototype.pipe = function(dest, options) {
6865 var source = this;
ebd8d4e8 6866
ab78acc6
IC
6867 function ondata(chunk) {
6868 if (dest.writable) {
6869 if (false === dest.write(chunk) && source.pause) {
6870 source.pause();
6871 }
6872 }
6873 }
ebd8d4e8 6874
ab78acc6 6875 source.on('data', ondata);
ebd8d4e8 6876
ab78acc6
IC
6877 function ondrain() {
6878 if (source.readable && source.resume) {
6879 source.resume();
6880 }
6881 }
ebd8d4e8 6882
ab78acc6 6883 dest.on('drain', ondrain);
ebd8d4e8 6884
ab78acc6
IC
6885 // If the 'end' option is not supplied, dest.end() will be called when
6886 // source gets the 'end' or 'close' events. Only dest.end() once.
6887 if (!dest._isStdio && (!options || options.end !== false)) {
6888 source.on('end', onend);
6889 source.on('close', onclose);
ebd8d4e8
IC
6890 }
6891
ab78acc6
IC
6892 var didOnEnd = false;
6893 function onend() {
6894 if (didOnEnd) return;
6895 didOnEnd = true;
ebd8d4e8 6896
ab78acc6
IC
6897 dest.end();
6898 }
ebd8d4e8 6899
ebd8d4e8 6900
ab78acc6
IC
6901 function onclose() {
6902 if (didOnEnd) return;
6903 didOnEnd = true;
ebd8d4e8 6904
ab78acc6 6905 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6906 }
6907
ab78acc6
IC
6908 // don't leave dangling pipes when there are errors.
6909 function onerror(er) {
6910 cleanup();
6911 if (EE.listenerCount(this, 'error') === 0) {
6912 throw er; // Unhandled stream error in pipe.
6913 }
6914 }
ebd8d4e8 6915
ab78acc6
IC
6916 source.on('error', onerror);
6917 dest.on('error', onerror);
ebd8d4e8 6918
ab78acc6
IC
6919 // remove all the event listeners that were added.
6920 function cleanup() {
6921 source.removeListener('data', ondata);
6922 dest.removeListener('drain', ondrain);
ebd8d4e8 6923
ab78acc6
IC
6924 source.removeListener('end', onend);
6925 source.removeListener('close', onclose);
6926
6927 source.removeListener('error', onerror);
6928 dest.removeListener('error', onerror);
6929
6930 source.removeListener('end', cleanup);
6931 source.removeListener('close', cleanup);
6932
6933 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6934 }
6935
ab78acc6
IC
6936 source.on('end', cleanup);
6937 source.on('close', cleanup);
ebd8d4e8 6938
ab78acc6 6939 dest.on('close', cleanup);
ebd8d4e8 6940
ab78acc6 6941 dest.emit('pipe', source);
ebd8d4e8 6942
ab78acc6
IC
6943 // Allow for unix-like usage: A.pipe(B).pipe(C)
6944 return dest;
6945};
ebd8d4e8 6946
ab78acc6
IC
6947},{"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){
6948// Copyright Joyent, Inc. and other Node contributors.
6949//
6950// Permission is hereby granted, free of charge, to any person obtaining a
6951// copy of this software and associated documentation files (the
6952// "Software"), to deal in the Software without restriction, including
6953// without limitation the rights to use, copy, modify, merge, publish,
6954// distribute, sublicense, and/or sell copies of the Software, and to permit
6955// persons to whom the Software is furnished to do so, subject to the
6956// following conditions:
6957//
6958// The above copyright notice and this permission notice shall be included
6959// in all copies or substantial portions of the Software.
6960//
6961// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6962// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6963// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6964// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6965// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6966// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6967// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6968
ab78acc6 6969var Buffer = require('buffer').Buffer;
ebd8d4e8 6970
ab78acc6
IC
6971var isBufferEncoding = Buffer.isEncoding
6972 || function(encoding) {
6973 switch (encoding && encoding.toLowerCase()) {
6974 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;
6975 default: return false;
6976 }
6977 }
ebd8d4e8 6978
ebd8d4e8 6979
ab78acc6
IC
6980function assertEncoding(encoding) {
6981 if (encoding && !isBufferEncoding(encoding)) {
6982 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6983 }
ebd8d4e8
IC
6984}
6985
ab78acc6
IC
6986// StringDecoder provides an interface for efficiently splitting a series of
6987// buffers into a series of JS strings without breaking apart multi-byte
6988// characters. CESU-8 is handled as part of the UTF-8 encoding.
6989//
6990// @TODO Handling all encodings inside a single object makes it very difficult
6991// to reason about this code, so it should be split up in the future.
6992// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6993// points as used by CESU-8.
6994var StringDecoder = exports.StringDecoder = function(encoding) {
6995 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6996 assertEncoding(encoding);
6997 switch (this.encoding) {
6998 case 'utf8':
6999 // CESU-8 represents each of Surrogate Pair by 3-bytes
7000 this.surrogateSize = 3;
7001 break;
7002 case 'ucs2':
7003 case 'utf16le':
7004 // UTF-16 represents each of Surrogate Pair by 2-bytes
7005 this.surrogateSize = 2;
7006 this.detectIncompleteChar = utf16DetectIncompleteChar;
7007 break;
7008 case 'base64':
7009 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7010 this.surrogateSize = 3;
7011 this.detectIncompleteChar = base64DetectIncompleteChar;
7012 break;
7013 default:
7014 this.write = passThroughWrite;
7015 return;
7016 }
ebd8d4e8 7017
ab78acc6
IC
7018 // Enough space to store all bytes of a single character. UTF-8 needs 4
7019 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7020 this.charBuffer = new Buffer(6);
7021 // Number of bytes received for the current incomplete multi-byte character.
7022 this.charReceived = 0;
7023 // Number of bytes expected for the current incomplete multi-byte character.
7024 this.charLength = 0;
7025};
ebd8d4e8 7026
ebd8d4e8 7027
ab78acc6
IC
7028// write decodes the given buffer and returns it as JS string that is
7029// guaranteed to not contain any partial multi-byte characters. Any partial
7030// character found at the end of the buffer is buffered up, and will be
7031// returned when calling write again with the remaining bytes.
7032//
7033// Note: Converting a Buffer containing an orphan surrogate to a String
7034// currently works, but converting a String to a Buffer (via `new Buffer`, or
7035// Buffer#write) will replace incomplete surrogates with the unicode
7036// replacement character. See https://codereview.chromium.org/121173009/ .
7037StringDecoder.prototype.write = function(buffer) {
7038 var charStr = '';
7039 // if our last write ended with an incomplete multibyte character
7040 while (this.charLength) {
7041 // determine how many remaining bytes this buffer has to offer for this char
7042 var available = (buffer.length >= this.charLength - this.charReceived) ?
7043 this.charLength - this.charReceived :
7044 buffer.length;
7045
7046 // add the new bytes to the char buffer
7047 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7048 this.charReceived += available;
7049
7050 if (this.charReceived < this.charLength) {
7051 // still not enough chars in this buffer? wait for more ...
7052 return '';
7053 }
7054
7055 // remove bytes belonging to the current character from the buffer
7056 buffer = buffer.slice(available, buffer.length);
7057
7058 // get the character that was split
7059 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7060
7061 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7062 var charCode = charStr.charCodeAt(charStr.length - 1);
7063 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7064 this.charLength += this.surrogateSize;
7065 charStr = '';
7066 continue;
7067 }
7068 this.charReceived = this.charLength = 0;
ebd8d4e8 7069
ab78acc6
IC
7070 // if there are no more bytes in this buffer, just emit our char
7071 if (buffer.length === 0) {
7072 return charStr;
7073 }
7074 break;
ebd8d4e8 7075 }
ebd8d4e8 7076
ab78acc6
IC
7077 // determine and set charLength / charReceived
7078 this.detectIncompleteChar(buffer);
ebd8d4e8 7079
ab78acc6
IC
7080 var end = buffer.length;
7081 if (this.charLength) {
7082 // buffer the incomplete character bytes we got
7083 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7084 end -= this.charReceived;
ebd8d4e8
IC
7085 }
7086
ab78acc6 7087 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7088
ab78acc6
IC
7089 var end = charStr.length - 1;
7090 var charCode = charStr.charCodeAt(end);
7091 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7092 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7093 var size = this.surrogateSize;
7094 this.charLength += size;
7095 this.charReceived += size;
7096 this.charBuffer.copy(this.charBuffer, size, 0, size);
7097 buffer.copy(this.charBuffer, 0, 0, size);
7098 return charStr.substring(0, end);
ebd8d4e8
IC
7099 }
7100
ab78acc6
IC
7101 // or just emit the charStr
7102 return charStr;
7103};
ebd8d4e8 7104
ab78acc6
IC
7105// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7106// the end of the given buffer. If so, it sets this.charLength to the byte
7107// length that character, and sets this.charReceived to the number of bytes
7108// that are available for this character.
7109StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7110 // determine how many bytes we have to check at the end of this buffer
7111 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7112
ab78acc6
IC
7113 // Figure out if one of the last i bytes of our buffer announces an
7114 // incomplete char.
7115 for (; i > 0; i--) {
7116 var c = buffer[buffer.length - i];
ebd8d4e8 7117
ab78acc6 7118 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7119
ab78acc6
IC
7120 // 110XXXXX
7121 if (i == 1 && c >> 5 == 0x06) {
7122 this.charLength = 2;
7123 break;
7124 }
ebd8d4e8 7125
ab78acc6
IC
7126 // 1110XXXX
7127 if (i <= 2 && c >> 4 == 0x0E) {
7128 this.charLength = 3;
7129 break;
7130 }
ebd8d4e8 7131
ab78acc6
IC
7132 // 11110XXX
7133 if (i <= 3 && c >> 3 == 0x1E) {
7134 this.charLength = 4;
7135 break;
7136 }
7137 }
7138 this.charReceived = i;
7139};
ebd8d4e8 7140
ab78acc6
IC
7141StringDecoder.prototype.end = function(buffer) {
7142 var res = '';
7143 if (buffer && buffer.length)
7144 res = this.write(buffer);
ebd8d4e8 7145
ab78acc6
IC
7146 if (this.charReceived) {
7147 var cr = this.charReceived;
7148 var buf = this.charBuffer;
7149 var enc = this.encoding;
7150 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7151 }
7152
ab78acc6
IC
7153 return res;
7154};
ebd8d4e8 7155
ab78acc6
IC
7156function passThroughWrite(buffer) {
7157 return buffer.toString(this.encoding);
ebd8d4e8
IC
7158}
7159
ab78acc6
IC
7160function utf16DetectIncompleteChar(buffer) {
7161 this.charReceived = buffer.length % 2;
7162 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7163}
7164
ab78acc6
IC
7165function base64DetectIncompleteChar(buffer) {
7166 this.charReceived = buffer.length % 3;
7167 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7168}
7169
ab78acc6
IC
7170},{"buffer":7}],28:[function(require,module,exports){
7171module.exports = function isBuffer(arg) {
7172 return arg && typeof arg === 'object'
7173 && typeof arg.copy === 'function'
7174 && typeof arg.fill === 'function'
7175 && typeof arg.readUInt8 === 'function';
7176}
7177},{}],29:[function(require,module,exports){
7178(function (process,global){
7179// Copyright Joyent, Inc. and other Node contributors.
7180//
7181// Permission is hereby granted, free of charge, to any person obtaining a
7182// copy of this software and associated documentation files (the
7183// "Software"), to deal in the Software without restriction, including
7184// without limitation the rights to use, copy, modify, merge, publish,
7185// distribute, sublicense, and/or sell copies of the Software, and to permit
7186// persons to whom the Software is furnished to do so, subject to the
7187// following conditions:
7188//
7189// The above copyright notice and this permission notice shall be included
7190// in all copies or substantial portions of the Software.
7191//
7192// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7193// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7194// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7195// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7196// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7197// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7198// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7199
ab78acc6
IC
7200var formatRegExp = /%[sdj%]/g;
7201exports.format = function(f) {
7202 if (!isString(f)) {
7203 var objects = [];
7204 for (var i = 0; i < arguments.length; i++) {
7205 objects.push(inspect(arguments[i]));
7206 }
7207 return objects.join(' ');
7208 }
ebd8d4e8 7209
ab78acc6
IC
7210 var i = 1;
7211 var args = arguments;
7212 var len = args.length;
7213 var str = String(f).replace(formatRegExp, function(x) {
7214 if (x === '%%') return '%';
7215 if (i >= len) return x;
7216 switch (x) {
7217 case '%s': return String(args[i++]);
7218 case '%d': return Number(args[i++]);
7219 case '%j':
7220 try {
7221 return JSON.stringify(args[i++]);
7222 } catch (_) {
7223 return '[Circular]';
7224 }
7225 default:
7226 return x;
7227 }
7228 });
7229 for (var x = args[i]; i < len; x = args[++i]) {
7230 if (isNull(x) || !isObject(x)) {
7231 str += ' ' + x;
7232 } else {
7233 str += ' ' + inspect(x);
7234 }
7235 }
7236 return str;
7237};
ebd8d4e8 7238
ebd8d4e8 7239
ab78acc6
IC
7240// Mark that a method should not be used.
7241// Returns a modified function which warns once by default.
7242// If --no-deprecation is set, then it is a no-op.
7243exports.deprecate = function(fn, msg) {
7244 // Allow for deprecating things in the process of starting up.
7245 if (isUndefined(global.process)) {
7246 return function() {
7247 return exports.deprecate(fn, msg).apply(this, arguments);
7248 };
7249 }
ebd8d4e8 7250
ab78acc6
IC
7251 if (process.noDeprecation === true) {
7252 return fn;
7253 }
ebd8d4e8 7254
ab78acc6
IC
7255 var warned = false;
7256 function deprecated() {
7257 if (!warned) {
7258 if (process.throwDeprecation) {
7259 throw new Error(msg);
7260 } else if (process.traceDeprecation) {
7261 console.trace(msg);
7262 } else {
7263 console.error(msg);
7264 }
7265 warned = true;
7266 }
7267 return fn.apply(this, arguments);
7268 }
ebd8d4e8 7269
ab78acc6
IC
7270 return deprecated;
7271};
ebd8d4e8 7272
ebd8d4e8 7273
ab78acc6
IC
7274var debugs = {};
7275var debugEnviron;
7276exports.debuglog = function(set) {
7277 if (isUndefined(debugEnviron))
7278 debugEnviron = process.env.NODE_DEBUG || '';
7279 set = set.toUpperCase();
7280 if (!debugs[set]) {
7281 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7282 var pid = process.pid;
7283 debugs[set] = function() {
7284 var msg = exports.format.apply(exports, arguments);
7285 console.error('%s %d: %s', set, pid, msg);
7286 };
7287 } else {
7288 debugs[set] = function() {};
ebd8d4e8
IC
7289 }
7290 }
ab78acc6
IC
7291 return debugs[set];
7292};
ebd8d4e8 7293
ebd8d4e8
IC
7294
7295/**
ab78acc6
IC
7296 * Echos the value of a value. Trys to print the value out
7297 * in the best way possible given the different types.
7298 *
7299 * @param {Object} obj The object to print out.
7300 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7301 */
ab78acc6
IC
7302/* legacy: obj, showHidden, depth, colors*/
7303function inspect(obj, opts) {
7304 // default options
7305 var ctx = {
7306 seen: [],
7307 stylize: stylizeNoColor
7308 };
7309 // legacy...
7310 if (arguments.length >= 3) ctx.depth = arguments[2];
7311 if (arguments.length >= 4) ctx.colors = arguments[3];
7312 if (isBoolean(opts)) {
7313 // legacy...
7314 ctx.showHidden = opts;
7315 } else if (opts) {
7316 // got an "options" object
7317 exports._extend(ctx, opts);
ebd8d4e8 7318 }
ab78acc6
IC
7319 // set default options
7320 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7321 if (isUndefined(ctx.depth)) ctx.depth = 2;
7322 if (isUndefined(ctx.colors)) ctx.colors = false;
7323 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7324 if (ctx.colors) ctx.stylize = stylizeWithColor;
7325 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7326}
ab78acc6 7327exports.inspect = inspect;
ebd8d4e8 7328
ebd8d4e8 7329
ab78acc6
IC
7330// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7331inspect.colors = {
7332 'bold' : [1, 22],
7333 'italic' : [3, 23],
7334 'underline' : [4, 24],
7335 'inverse' : [7, 27],
7336 'white' : [37, 39],
7337 'grey' : [90, 39],
7338 'black' : [30, 39],
7339 'blue' : [34, 39],
7340 'cyan' : [36, 39],
7341 'green' : [32, 39],
7342 'magenta' : [35, 39],
7343 'red' : [31, 39],
7344 'yellow' : [33, 39]
7345};
ebd8d4e8 7346
ab78acc6
IC
7347// Don't use 'blue' not visible on cmd.exe
7348inspect.styles = {
7349 'special': 'cyan',
7350 'number': 'yellow',
7351 'boolean': 'yellow',
7352 'undefined': 'grey',
7353 'null': 'bold',
7354 'string': 'green',
7355 'date': 'magenta',
7356 // "name": intentionally not styling
7357 'regexp': 'red'
7358};
ebd8d4e8 7359
ebd8d4e8 7360
ab78acc6
IC
7361function stylizeWithColor(str, styleType) {
7362 var style = inspect.styles[styleType];
ebd8d4e8 7363
ab78acc6
IC
7364 if (style) {
7365 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7366 '\u001b[' + inspect.colors[style][1] + 'm';
7367 } else {
7368 return str;
ebd8d4e8 7369 }
ebd8d4e8
IC
7370}
7371
ebd8d4e8 7372
ab78acc6
IC
7373function stylizeNoColor(str, styleType) {
7374 return str;
ebd8d4e8
IC
7375}
7376
ebd8d4e8 7377
ab78acc6
IC
7378function arrayToHash(array) {
7379 var hash = {};
ebd8d4e8 7380
ab78acc6
IC
7381 array.forEach(function(val, idx) {
7382 hash[val] = true;
7383 });
ebd8d4e8 7384
ab78acc6 7385 return hash;
ebd8d4e8
IC
7386}
7387
ebd8d4e8 7388
ab78acc6
IC
7389function formatValue(ctx, value, recurseTimes) {
7390 // Provide a hook for user-specified inspect functions.
7391 // Check that value is an object with an inspect function on it
7392 if (ctx.customInspect &&
7393 value &&
7394 isFunction(value.inspect) &&
7395 // Filter out the util module, it's inspect function is special
7396 value.inspect !== exports.inspect &&
7397 // Also filter out any prototype objects using the circular check.
7398 !(value.constructor && value.constructor.prototype === value)) {
7399 var ret = value.inspect(recurseTimes, ctx);
7400 if (!isString(ret)) {
7401 ret = formatValue(ctx, ret, recurseTimes);
7402 }
7403 return ret;
ebd8d4e8 7404 }
ebd8d4e8 7405
ab78acc6
IC
7406 // Primitive types cannot have properties
7407 var primitive = formatPrimitive(ctx, value);
7408 if (primitive) {
7409 return primitive;
ebd8d4e8
IC
7410 }
7411
ab78acc6
IC
7412 // Look up the keys of the object.
7413 var keys = Object.keys(value);
7414 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7415
ab78acc6
IC
7416 if (ctx.showHidden) {
7417 keys = Object.getOwnPropertyNames(value);
7418 }
ebd8d4e8 7419
ab78acc6
IC
7420 // IE doesn't make error fields non-enumerable
7421 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7422 if (isError(value)
7423 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7424 return formatError(value);
ebd8d4e8 7425 }
ebd8d4e8 7426
ab78acc6
IC
7427 // Some type of object without properties can be shortcutted.
7428 if (keys.length === 0) {
7429 if (isFunction(value)) {
7430 var name = value.name ? ': ' + value.name : '';
7431 return ctx.stylize('[Function' + name + ']', 'special');
7432 }
7433 if (isRegExp(value)) {
7434 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7435 }
7436 if (isDate(value)) {
7437 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7438 }
7439 if (isError(value)) {
7440 return formatError(value);
7441 }
ebd8d4e8 7442 }
ebd8d4e8 7443
ab78acc6 7444 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7445
ab78acc6
IC
7446 // Make Array say that they are Array
7447 if (isArray(value)) {
7448 array = true;
7449 braces = ['[', ']'];
7450 }
ebd8d4e8 7451
ab78acc6
IC
7452 // Make functions say that they are functions
7453 if (isFunction(value)) {
7454 var n = value.name ? ': ' + value.name : '';
7455 base = ' [Function' + n + ']';
7456 }
ebd8d4e8 7457
ab78acc6
IC
7458 // Make RegExps say that they are RegExps
7459 if (isRegExp(value)) {
7460 base = ' ' + RegExp.prototype.toString.call(value);
7461 }
ebd8d4e8 7462
ab78acc6
IC
7463 // Make dates with properties first say the date
7464 if (isDate(value)) {
7465 base = ' ' + Date.prototype.toUTCString.call(value);
7466 }
ebd8d4e8 7467
ab78acc6
IC
7468 // Make error with message first say the error
7469 if (isError(value)) {
7470 base = ' ' + formatError(value);
7471 }
ebd8d4e8 7472
ab78acc6
IC
7473 if (keys.length === 0 && (!array || value.length == 0)) {
7474 return braces[0] + base + braces[1];
7475 }
ebd8d4e8 7476
ab78acc6
IC
7477 if (recurseTimes < 0) {
7478 if (isRegExp(value)) {
7479 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7480 } else {
7481 return ctx.stylize('[Object]', 'special');
7482 }
7483 }
ebd8d4e8 7484
ab78acc6 7485 ctx.seen.push(value);
ebd8d4e8 7486
ab78acc6
IC
7487 var output;
7488 if (array) {
7489 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7490 } else {
7491 output = keys.map(function(key) {
7492 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7493 });
7494 }
ebd8d4e8 7495
ab78acc6 7496 ctx.seen.pop();
ebd8d4e8 7497
ab78acc6
IC
7498 return reduceToSingleString(output, base, braces);
7499}
ebd8d4e8 7500
ebd8d4e8 7501
ab78acc6
IC
7502function formatPrimitive(ctx, value) {
7503 if (isUndefined(value))
7504 return ctx.stylize('undefined', 'undefined');
7505 if (isString(value)) {
7506 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7507 .replace(/'/g, "\\'")
7508 .replace(/\\"/g, '"') + '\'';
7509 return ctx.stylize(simple, 'string');
7510 }
7511 if (isNumber(value))
7512 return ctx.stylize('' + value, 'number');
7513 if (isBoolean(value))
7514 return ctx.stylize('' + value, 'boolean');
7515 // For some reason typeof null is "object", so special case here.
7516 if (isNull(value))
7517 return ctx.stylize('null', 'null');
7518}
ebd8d4e8 7519
ebd8d4e8 7520
ab78acc6
IC
7521function formatError(value) {
7522 return '[' + Error.prototype.toString.call(value) + ']';
7523}
ebd8d4e8 7524
ebd8d4e8 7525
ab78acc6
IC
7526function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7527 var output = [];
7528 for (var i = 0, l = value.length; i < l; ++i) {
7529 if (hasOwnProperty(value, String(i))) {
7530 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7531 String(i), true));
7532 } else {
7533 output.push('');
7534 }
7535 }
7536 keys.forEach(function(key) {
7537 if (!key.match(/^\d+$/)) {
7538 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7539 key, true));
7540 }
7541 });
7542 return output;
7543}
ebd8d4e8 7544
ebd8d4e8 7545
ab78acc6
IC
7546function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7547 var name, str, desc;
7548 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7549 if (desc.get) {
7550 if (desc.set) {
7551 str = ctx.stylize('[Getter/Setter]', 'special');
7552 } else {
7553 str = ctx.stylize('[Getter]', 'special');
7554 }
7555 } else {
7556 if (desc.set) {
7557 str = ctx.stylize('[Setter]', 'special');
7558 }
7559 }
7560 if (!hasOwnProperty(visibleKeys, key)) {
7561 name = '[' + key + ']';
7562 }
7563 if (!str) {
7564 if (ctx.seen.indexOf(desc.value) < 0) {
7565 if (isNull(recurseTimes)) {
7566 str = formatValue(ctx, desc.value, null);
7567 } else {
7568 str = formatValue(ctx, desc.value, recurseTimes - 1);
7569 }
7570 if (str.indexOf('\n') > -1) {
7571 if (array) {
7572 str = str.split('\n').map(function(line) {
7573 return ' ' + line;
7574 }).join('\n').substr(2);
7575 } else {
7576 str = '\n' + str.split('\n').map(function(line) {
7577 return ' ' + line;
7578 }).join('\n');
7579 }
7580 }
7581 } else {
7582 str = ctx.stylize('[Circular]', 'special');
7583 }
7584 }
7585 if (isUndefined(name)) {
7586 if (array && key.match(/^\d+$/)) {
7587 return str;
7588 }
7589 name = JSON.stringify('' + key);
7590 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7591 name = name.substr(1, name.length - 2);
7592 name = ctx.stylize(name, 'name');
7593 } else {
7594 name = name.replace(/'/g, "\\'")
7595 .replace(/\\"/g, '"')
7596 .replace(/(^"|"$)/g, "'");
7597 name = ctx.stylize(name, 'string');
7598 }
7599 }
ebd8d4e8 7600
ab78acc6
IC
7601 return name + ': ' + str;
7602}
ebd8d4e8 7603
ebd8d4e8 7604
ab78acc6
IC
7605function reduceToSingleString(output, base, braces) {
7606 var numLinesEst = 0;
7607 var length = output.reduce(function(prev, cur) {
7608 numLinesEst++;
7609 if (cur.indexOf('\n') >= 0) numLinesEst++;
7610 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7611 }, 0);
ebd8d4e8 7612
ab78acc6
IC
7613 if (length > 60) {
7614 return braces[0] +
7615 (base === '' ? '' : base + '\n ') +
7616 ' ' +
7617 output.join(',\n ') +
7618 ' ' +
7619 braces[1];
7620 }
ebd8d4e8 7621
ab78acc6
IC
7622 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7623}
ebd8d4e8 7624
ebd8d4e8 7625
ab78acc6
IC
7626// NOTE: These type checking functions intentionally don't use `instanceof`
7627// because it is fragile and can be easily faked with `Object.create()`.
7628function isArray(ar) {
7629 return Array.isArray(ar);
7630}
7631exports.isArray = isArray;
ebd8d4e8 7632
ab78acc6
IC
7633function isBoolean(arg) {
7634 return typeof arg === 'boolean';
7635}
7636exports.isBoolean = isBoolean;
ebd8d4e8 7637
ab78acc6
IC
7638function isNull(arg) {
7639 return arg === null;
7640}
7641exports.isNull = isNull;
ebd8d4e8 7642
ab78acc6
IC
7643function isNullOrUndefined(arg) {
7644 return arg == null;
7645}
7646exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7647
ab78acc6
IC
7648function isNumber(arg) {
7649 return typeof arg === 'number';
7650}
7651exports.isNumber = isNumber;
ebd8d4e8 7652
ab78acc6
IC
7653function isString(arg) {
7654 return typeof arg === 'string';
7655}
7656exports.isString = isString;
ebd8d4e8 7657
ab78acc6
IC
7658function isSymbol(arg) {
7659 return typeof arg === 'symbol';
7660}
7661exports.isSymbol = isSymbol;
ebd8d4e8 7662
ab78acc6
IC
7663function isUndefined(arg) {
7664 return arg === void 0;
7665}
7666exports.isUndefined = isUndefined;
ebd8d4e8 7667
ab78acc6
IC
7668function isRegExp(re) {
7669 return isObject(re) && objectToString(re) === '[object RegExp]';
7670}
7671exports.isRegExp = isRegExp;
ebd8d4e8 7672
ab78acc6
IC
7673function isObject(arg) {
7674 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7675}
ab78acc6 7676exports.isObject = isObject;
ebd8d4e8 7677
ab78acc6
IC
7678function isDate(d) {
7679 return isObject(d) && objectToString(d) === '[object Date]';
7680}
7681exports.isDate = isDate;
ebd8d4e8 7682
ab78acc6
IC
7683function isError(e) {
7684 return isObject(e) &&
7685 (objectToString(e) === '[object Error]' || e instanceof Error);
7686}
7687exports.isError = isError;
ebd8d4e8 7688
ab78acc6
IC
7689function isFunction(arg) {
7690 return typeof arg === 'function';
7691}
7692exports.isFunction = isFunction;
ebd8d4e8 7693
ab78acc6
IC
7694function isPrimitive(arg) {
7695 return arg === null ||
7696 typeof arg === 'boolean' ||
7697 typeof arg === 'number' ||
7698 typeof arg === 'string' ||
7699 typeof arg === 'symbol' || // ES6 symbol
7700 typeof arg === 'undefined';
7701}
7702exports.isPrimitive = isPrimitive;
ebd8d4e8 7703
ab78acc6 7704exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7705
ab78acc6
IC
7706function objectToString(o) {
7707 return Object.prototype.toString.call(o);
7708}
ebd8d4e8 7709
ebd8d4e8 7710
ab78acc6
IC
7711function pad(n) {
7712 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7713}
ebd8d4e8 7714
ebd8d4e8 7715
ab78acc6
IC
7716var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7717 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7718
ab78acc6
IC
7719// 26 Feb 16:19:34
7720function timestamp() {
7721 var d = new Date();
7722 var time = [pad(d.getHours()),
7723 pad(d.getMinutes()),
7724 pad(d.getSeconds())].join(':');
7725 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7726}
7727
ab78acc6
IC
7728
7729// log is just a thin wrapper to console.log that prepends a timestamp
7730exports.log = function() {
7731 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7732};
7733
ab78acc6
IC
7734
7735/**
7736 * Inherit the prototype methods from one constructor into another.
7737 *
7738 * The Function.prototype.inherits from lang.js rewritten as a standalone
7739 * function (not on Function.prototype). NOTE: If this file is to be loaded
7740 * during bootstrapping this function needs to be rewritten using some native
7741 * functions as prototype setup using normal JavaScript does not work as
7742 * expected during bootstrapping (see mirror.js in r114903).
7743 *
7744 * @param {function} ctor Constructor function which needs to inherit the
7745 * prototype.
7746 * @param {function} superCtor Constructor function to inherit prototype from.
7747 */
7748exports.inherits = require('inherits');
7749
7750exports._extend = function(origin, add) {
7751 // Don't do anything if add isn't an object
7752 if (!add || !isObject(add)) return origin;
7753
7754 var keys = Object.keys(add);
7755 var i = keys.length;
7756 while (i--) {
7757 origin[keys[i]] = add[keys[i]];
7758 }
7759 return origin;
7760};
7761
7762function hasOwnProperty(obj, prop) {
7763 return Object.prototype.hasOwnProperty.call(obj, prop);
7764}
7765
7766}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7767},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7768// Base58 encoding/decoding
7769// Originally written by Mike Hearn for BitcoinJ
7770// Copyright (c) 2011 Google Inc
7771// Ported to JavaScript by Stefan Thomas
7772// Merged Buffer refactorings from base58-native by Stephen Pair
7773// Copyright (c) 2013 BitPay Inc
7774
ebd8d4e8 7775var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7776var ALPHABET_MAP = {}
7777for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7778 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7779}
ab78acc6 7780var BASE = 58
ebd8d4e8
IC
7781
7782function encode(buffer) {
ab78acc6
IC
7783 if (buffer.length === 0) return ''
7784
7785 var i, j, digits = [0]
7786 for (i = 0; i < buffer.length; i++) {
7787 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7788
7789 digits[0] += buffer[i]
ebd8d4e8 7790
ab78acc6
IC
7791 var carry = 0
7792 for (j = 0; j < digits.length; ++j) {
7793 digits[j] += carry
ebd8d4e8 7794
ab78acc6
IC
7795 carry = (digits[j] / BASE) | 0
7796 digits[j] %= BASE
7797 }
7798
7799 while (carry) {
7800 digits.push(carry % BASE)
7801
7802 carry = (carry / BASE) | 0
7803 }
ebd8d4e8
IC
7804 }
7805
7806 // deal with leading zeros
ab78acc6 7807 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7808
ab78acc6
IC
7809 // convert digits to a string
7810 var stringOutput = ""
7811 for (var i = digits.length - 1; i >= 0; i--) {
7812 stringOutput = stringOutput + ALPHABET[digits[i]]
7813 }
7814 return stringOutput
ebd8d4e8
IC
7815}
7816
7817function decode(string) {
ab78acc6 7818 if (string.length === 0) return []
ebd8d4e8 7819
ab78acc6
IC
7820 var i, j, bytes = [0]
7821 for (i = 0; i < string.length; i++) {
7822 var c = string[i]
7823 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7824
ab78acc6
IC
7825 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7826 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7827
ab78acc6
IC
7828 var carry = 0
7829 for (j = 0; j < bytes.length; ++j) {
7830 bytes[j] += carry
ebd8d4e8 7831
ab78acc6
IC
7832 carry = bytes[j] >> 8
7833 bytes[j] &= 0xff
7834 }
ebd8d4e8 7835
ab78acc6
IC
7836 while (carry) {
7837 bytes.push(carry & 0xff)
7838
7839 carry >>= 8
7840 }
ebd8d4e8
IC
7841 }
7842
ab78acc6
IC
7843 // deal with leading zeros
7844 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7845
ab78acc6 7846 return bytes.reverse()
ebd8d4e8
IC
7847}
7848
7849module.exports = {
7850 encode: encode,
7851 decode: decode
7852}
7853
ab78acc6 7854},{}],31:[function(require,module,exports){
ebd8d4e8 7855(function (Buffer){
ab78acc6
IC
7856'use strict'
7857
7858var base58 = require('bs58')
7859var createHash = require('create-hash')
7860
7861// SHA256(SHA256(buffer))
7862function sha256x2 (buffer) {
7863 buffer = createHash('sha256').update(buffer).digest()
7864 return createHash('sha256').update(buffer).digest()
7865}
7866
7867// Encode a buffer as a base58-check encoded string
7868function encode (payload) {
7869 var checksum = sha256x2(payload).slice(0, 4)
7870
7871 return base58.encode(Buffer.concat([
7872 payload,
7873 checksum
7874 ]))
7875}
7876
7877// Decode a base58-check encoded string to a buffer
7878function decode (string) {
7879 var buffer = new Buffer(base58.decode(string))
7880
7881 var payload = buffer.slice(0, -4)
7882 var checksum = buffer.slice(-4)
7883 var newChecksum = sha256x2(payload).slice(0, 4)
7884
7885 for (var i = 0; i < newChecksum.length; ++i) {
7886 if (newChecksum[i] === checksum[i]) continue
7887
7888 throw new Error('Invalid checksum')
ebd8d4e8 7889 }
ab78acc6
IC
7890
7891 return payload
ebd8d4e8
IC
7892}
7893
ab78acc6
IC
7894module.exports = {
7895 encode: encode,
7896 decode: decode
ebd8d4e8
IC
7897}
7898
ab78acc6
IC
7899}).call(this,require("buffer").Buffer)
7900},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7901(function (Buffer){
ab78acc6
IC
7902'use strict';
7903var inherits = require('inherits')
7904var md5 = require('./md5')
7905var rmd160 = require('ripemd160')
7906var sha = require('sha.js')
ebd8d4e8 7907
ab78acc6 7908var Transform = require('stream').Transform
ebd8d4e8 7909
ab78acc6
IC
7910function HashNoConstructor(hash) {
7911 Transform.call(this)
ebd8d4e8 7912
ab78acc6
IC
7913 this._hash = hash
7914 this.buffers = []
7915}
ebd8d4e8 7916
ab78acc6 7917inherits(HashNoConstructor, Transform)
ebd8d4e8 7918
ab78acc6
IC
7919HashNoConstructor.prototype._transform = function (data, _, next) {
7920 this.buffers.push(data)
ebd8d4e8 7921
ab78acc6
IC
7922 next()
7923}
ebd8d4e8 7924
ab78acc6
IC
7925HashNoConstructor.prototype._flush = function (next) {
7926 this.push(this.digest())
7927 next()
7928}
7929
7930HashNoConstructor.prototype.update = function (data, enc) {
7931 if (typeof data === 'string') {
7932 data = new Buffer(data, enc)
ebd8d4e8
IC
7933 }
7934
ab78acc6
IC
7935 this.buffers.push(data)
7936 return this
7937}
7938
7939HashNoConstructor.prototype.digest = function (enc) {
7940 var buf = Buffer.concat(this.buffers)
7941 var r = this._hash(buf)
7942 this.buffers = null
7943
7944 return enc ? r.toString(enc) : r
7945}
7946
7947function Hash(hash) {
7948 Transform.call(this)
7949
7950 this._hash = hash
7951}
7952
7953inherits(Hash, Transform)
7954
7955Hash.prototype._transform = function (data, enc, next) {
7956 if (enc) data = new Buffer(data, enc)
7957
7958 this._hash.update(data)
7959
7960 next()
ebd8d4e8
IC
7961}
7962
ab78acc6
IC
7963Hash.prototype._flush = function (next) {
7964 this.push(this._hash.digest())
7965 this._hash = null
7966
7967 next()
7968}
7969
7970Hash.prototype.update = function (data, enc) {
7971 if (typeof data === 'string') {
7972 data = new Buffer(data, enc)
7973 }
7974
7975 this._hash.update(data)
ebd8d4e8
IC
7976 return this
7977}
7978
ab78acc6
IC
7979Hash.prototype.digest = function (enc) {
7980 var outData = this._hash.digest()
7981
7982 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7983}
7984
ab78acc6
IC
7985module.exports = function createHash (alg) {
7986 if ('md5' === alg) return new HashNoConstructor(md5)
7987 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7988
7989 return new Hash(sha(alg))
7990}
ebd8d4e8 7991
ab78acc6
IC
7992}).call(this,require("buffer").Buffer)
7993},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 7994(function (Buffer){
ab78acc6 7995'use strict';
ebd8d4e8
IC
7996var intSize = 4;
7997var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7998var chrsz = 8;
7999
8000function toArray(buf, bigEndian) {
8001 if ((buf.length % intSize) !== 0) {
8002 var len = buf.length + (intSize - (buf.length % intSize));
8003 buf = Buffer.concat([buf, zeroBuffer], len);
8004 }
8005
8006 var arr = [];
8007 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8008 for (var i = 0; i < buf.length; i += intSize) {
8009 arr.push(fn.call(buf, i));
8010 }
8011 return arr;
8012}
8013
8014function toBuffer(arr, size, bigEndian) {
8015 var buf = new Buffer(size);
8016 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8017 for (var i = 0; i < arr.length; i++) {
8018 fn.call(buf, arr[i], i * 4, true);
8019 }
8020 return buf;
8021}
8022
8023function hash(buf, fn, hashSize, bigEndian) {
8024 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8025 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8026 return toBuffer(arr, hashSize, bigEndian);
8027}
ab78acc6
IC
8028exports.hash = hash;
8029}).call(this,require("buffer").Buffer)
8030},{"buffer":7}],34:[function(require,module,exports){
8031'use strict';
ebd8d4e8
IC
8032/*
8033 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8034 * Digest Algorithm, as defined in RFC 1321.
8035 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8036 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8037 * Distributed under the BSD License
8038 * See http://pajhome.org.uk/crypt/md5 for more info.
8039 */
8040
ab78acc6 8041var helpers = require('./helpers');
ebd8d4e8
IC
8042
8043/*
8044 * Calculate the MD5 of an array of little-endian words, and a bit length
8045 */
8046function core_md5(x, len)
8047{
8048 /* append padding */
8049 x[len >> 5] |= 0x80 << ((len) % 32);
8050 x[(((len + 64) >>> 9) << 4) + 14] = len;
8051
8052 var a = 1732584193;
8053 var b = -271733879;
8054 var c = -1732584194;
8055 var d = 271733878;
8056
8057 for(var i = 0; i < x.length; i += 16)
8058 {
8059 var olda = a;
8060 var oldb = b;
8061 var oldc = c;
8062 var oldd = d;
8063
8064 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8065 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8066 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8067 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8068 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8069 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8070 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8071 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8072 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8073 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8074 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8075 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8076 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8077 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8078 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8079 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8080
8081 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8082 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8083 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8084 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8085 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8086 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8087 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8088 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8089 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8090 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8091 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8092 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8093 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8094 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8095 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8096 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8097
8098 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8099 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8100 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8101 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8102 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8103 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8104 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8105 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8106 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8107 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8108 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8109 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8110 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8111 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8112 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8113 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8114
8115 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8116 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8117 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8118 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8119 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8120 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8121 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8122 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8123 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8124 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8125 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8126 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8127 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8128 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8129 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8130 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8131
8132 a = safe_add(a, olda);
8133 b = safe_add(b, oldb);
8134 c = safe_add(c, oldc);
8135 d = safe_add(d, oldd);
8136 }
8137 return Array(a, b, c, d);
8138
8139}
8140
8141/*
8142 * These functions implement the four basic operations the algorithm uses.
8143 */
8144function md5_cmn(q, a, b, x, s, t)
8145{
8146 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8147}
8148function md5_ff(a, b, c, d, x, s, t)
8149{
8150 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8151}
8152function md5_gg(a, b, c, d, x, s, t)
8153{
8154 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8155}
8156function md5_hh(a, b, c, d, x, s, t)
8157{
8158 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8159}
8160function md5_ii(a, b, c, d, x, s, t)
8161{
8162 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8163}
8164
8165/*
8166 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8167 * to work around bugs in some JS interpreters.
8168 */
8169function safe_add(x, y)
8170{
8171 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8172 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8173 return (msw << 16) | (lsw & 0xFFFF);
8174}
8175
8176/*
8177 * Bitwise rotate a 32-bit number to the left.
8178 */
8179function bit_rol(num, cnt)
8180{
8181 return (num << cnt) | (num >>> (32 - cnt));
8182}
8183
8184module.exports = function md5(buf) {
8185 return helpers.hash(buf, core_md5, 16);
8186};
ab78acc6
IC
8187},{"./helpers":33}],35:[function(require,module,exports){
8188arguments[4][12][0].apply(exports,arguments)
8189},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8190(function (Buffer){
ebd8d4e8
IC
8191/*
8192CryptoJS v3.1.2
8193code.google.com/p/crypto-js
8194(c) 2009-2013 by Jeff Mott. All rights reserved.
8195code.google.com/p/crypto-js/wiki/License
8196*/
8197/** @preserve
8198(c) 2012 by Cédric Mesnil. All rights reserved.
8199
8200Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8201
8202 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8203 - 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.
8204
8205THIS 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.
8206*/
8207
ab78acc6 8208// constants table
ebd8d4e8 8209var zl = [
ab78acc6
IC
8210 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8211 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8212 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8213 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8214 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8215]
8216
ebd8d4e8 8217var zr = [
ab78acc6
IC
8218 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8219 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8220 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8221 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8222 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8223]
8224
ebd8d4e8 8225var sl = [
ab78acc6
IC
8226 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8227 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8228 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8229 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8230 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8231]
8232
ebd8d4e8 8233var sr = [
ab78acc6
IC
8234 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8235 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8236 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8237 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8238 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8239]
ebd8d4e8 8240
ab78acc6
IC
8241var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8242var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8243
ab78acc6
IC
8244function bytesToWords (bytes) {
8245 var words = []
ebd8d4e8 8246 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8247 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8248 }
ab78acc6
IC
8249 return words
8250}
ebd8d4e8 8251
ab78acc6
IC
8252function wordsToBytes (words) {
8253 var bytes = []
ebd8d4e8 8254 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8255 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8256 }
ab78acc6
IC
8257 return bytes
8258}
ebd8d4e8 8259
ab78acc6
IC
8260function processBlock (H, M, offset) {
8261 // swap endian
ebd8d4e8 8262 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8263 var offset_i = offset + i
8264 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8265
8266 // Swap
8267 M[offset_i] = (
ab78acc6
IC
8268 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8269 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8270 )
ebd8d4e8
IC
8271 }
8272
8273 // Working variables
ab78acc6
IC
8274 var al, bl, cl, dl, el
8275 var ar, br, cr, dr, er
8276
8277 ar = al = H[0]
8278 br = bl = H[1]
8279 cr = cl = H[2]
8280 dr = dl = H[3]
8281 er = el = H[4]
8282
8283 // computation
8284 var t
8285 for (i = 0; i < 80; i += 1) {
8286 t = (al + M[offset + zl[i]]) | 0
8287 if (i < 16) {
8288 t += f1(bl, cl, dl) + hl[0]
8289 } else if (i < 32) {
8290 t += f2(bl, cl, dl) + hl[1]
8291 } else if (i < 48) {
8292 t += f3(bl, cl, dl) + hl[2]
8293 } else if (i < 64) {
8294 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8295 } else {// if (i<80) {
ab78acc6
IC
8296 t += f5(bl, cl, dl) + hl[4]
8297 }
8298 t = t | 0
8299 t = rotl(t, sl[i])
8300 t = (t + el) | 0
8301 al = el
8302 el = dl
8303 dl = rotl(cl, 10)
8304 cl = bl
8305 bl = t
8306
8307 t = (ar + M[offset + zr[i]]) | 0
8308 if (i < 16) {
8309 t += f5(br, cr, dr) + hr[0]
8310 } else if (i < 32) {
8311 t += f4(br, cr, dr) + hr[1]
8312 } else if (i < 48) {
8313 t += f3(br, cr, dr) + hr[2]
8314 } else if (i < 64) {
8315 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8316 } else {// if (i<80) {
ab78acc6 8317 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8318 }
ebd8d4e8 8319
ab78acc6
IC
8320 t = t | 0
8321 t = rotl(t, sr[i])
8322 t = (t + er) | 0
8323 ar = er
8324 er = dr
8325 dr = rotl(cr, 10)
8326 cr = br
8327 br = t
8328 }
8329
8330 // intermediate hash value
8331 t = (H[1] + cl + dr) | 0
8332 H[1] = (H[2] + dl + er) | 0
8333 H[2] = (H[3] + el + ar) | 0
8334 H[3] = (H[4] + al + br) | 0
8335 H[4] = (H[0] + bl + cr) | 0
8336 H[0] = t
ebd8d4e8
IC
8337}
8338
ab78acc6
IC
8339function f1 (x, y, z) {
8340 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8341}
8342
ab78acc6
IC
8343function f2 (x, y, z) {
8344 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8345}
8346
ab78acc6
IC
8347function f3 (x, y, z) {
8348 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8349}
8350
ab78acc6
IC
8351function f4 (x, y, z) {
8352 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8353}
8354
ab78acc6
IC
8355function f5 (x, y, z) {
8356 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8357}
8358
ab78acc6
IC
8359function rotl (x, n) {
8360 return (x << n) | (x >>> (32 - n))
8361}
8362
8363function ripemd160 (message) {
8364 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8365
ab78acc6
IC
8366 if (typeof message === 'string') {
8367 message = new Buffer(message, 'utf8')
8368 }
ebd8d4e8 8369
ab78acc6 8370 var m = bytesToWords(message)
ebd8d4e8 8371
ab78acc6
IC
8372 var nBitsLeft = message.length * 8
8373 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8374
8375 // Add padding
ab78acc6 8376 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8377 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8378 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8379 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8380 )
ebd8d4e8 8381
ab78acc6
IC
8382 for (var i = 0; i < m.length; i += 16) {
8383 processBlock(H, m, i)
ebd8d4e8
IC
8384 }
8385
ab78acc6
IC
8386 // swap endian
8387 for (i = 0; i < 5; i++) {
8388 // shortcut
8389 var H_i = H[i]
ebd8d4e8
IC
8390
8391 // Swap
ab78acc6
IC
8392 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8393 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8394 }
8395
ab78acc6
IC
8396 var digestbytes = wordsToBytes(H)
8397 return new Buffer(digestbytes)
ebd8d4e8
IC
8398}
8399
ab78acc6
IC
8400module.exports = ripemd160
8401
8402}).call(this,require("buffer").Buffer)
8403},{"buffer":7}],37:[function(require,module,exports){
8404(function (Buffer){
8405// prototype class for hash functions
8406function Hash (blockSize, finalSize) {
8407 this._block = new Buffer(blockSize)
8408 this._finalSize = finalSize
8409 this._blockSize = blockSize
8410 this._len = 0
8411 this._s = 0
8412}
ebd8d4e8 8413
ab78acc6
IC
8414Hash.prototype.update = function (data, enc) {
8415 if (typeof data === 'string') {
8416 enc = enc || 'utf8'
8417 data = new Buffer(data, enc)
8418 }
ebd8d4e8 8419
ab78acc6
IC
8420 var l = this._len += data.length
8421 var s = this._s || 0
8422 var f = 0
8423 var buffer = this._block
ebd8d4e8 8424
ab78acc6
IC
8425 while (s < l) {
8426 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8427 var ch = (t - f)
ebd8d4e8 8428
ab78acc6
IC
8429 for (var i = 0; i < ch; i++) {
8430 buffer[(s % this._blockSize) + i] = data[i + f]
8431 }
8432
8433 s += ch
8434 f += ch
ebd8d4e8 8435
ab78acc6
IC
8436 if ((s % this._blockSize) === 0) {
8437 this._update(buffer)
8438 }
ebd8d4e8 8439 }
ab78acc6
IC
8440 this._s = s
8441
8442 return this
8443}
ebd8d4e8 8444
ab78acc6
IC
8445Hash.prototype.digest = function (enc) {
8446 // Suppose the length of the message M, in bits, is l
8447 var l = this._len * 8
8448
8449 // Append the bit 1 to the end of the message
8450 this._block[this._len % this._blockSize] = 0x80
8451
8452 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8453 this._block.fill(0, this._len % this._blockSize + 1)
8454
8455 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8456 this._update(this._block)
8457 this._block.fill(0)
ebd8d4e8
IC
8458 }
8459
ab78acc6
IC
8460 // to this append the block which is equal to the number l written in binary
8461 // TODO: handle case where l is > Math.pow(2, 29)
8462 this._block.writeInt32BE(l, this._blockSize - 4)
8463
8464 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8465
ab78acc6
IC
8466 return enc ? hash.toString(enc) : hash
8467}
ebd8d4e8 8468
ab78acc6
IC
8469Hash.prototype._update = function () {
8470 throw new Error('_update must be implemented by subclass')
8471}
ebd8d4e8 8472
ab78acc6 8473module.exports = Hash
ebd8d4e8 8474
ab78acc6
IC
8475}).call(this,require("buffer").Buffer)
8476},{"buffer":7}],38:[function(require,module,exports){
8477var exports = module.exports = function SHA (algorithm) {
8478 algorithm = algorithm.toLowerCase()
ebd8d4e8 8479
ab78acc6
IC
8480 var Algorithm = exports[algorithm]
8481 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8482
ab78acc6
IC
8483 return new Algorithm()
8484}
8485
8486exports.sha = require('./sha')
8487exports.sha1 = require('./sha1')
8488exports.sha224 = require('./sha224')
8489exports.sha256 = require('./sha256')
8490exports.sha384 = require('./sha384')
8491exports.sha512 = require('./sha512')
8492
8493},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8494(function (Buffer){
8495/*
8496 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8497 * in FIPS PUB 180-1
8498 * This source code is derived from sha1.js of the same repository.
8499 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8500 * operation was added.
8501 */
ebd8d4e8 8502
ab78acc6
IC
8503var inherits = require('inherits')
8504var Hash = require('./hash')
ebd8d4e8 8505
ab78acc6 8506var W = new Array(80)
ebd8d4e8 8507
ab78acc6
IC
8508function Sha () {
8509 this.init()
8510 this._w = W
ebd8d4e8 8511
ab78acc6
IC
8512 Hash.call(this, 64, 56)
8513}
ebd8d4e8 8514
ab78acc6 8515inherits(Sha, Hash)
ebd8d4e8 8516
ab78acc6
IC
8517Sha.prototype.init = function () {
8518 this._a = 0x67452301 | 0
8519 this._b = 0xefcdab89 | 0
8520 this._c = 0x98badcfe | 0
8521 this._d = 0x10325476 | 0
8522 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8523
ab78acc6
IC
8524 return this
8525}
8526
8527/*
8528 * Bitwise rotate a 32-bit number to the left.
8529 */
8530function rol (num, cnt) {
8531 return (num << cnt) | (num >>> (32 - cnt))
8532}
8533
8534Sha.prototype._update = function (M) {
8535 var W = this._w
8536
8537 var a = this._a
8538 var b = this._b
8539 var c = this._c
8540 var d = this._d
8541 var e = this._e
ebd8d4e8 8542
ab78acc6
IC
8543 var j = 0, k
8544
8545 /*
8546 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8547 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8548 */
8549 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8550 function loop (w, f) {
8551 W[j] = w
8552
8553 var t = rol(a, 5) + f + e + w + k
8554
8555 e = d
8556 d = c
8557 c = rol(b, 30)
8558 b = a
8559 a = t
8560 j++
ebd8d4e8
IC
8561 }
8562
ab78acc6
IC
8563 k = 1518500249
8564 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8565 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8566 k = 1859775393
8567 while (j < 40) loop(calcW(), b ^ c ^ d)
8568 k = -1894007588
8569 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8570 k = -899497514
8571 while (j < 80) loop(calcW(), b ^ c ^ d)
8572
8573 this._a = (a + this._a) | 0
8574 this._b = (b + this._b) | 0
8575 this._c = (c + this._c) | 0
8576 this._d = (d + this._d) | 0
8577 this._e = (e + this._e) | 0
ebd8d4e8
IC
8578}
8579
ab78acc6
IC
8580Sha.prototype._hash = function () {
8581 var H = new Buffer(20)
8582
8583 H.writeInt32BE(this._a | 0, 0)
8584 H.writeInt32BE(this._b | 0, 4)
8585 H.writeInt32BE(this._c | 0, 8)
8586 H.writeInt32BE(this._d | 0, 12)
8587 H.writeInt32BE(this._e | 0, 16)
8588
8589 return H
ebd8d4e8
IC
8590}
8591
ab78acc6 8592module.exports = Sha
ebd8d4e8 8593
ebd8d4e8 8594
ab78acc6
IC
8595}).call(this,require("buffer").Buffer)
8596},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8597(function (Buffer){
ebd8d4e8
IC
8598/*
8599 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8600 * in FIPS PUB 180-1
8601 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8602 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8603 * Distributed under the BSD License
8604 * See http://pajhome.org.uk/crypt/md5 for details.
8605 */
ebd8d4e8 8606
ab78acc6
IC
8607var inherits = require('inherits')
8608var Hash = require('./hash')
ebd8d4e8 8609
ab78acc6 8610var W = new Array(80)
ebd8d4e8 8611
ab78acc6
IC
8612function Sha1 () {
8613 this.init()
8614 this._w = W
ebd8d4e8 8615
ab78acc6
IC
8616 Hash.call(this, 64, 56)
8617}
ebd8d4e8 8618
ab78acc6 8619inherits(Sha1, Hash)
ebd8d4e8 8620
ab78acc6
IC
8621Sha1.prototype.init = function () {
8622 this._a = 0x67452301 | 0
8623 this._b = 0xefcdab89 | 0
8624 this._c = 0x98badcfe | 0
8625 this._d = 0x10325476 | 0
8626 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8627
ab78acc6
IC
8628 return this
8629}
ebd8d4e8 8630
ab78acc6
IC
8631/*
8632 * Bitwise rotate a 32-bit number to the left.
8633 */
8634function rol (num, cnt) {
8635 return (num << cnt) | (num >>> (32 - cnt))
8636}
ebd8d4e8 8637
ab78acc6
IC
8638Sha1.prototype._update = function (M) {
8639 var W = this._w
ebd8d4e8 8640
ab78acc6
IC
8641 var a = this._a
8642 var b = this._b
8643 var c = this._c
8644 var d = this._d
8645 var e = this._e
ebd8d4e8 8646
ab78acc6 8647 var j = 0, k
ebd8d4e8 8648
ab78acc6
IC
8649 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8650 function loop (w, f) {
8651 W[j] = w
ebd8d4e8 8652
ab78acc6 8653 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8654
ab78acc6
IC
8655 e = d
8656 d = c
8657 c = rol(b, 30)
8658 b = a
8659 a = t
8660 j++
ebd8d4e8
IC
8661 }
8662
ab78acc6
IC
8663 k = 1518500249
8664 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8665 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8666 k = 1859775393
8667 while (j < 40) loop(calcW(), b ^ c ^ d)
8668 k = -1894007588
8669 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8670 k = -899497514
8671 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8672
ab78acc6
IC
8673 this._a = (a + this._a) | 0
8674 this._b = (b + this._b) | 0
8675 this._c = (c + this._c) | 0
8676 this._d = (d + this._d) | 0
8677 this._e = (e + this._e) | 0
8678}
ebd8d4e8 8679
ab78acc6
IC
8680Sha1.prototype._hash = function () {
8681 var H = new Buffer(20)
ebd8d4e8 8682
ab78acc6
IC
8683 H.writeInt32BE(this._a | 0, 0)
8684 H.writeInt32BE(this._b | 0, 4)
8685 H.writeInt32BE(this._c | 0, 8)
8686 H.writeInt32BE(this._d | 0, 12)
8687 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8688
ab78acc6
IC
8689 return H
8690}
ebd8d4e8 8691
ab78acc6 8692module.exports = Sha1
ebd8d4e8 8693
ab78acc6
IC
8694}).call(this,require("buffer").Buffer)
8695},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8696(function (Buffer){
8697/**
8698 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8699 * in FIPS 180-2
8700 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8701 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8702 *
8703 */
ebd8d4e8 8704
ab78acc6
IC
8705var inherits = require('inherits')
8706var Sha256 = require('./sha256')
8707var Hash = require('./hash')
ebd8d4e8 8708
ab78acc6 8709var W = new Array(64)
ebd8d4e8 8710
ab78acc6
IC
8711function Sha224 () {
8712 this.init()
ebd8d4e8 8713
ab78acc6 8714 this._w = W // new Array(64)
ebd8d4e8 8715
ab78acc6
IC
8716 Hash.call(this, 64, 56)
8717}
ebd8d4e8 8718
ab78acc6 8719inherits(Sha224, Sha256)
ebd8d4e8 8720
ab78acc6
IC
8721Sha224.prototype.init = function () {
8722 this._a = 0xc1059ed8 | 0
8723 this._b = 0x367cd507 | 0
8724 this._c = 0x3070dd17 | 0
8725 this._d = 0xf70e5939 | 0
8726 this._e = 0xffc00b31 | 0
8727 this._f = 0x68581511 | 0
8728 this._g = 0x64f98fa7 | 0
8729 this._h = 0xbefa4fa4 | 0
8730
8731 return this
8732}
8733
8734Sha224.prototype._hash = function () {
8735 var H = new Buffer(28)
8736
8737 H.writeInt32BE(this._a, 0)
8738 H.writeInt32BE(this._b, 4)
8739 H.writeInt32BE(this._c, 8)
8740 H.writeInt32BE(this._d, 12)
8741 H.writeInt32BE(this._e, 16)
8742 H.writeInt32BE(this._f, 20)
8743 H.writeInt32BE(this._g, 24)
8744
8745 return H
ebd8d4e8
IC
8746}
8747
ab78acc6 8748module.exports = Sha224
ebd8d4e8 8749
ab78acc6
IC
8750}).call(this,require("buffer").Buffer)
8751},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8752(function (Buffer){
ebd8d4e8
IC
8753/**
8754 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8755 * in FIPS 180-2
8756 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8757 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8758 *
8759 */
8760
ab78acc6
IC
8761var inherits = require('inherits')
8762var Hash = require('./hash')
8763
8764var K = [
8765 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8766 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8767 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8768 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8769 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8770 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8771 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8772 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8773 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8774 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8775 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8776 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8777 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8778 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8779 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8780 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8781]
8782
8783var W = new Array(64)
8784
8785function Sha256 () {
8786 this.init()
8787
8788 this._w = W // new Array(64)
8789
8790 Hash.call(this, 64, 56)
8791}
8792
8793inherits(Sha256, Hash)
8794
8795Sha256.prototype.init = function () {
8796 this._a = 0x6a09e667 | 0
8797 this._b = 0xbb67ae85 | 0
8798 this._c = 0x3c6ef372 | 0
8799 this._d = 0xa54ff53a | 0
8800 this._e = 0x510e527f | 0
8801 this._f = 0x9b05688c | 0
8802 this._g = 0x1f83d9ab | 0
8803 this._h = 0x5be0cd19 | 0
ebd8d4e8 8804
ab78acc6
IC
8805 return this
8806}
ebd8d4e8 8807
ab78acc6
IC
8808function S (X, n) {
8809 return (X >>> n) | (X << (32 - n))
8810}
ebd8d4e8 8811
ab78acc6
IC
8812function R (X, n) {
8813 return (X >>> n)
8814}
ebd8d4e8 8815
ab78acc6
IC
8816function Ch (x, y, z) {
8817 return ((x & y) ^ ((~x) & z))
8818}
ebd8d4e8 8819
ab78acc6
IC
8820function Maj (x, y, z) {
8821 return ((x & y) ^ (x & z) ^ (y & z))
8822}
ebd8d4e8 8823
ab78acc6
IC
8824function Sigma0256 (x) {
8825 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8826}
ebd8d4e8 8827
ab78acc6
IC
8828function Sigma1256 (x) {
8829 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8830}
ebd8d4e8 8831
ab78acc6
IC
8832function Gamma0256 (x) {
8833 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8834}
ebd8d4e8 8835
ab78acc6
IC
8836function Gamma1256 (x) {
8837 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8838}
ebd8d4e8 8839
ab78acc6
IC
8840Sha256.prototype._update = function (M) {
8841 var W = this._w
ebd8d4e8 8842
ab78acc6
IC
8843 var a = this._a | 0
8844 var b = this._b | 0
8845 var c = this._c | 0
8846 var d = this._d | 0
8847 var e = this._e | 0
8848 var f = this._f | 0
8849 var g = this._g | 0
8850 var h = this._h | 0
ebd8d4e8 8851
ab78acc6 8852 var j = 0
ebd8d4e8 8853
ab78acc6
IC
8854 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8855 function loop (w) {
8856 W[j] = w
ebd8d4e8 8857
ab78acc6
IC
8858 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8859 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8860
ab78acc6
IC
8861 h = g
8862 g = f
8863 f = e
8864 e = d + T1
8865 d = c
8866 c = b
8867 b = a
8868 a = T1 + T2
ebd8d4e8 8869
ab78acc6 8870 j++
ebd8d4e8
IC
8871 }
8872
ab78acc6
IC
8873 while (j < 16) loop(M.readInt32BE(j * 4))
8874 while (j < 64) loop(calcW())
ebd8d4e8 8875
ab78acc6
IC
8876 this._a = (a + this._a) | 0
8877 this._b = (b + this._b) | 0
8878 this._c = (c + this._c) | 0
8879 this._d = (d + this._d) | 0
8880 this._e = (e + this._e) | 0
8881 this._f = (f + this._f) | 0
8882 this._g = (g + this._g) | 0
8883 this._h = (h + this._h) | 0
8884}
ebd8d4e8 8885
ab78acc6
IC
8886Sha256.prototype._hash = function () {
8887 var H = new Buffer(32)
ebd8d4e8 8888
ab78acc6
IC
8889 H.writeInt32BE(this._a, 0)
8890 H.writeInt32BE(this._b, 4)
8891 H.writeInt32BE(this._c, 8)
8892 H.writeInt32BE(this._d, 12)
8893 H.writeInt32BE(this._e, 16)
8894 H.writeInt32BE(this._f, 20)
8895 H.writeInt32BE(this._g, 24)
8896 H.writeInt32BE(this._h, 28)
ebd8d4e8 8897
ab78acc6
IC
8898 return H
8899}
ebd8d4e8 8900
ab78acc6 8901module.exports = Sha256
ebd8d4e8 8902
ab78acc6
IC
8903}).call(this,require("buffer").Buffer)
8904},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8905(function (Buffer){
8906var inherits = require('inherits')
8907var SHA512 = require('./sha512')
8908var Hash = require('./hash')
ebd8d4e8 8909
ab78acc6 8910var W = new Array(160)
ebd8d4e8 8911
ab78acc6
IC
8912function Sha384 () {
8913 this.init()
8914 this._w = W
ebd8d4e8 8915
ab78acc6
IC
8916 Hash.call(this, 128, 112)
8917}
ebd8d4e8 8918
ab78acc6 8919inherits(Sha384, SHA512)
ebd8d4e8 8920
ab78acc6
IC
8921Sha384.prototype.init = function () {
8922 this._a = 0xcbbb9d5d | 0
8923 this._b = 0x629a292a | 0
8924 this._c = 0x9159015a | 0
8925 this._d = 0x152fecd8 | 0
8926 this._e = 0x67332667 | 0
8927 this._f = 0x8eb44a87 | 0
8928 this._g = 0xdb0c2e0d | 0
8929 this._h = 0x47b5481d | 0
ebd8d4e8 8930
ab78acc6
IC
8931 this._al = 0xc1059ed8 | 0
8932 this._bl = 0x367cd507 | 0
8933 this._cl = 0x3070dd17 | 0
8934 this._dl = 0xf70e5939 | 0
8935 this._el = 0xffc00b31 | 0
8936 this._fl = 0x68581511 | 0
8937 this._gl = 0x64f98fa7 | 0
8938 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8939
ab78acc6 8940 return this
ebd8d4e8
IC
8941}
8942
ab78acc6
IC
8943Sha384.prototype._hash = function () {
8944 var H = new Buffer(48)
ebd8d4e8 8945
ab78acc6
IC
8946 function writeInt64BE (h, l, offset) {
8947 H.writeInt32BE(h, offset)
8948 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8949 }
ebd8d4e8 8950
ab78acc6
IC
8951 writeInt64BE(this._a, this._al, 0)
8952 writeInt64BE(this._b, this._bl, 8)
8953 writeInt64BE(this._c, this._cl, 16)
8954 writeInt64BE(this._d, this._dl, 24)
8955 writeInt64BE(this._e, this._el, 32)
8956 writeInt64BE(this._f, this._fl, 40)
8957
8958 return H
ebd8d4e8
IC
8959}
8960
ab78acc6 8961module.exports = Sha384
ebd8d4e8 8962
ab78acc6
IC
8963}).call(this,require("buffer").Buffer)
8964},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8965(function (Buffer){
ab78acc6
IC
8966var inherits = require('inherits')
8967var Hash = require('./hash')
8968
8969var K = [
8970 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8971 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8972 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8973 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8974 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8975 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8976 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8977 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8978 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8979 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8980 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8981 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8982 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8983 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8984 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8985 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8986 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8987 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8988 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8989 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8990 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8991 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8992 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8993 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8994 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8995 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8996 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8997 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8998 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8999 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9000 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9001 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9002 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9003 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9004 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9005 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9006 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9007 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9008 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9009 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9010]
9011
9012var W = new Array(160)
9013
9014function Sha512 () {
9015 this.init()
9016 this._w = W
9017
9018 Hash.call(this, 128, 112)
9019}
9020
9021inherits(Sha512, Hash)
9022
9023Sha512.prototype.init = function () {
9024 this._a = 0x6a09e667 | 0
9025 this._b = 0xbb67ae85 | 0
9026 this._c = 0x3c6ef372 | 0
9027 this._d = 0xa54ff53a | 0
9028 this._e = 0x510e527f | 0
9029 this._f = 0x9b05688c | 0
9030 this._g = 0x1f83d9ab | 0
9031 this._h = 0x5be0cd19 | 0
9032
9033 this._al = 0xf3bcc908 | 0
9034 this._bl = 0x84caa73b | 0
9035 this._cl = 0xfe94f82b | 0
9036 this._dl = 0x5f1d36f1 | 0
9037 this._el = 0xade682d1 | 0
9038 this._fl = 0x2b3e6c1f | 0
9039 this._gl = 0xfb41bd6b | 0
9040 this._hl = 0x137e2179 | 0
ebd8d4e8 9041
ab78acc6 9042 return this
ebd8d4e8
IC
9043}
9044
ab78acc6
IC
9045function S (X, Xl, n) {
9046 return (X >>> n) | (Xl << (32 - n))
9047}
9048
9049function Ch (x, y, z) {
9050 return ((x & y) ^ ((~x) & z))
9051}
9052
9053function Maj (x, y, z) {
9054 return ((x & y) ^ (x & z) ^ (y & z))
9055}
9056
9057Sha512.prototype._update = function (M) {
9058 var W = this._w
9059
9060 var a = this._a | 0
9061 var b = this._b | 0
9062 var c = this._c | 0
9063 var d = this._d | 0
9064 var e = this._e | 0
9065 var f = this._f | 0
9066 var g = this._g | 0
9067 var h = this._h | 0
9068
9069 var al = this._al | 0
9070 var bl = this._bl | 0
9071 var cl = this._cl | 0
9072 var dl = this._dl | 0
9073 var el = this._el | 0
9074 var fl = this._fl | 0
9075 var gl = this._gl | 0
9076 var hl = this._hl | 0
9077
9078 var i = 0, j = 0
9079 var Wi, Wil
9080 function calcW () {
9081 var x = W[j - 15 * 2]
9082 var xl = W[j - 15 * 2 + 1]
9083 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9084 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9085
9086 x = W[j - 2 * 2]
9087 xl = W[j - 2 * 2 + 1]
9088 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9089 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9090
9091 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9092 var Wi7 = W[j - 7 * 2]
9093 var Wi7l = W[j - 7 * 2 + 1]
9094
9095 var Wi16 = W[j - 16 * 2]
9096 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9097
ab78acc6
IC
9098 Wil = gamma0l + Wi7l
9099 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9100 Wil = Wil + gamma1l
9101 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9102 Wil = Wil + Wi16l
9103 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9104 }
9105
9106 function loop () {
9107 W[j] = Wi
9108 W[j + 1] = Wil
ebd8d4e8 9109
ab78acc6
IC
9110 var maj = Maj(a, b, c)
9111 var majl = Maj(al, bl, cl)
ebd8d4e8 9112
ab78acc6
IC
9113 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9114 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9115 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9116 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9117
ab78acc6
IC
9118 // t1 = h + sigma1 + ch + K[i] + W[i]
9119 var Ki = K[j]
9120 var Kil = K[j + 1]
ebd8d4e8 9121
ab78acc6
IC
9122 var ch = Ch(e, f, g)
9123 var chl = Ch(el, fl, gl)
ebd8d4e8 9124
ab78acc6
IC
9125 var t1l = hl + sigma1l
9126 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9127 t1l = t1l + chl
9128 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9129 t1l = t1l + Kil
9130 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9131 t1l = t1l + Wil
9132 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9133
ab78acc6
IC
9134 // t2 = sigma0 + maj
9135 var t2l = sigma0l + majl
9136 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9137
ab78acc6
IC
9138 h = g
9139 hl = gl
9140 g = f
9141 gl = fl
9142 f = e
9143 fl = el
9144 el = (dl + t1l) | 0
9145 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9146 d = c
9147 dl = cl
9148 c = b
9149 cl = bl
9150 b = a
9151 bl = al
9152 al = (t1l + t2l) | 0
9153 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9154
9155 i++
9156 j += 2
9157 }
9158
9159 while (i < 16) {
9160 Wi = M.readInt32BE(j * 4)
9161 Wil = M.readInt32BE(j * 4 + 4)
9162
9163 loop()
9164 }
9165
9166 while (i < 80) {
9167 calcW()
9168 loop()
9169 }
9170
9171 this._al = (this._al + al) | 0
9172 this._bl = (this._bl + bl) | 0
9173 this._cl = (this._cl + cl) | 0
9174 this._dl = (this._dl + dl) | 0
9175 this._el = (this._el + el) | 0
9176 this._fl = (this._fl + fl) | 0
9177 this._gl = (this._gl + gl) | 0
9178 this._hl = (this._hl + hl) | 0
9179
9180 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9181 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9182 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9183 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9184 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9185 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9186 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9187 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9188}
9189
9190Sha512.prototype._hash = function () {
9191 var H = new Buffer(64)
9192
9193 function writeInt64BE (h, l, offset) {
9194 H.writeInt32BE(h, offset)
9195 H.writeInt32BE(l, offset + 4)
9196 }
9197
9198 writeInt64BE(this._a, this._al, 0)
9199 writeInt64BE(this._b, this._bl, 8)
9200 writeInt64BE(this._c, this._cl, 16)
9201 writeInt64BE(this._d, this._dl, 24)
9202 writeInt64BE(this._e, this._el, 32)
9203 writeInt64BE(this._f, this._fl, 40)
9204 writeInt64BE(this._g, this._gl, 48)
9205 writeInt64BE(this._h, this._hl, 56)
9206
9207 return H
9208}
9209
9210module.exports = Sha512
9211
9212}).call(this,require("buffer").Buffer)
9213},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9214(function (Buffer){
9215'use strict';
9216var createHash = require('create-hash/browser');
9217var inherits = require('inherits')
ebd8d4e8 9218
ab78acc6 9219var Transform = require('stream').Transform
ebd8d4e8 9220
ab78acc6
IC
9221var ZEROS = new Buffer(128)
9222ZEROS.fill(0)
ebd8d4e8 9223
ab78acc6
IC
9224function Hmac(alg, key) {
9225 Transform.call(this)
ebd8d4e8 9226
ab78acc6
IC
9227 if (typeof key === 'string') {
9228 key = new Buffer(key)
9229 }
ebd8d4e8 9230
ab78acc6 9231 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9232
ab78acc6
IC
9233 this._alg = alg
9234 this._key = key
ebd8d4e8 9235
ab78acc6
IC
9236 if (key.length > blocksize) {
9237 key = createHash(alg).update(key).digest()
ebd8d4e8 9238
ab78acc6
IC
9239 } else if (key.length < blocksize) {
9240 key = Buffer.concat([key, ZEROS], blocksize)
9241 }
ebd8d4e8 9242
ab78acc6
IC
9243 var ipad = this._ipad = new Buffer(blocksize)
9244 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9245
ab78acc6
IC
9246 for (var i = 0; i < blocksize; i++) {
9247 ipad[i] = key[i] ^ 0x36
9248 opad[i] = key[i] ^ 0x5C
9249 }
ebd8d4e8 9250
ab78acc6
IC
9251 this._hash = createHash(alg).update(ipad)
9252}
ebd8d4e8 9253
ab78acc6 9254inherits(Hmac, Transform)
ebd8d4e8 9255
ab78acc6
IC
9256Hmac.prototype.update = function (data, enc) {
9257 this._hash.update(data, enc)
ebd8d4e8 9258
ab78acc6
IC
9259 return this
9260}
ebd8d4e8 9261
ab78acc6
IC
9262Hmac.prototype._transform = function (data, _, next) {
9263 this._hash.update(data)
ebd8d4e8 9264
ab78acc6
IC
9265 next()
9266}
ebd8d4e8 9267
ab78acc6
IC
9268Hmac.prototype._flush = function (next) {
9269 this.push(this.digest())
ebd8d4e8 9270
ab78acc6
IC
9271 next()
9272}
ebd8d4e8 9273
ab78acc6
IC
9274Hmac.prototype.digest = function (enc) {
9275 var h = this._hash.digest()
ebd8d4e8 9276
ab78acc6
IC
9277 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9278}
ebd8d4e8 9279
ab78acc6
IC
9280module.exports = function createHmac(alg, key) {
9281 return new Hmac(alg, key)
9282}
ebd8d4e8 9283
ab78acc6
IC
9284}).call(this,require("buffer").Buffer)
9285},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9286arguments[4][12][0].apply(exports,arguments)
9287},{"dup":12}],47:[function(require,module,exports){
9288var assert = require('assert')
9289var BigInteger = require('bigi')
ebd8d4e8 9290
ab78acc6 9291var Point = require('./point')
ebd8d4e8
IC
9292
9293function Curve(p, a, b, Gx, Gy, n, h) {
9294 this.p = p
9295 this.a = a
9296 this.b = b
9297 this.G = Point.fromAffine(this, Gx, Gy)
9298 this.n = n
9299 this.h = h
9300
9301 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9302
9303 // result caching
9304 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9305}
9306
9307Curve.prototype.pointFromX = function(isOdd, x) {
9308 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9309 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9310
9311 var y = beta
9312 if (beta.isEven() ^ !isOdd) {
9313 y = this.p.subtract(y) // -y % p
9314 }
9315
9316 return Point.fromAffine(this, x, y)
9317}
9318
9319Curve.prototype.isInfinity = function(Q) {
9320 if (Q === this.infinity) return true
9321
9322 return Q.z.signum() === 0 && Q.y.signum() !== 0
9323}
9324
9325Curve.prototype.isOnCurve = function(Q) {
9326 if (this.isInfinity(Q)) return true
9327
9328 var x = Q.affineX
9329 var y = Q.affineY
9330 var a = this.a
9331 var b = this.b
9332 var p = this.p
9333
9334 // Check that xQ and yQ are integers in the interval [0, p - 1]
9335 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9336 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9337
9338 // and check that y^2 = x^3 + ax + b (mod p)
9339 var lhs = y.square().mod(p)
9340 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9341 return lhs.equals(rhs)
9342}
9343
9344/**
9345 * Validate an elliptic curve point.
9346 *
9347 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9348 */
9349Curve.prototype.validate = function(Q) {
9350 // Check Q != O
9351 assert(!this.isInfinity(Q), 'Point is at infinity')
9352 assert(this.isOnCurve(Q), 'Point is not on the curve')
9353
9354 // Check nQ = O (where Q is a scalar multiple of G)
9355 var nQ = Q.multiply(this.n)
9356 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9357
9358 return true
9359}
9360
9361module.exports = Curve
9362
ab78acc6 9363},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9364module.exports={
9365 "secp128r1": {
9366 "p": "fffffffdffffffffffffffffffffffff",
9367 "a": "fffffffdfffffffffffffffffffffffc",
9368 "b": "e87579c11079f43dd824993c2cee5ed3",
9369 "n": "fffffffe0000000075a30d1b9038a115",
9370 "h": "01",
9371 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9372 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9373 },
9374 "secp160k1": {
9375 "p": "fffffffffffffffffffffffffffffffeffffac73",
9376 "a": "00",
9377 "b": "07",
9378 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9379 "h": "01",
9380 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9381 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9382 },
9383 "secp160r1": {
9384 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9385 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9386 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9387 "n": "0100000000000000000001f4c8f927aed3ca752257",
9388 "h": "01",
9389 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9390 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9391 },
9392 "secp192k1": {
9393 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9394 "a": "00",
9395 "b": "03",
9396 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9397 "h": "01",
9398 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9399 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9400 },
9401 "secp192r1": {
9402 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9403 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9404 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9405 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9406 "h": "01",
9407 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9408 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9409 },
ebd8d4e8
IC
9410 "secp256k1": {
9411 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9412 "a": "00",
9413 "b": "07",
9414 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9415 "h": "01",
9416 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9417 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9418 },
9419 "secp256r1": {
9420 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9421 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9422 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9423 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9424 "h": "01",
9425 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9426 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9427 }
9428}
9429
ab78acc6
IC
9430},{}],49:[function(require,module,exports){
9431var Point = require('./point')
9432var Curve = require('./curve')
ebd8d4e8 9433
ab78acc6 9434var getCurveByName = require('./names')
ebd8d4e8
IC
9435
9436module.exports = {
9437 Curve: Curve,
9438 Point: Point,
9439 getCurveByName: getCurveByName
9440}
9441
ab78acc6
IC
9442},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9443var BigInteger = require('bigi')
ebd8d4e8 9444
ab78acc6
IC
9445var curves = require('./curves')
9446var Curve = require('./curve')
ebd8d4e8
IC
9447
9448function getCurveByName(name) {
9449 var curve = curves[name]
9450 if (!curve) return null
9451
9452 var p = new BigInteger(curve.p, 16)
9453 var a = new BigInteger(curve.a, 16)
9454 var b = new BigInteger(curve.b, 16)
9455 var n = new BigInteger(curve.n, 16)
9456 var h = new BigInteger(curve.h, 16)
9457 var Gx = new BigInteger(curve.Gx, 16)
9458 var Gy = new BigInteger(curve.Gy, 16)
9459
9460 return new Curve(p, a, b, Gx, Gy, n, h)
9461}
9462
9463module.exports = getCurveByName
9464
ab78acc6 9465},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9466(function (Buffer){
ab78acc6
IC
9467var assert = require('assert')
9468var BigInteger = require('bigi')
ebd8d4e8
IC
9469
9470var THREE = BigInteger.valueOf(3)
9471
9472function Point(curve, x, y, z) {
9473 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9474
9475 this.curve = curve
9476 this.x = x
9477 this.y = y
9478 this.z = z
9479 this._zInv = null
9480
9481 this.compressed = true
9482}
9483
9484Object.defineProperty(Point.prototype, 'zInv', {
9485 get: function() {
9486 if (this._zInv === null) {
9487 this._zInv = this.z.modInverse(this.curve.p)
9488 }
9489
9490 return this._zInv
9491 }
9492})
9493
9494Object.defineProperty(Point.prototype, 'affineX', {
9495 get: function() {
9496 return this.x.multiply(this.zInv).mod(this.curve.p)
9497 }
9498})
9499
9500Object.defineProperty(Point.prototype, 'affineY', {
9501 get: function() {
9502 return this.y.multiply(this.zInv).mod(this.curve.p)
9503 }
9504})
9505
9506Point.fromAffine = function(curve, x, y) {
9507 return new Point(curve, x, y, BigInteger.ONE)
9508}
9509
9510Point.prototype.equals = function(other) {
9511 if (other === this) return true
9512 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9513 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9514
9515 // u = Y2 * Z1 - Y1 * Z2
9516 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9517
9518 if (u.signum() !== 0) return false
9519
9520 // v = X2 * Z1 - X1 * Z2
9521 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9522
9523 return v.signum() === 0
9524}
9525
9526Point.prototype.negate = function() {
9527 var y = this.curve.p.subtract(this.y)
9528
9529 return new Point(this.curve, this.x, y, this.z)
9530}
9531
9532Point.prototype.add = function(b) {
9533 if (this.curve.isInfinity(this)) return b
9534 if (this.curve.isInfinity(b)) return this
9535
9536 var x1 = this.x
9537 var y1 = this.y
9538 var x2 = b.x
9539 var y2 = b.y
9540
9541 // u = Y2 * Z1 - Y1 * Z2
9542 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9543 // v = X2 * Z1 - X1 * Z2
9544 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9545
9546 if (v.signum() === 0) {
9547 if (u.signum() === 0) {
9548 return this.twice() // this == b, so double
9549 }
9550
9551 return this.curve.infinity // this = -b, so infinity
9552 }
9553
9554 var v2 = v.square()
9555 var v3 = v2.multiply(v)
9556 var x1v2 = x1.multiply(v2)
9557 var zu2 = u.square().multiply(this.z)
9558
9559 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9560 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9561 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9562 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)
9563 // z3 = v^3 * z1 * z2
9564 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9565
9566 return new Point(this.curve, x3, y3, z3)
9567}
9568
9569Point.prototype.twice = function() {
9570 if (this.curve.isInfinity(this)) return this
9571 if (this.y.signum() === 0) return this.curve.infinity
9572
9573 var x1 = this.x
9574 var y1 = this.y
9575
9576 var y1z1 = y1.multiply(this.z)
9577 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9578 var a = this.curve.a
9579
9580 // w = 3 * x1^2 + a * z1^2
9581 var w = x1.square().multiply(THREE)
9582
9583 if (a.signum() !== 0) {
9584 w = w.add(this.z.square().multiply(a))
9585 }
9586
9587 w = w.mod(this.curve.p)
9588 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9589 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9590 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9591 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9592 // z3 = 8 * (y1 * z1)^3
9593 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9594
9595 return new Point(this.curve, x3, y3, z3)
9596}
9597
9598// Simple NAF (Non-Adjacent Form) multiplication algorithm
9599// TODO: modularize the multiplication algorithm
9600Point.prototype.multiply = function(k) {
9601 if (this.curve.isInfinity(this)) return this
9602 if (k.signum() === 0) return this.curve.infinity
9603
9604 var e = k
9605 var h = e.multiply(THREE)
9606
9607 var neg = this.negate()
9608 var R = this
9609
9610 for (var i = h.bitLength() - 2; i > 0; --i) {
9611 R = R.twice()
9612
9613 var hBit = h.testBit(i)
9614 var eBit = e.testBit(i)
9615
9616 if (hBit != eBit) {
9617 R = R.add(hBit ? this : neg)
9618 }
9619 }
9620
9621 return R
9622}
9623
9624// Compute this*j + x*k (simultaneous multiplication)
9625Point.prototype.multiplyTwo = function(j, x, k) {
9626 var i
9627
9628 if (j.bitLength() > k.bitLength())
9629 i = j.bitLength() - 1
9630 else
9631 i = k.bitLength() - 1
9632
9633 var R = this.curve.infinity
9634 var both = this.add(x)
9635
9636 while (i >= 0) {
9637 R = R.twice()
9638
9639 var jBit = j.testBit(i)
9640 var kBit = k.testBit(i)
9641
9642 if (jBit) {
9643 if (kBit) {
9644 R = R.add(both)
9645
9646 } else {
9647 R = R.add(this)
9648 }
9649
9650 } else {
9651 if (kBit) {
9652 R = R.add(x)
9653 }
9654 }
9655 --i
9656 }
9657
9658 return R
9659}
9660
9661Point.prototype.getEncoded = function(compressed) {
9662 if (compressed == undefined) compressed = this.compressed
9663 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9664
9665 var x = this.affineX
9666 var y = this.affineY
9667
9668 var buffer
9669
9670 // Determine size of q in bytes
9671 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9672
9673 // 0x02/0x03 | X
9674 if (compressed) {
9675 buffer = new Buffer(1 + byteLength)
9676 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9677
9678 // 0x04 | X | Y
9679 } else {
9680 buffer = new Buffer(1 + byteLength + byteLength)
9681 buffer.writeUInt8(0x04, 0)
9682
9683 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9684 }
9685
9686 x.toBuffer(byteLength).copy(buffer, 1)
9687
9688 return buffer
9689}
9690
9691Point.decodeFrom = function(curve, buffer) {
9692 var type = buffer.readUInt8(0)
9693 var compressed = (type !== 4)
9694
ebd8d4e8 9695 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9696 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9697
9698 var Q
9699 if (compressed) {
9700 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9701 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9702
9703 var isOdd = (type === 0x03)
9704 Q = curve.pointFromX(isOdd, x)
9705
9706 } else {
9707 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9708
9709 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9710 Q = Point.fromAffine(curve, x, y)
9711 }
9712
9713 Q.compressed = compressed
9714 return Q
9715}
9716
9717Point.prototype.toString = function () {
9718 if (this.curve.isInfinity(this)) return '(INFINITY)'
9719
9720 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9721}
9722
9723module.exports = Point
9724
ab78acc6
IC
9725}).call(this,require("buffer").Buffer)
9726},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9727(function (process,global,Buffer){
9728'use strict';
ebd8d4e8 9729
ab78acc6
IC
9730var crypto = global.crypto || global.msCrypto
9731if(crypto && crypto.getRandomValues) {
9732 module.exports = randomBytes;
9733} else {
9734 module.exports = oldBrowser;
9735}
9736function randomBytes(size, cb) {
9737 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9738 /* This will not work in older browsers.
9739 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9740 */
9741
9742 crypto.getRandomValues(bytes);
9743 if (typeof cb === 'function') {
9744 return process.nextTick(function () {
9745 cb(null, bytes);
9746 });
ebd8d4e8 9747 }
ab78acc6
IC
9748 return bytes;
9749}
9750function oldBrowser() {
9751 throw new Error(
9752 'secure random number generation not supported by this browser\n'+
9753 'use chrome, FireFox or Internet Explorer 11'
9754 )
ebd8d4e8
IC
9755}
9756
ab78acc6
IC
9757}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9758},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9759(function (Buffer){
9760'use strict';
ebd8d4e8 9761
ab78acc6
IC
9762function getFunctionName(fn) {
9763 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9764}
9765
9766function getTypeTypeName(type) {
9767 if (nativeTypes.Function(type)) {
9768 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9769 }
ab78acc6
IC
9770 if (nativeTypes.Object(type)) return JSON.stringify(type);
9771
9772 return type;
ebd8d4e8
IC
9773}
9774
ab78acc6
IC
9775function getValueTypeName(value) {
9776 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9777
ab78acc6
IC
9778 return getFunctionName(value.constructor);
9779}
9780
9781function tfErrorString(type, value) {
9782 var typeTypeName = getTypeTypeName(type);
9783 var valueTypeName = getValueTypeName(value);
9784
9785 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9786}
9787
9788function tfPropertyErrorString(type, name, value) {
9789 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9790}
9791
9792var nativeTypes = {
9793 Array: (function (_Array) {
9794 function Array(_x) {
9795 return _Array.apply(this, arguments);
9796 }
9797
9798 Array.toString = function () {
9799 return _Array.toString();
9800 };
9801
9802 return Array;
9803 })(function (value) {
9804 return value !== null && value !== undefined && value.constructor === Array;
9805 }),
9806 Boolean: function Boolean(value) {
9807 return typeof value === 'boolean';
9808 },
9809 Buffer: (function (_Buffer) {
9810 function Buffer(_x2) {
9811 return _Buffer.apply(this, arguments);
9812 }
9813
9814 Buffer.toString = function () {
9815 return _Buffer.toString();
9816 };
9817
9818 return Buffer;
9819 })(function (value) {
9820 return Buffer.isBuffer(value);
9821 }),
9822 Function: function Function(value) {
9823 return typeof value === 'function';
9824 },
9825 Null: function Null(value) {
9826 return value === undefined || value === null;
9827 },
9828 Number: function Number(value) {
9829 return typeof value === 'number';
9830 },
9831 Object: function Object(value) {
9832 return typeof value === 'object';
9833 },
9834 String: function String(value) {
9835 return typeof value === 'string';
9836 },
9837 '': function _() {
9838 return true;
ebd8d4e8 9839 }
ab78acc6
IC
9840};
9841
9842function tJSON(type) {
9843 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9844}
9845
ab78acc6
IC
9846function sJSON(type) {
9847 var json = tJSON(type);
9848 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9849}
9850
ab78acc6
IC
9851var otherTypes = {
9852 arrayOf: function arrayOf(type) {
9853 function arrayOf(value, strict) {
9854 try {
9855 return nativeTypes.Array(value) && value.every(function (x) {
9856 return typeforce(type, x, strict);
9857 });
9858 } catch (e) {
9859 return false;
9860 }
9861 }
9862 arrayOf.toJSON = function () {
9863 return [tJSON(type)];
9864 };
9865
9866 return arrayOf;
9867 },
9868
9869 maybe: function maybe(type) {
9870 function maybe(value, strict) {
9871 return nativeTypes.Null(value) || typeforce(type, value, strict);
9872 }
9873 maybe.toJSON = function () {
9874 return '?' + sJSON(type);
9875 };
9876
9877 return maybe;
9878 },
9879
9880 object: function object(type) {
9881 function object(value, strict) {
9882 typeforce(nativeTypes.Object, value, strict);
9883
9884 var propertyName, propertyType, propertyValue;
9885
9886 try {
9887 for (propertyName in type) {
9888 propertyType = type[propertyName];
9889 propertyValue = value[propertyName];
9890
9891 typeforce(propertyType, propertyValue, strict);
9892 }
9893 } catch (e) {
9894 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9895 }
9896
9897 if (strict) {
9898 for (propertyName in value) {
9899 if (type[propertyName]) continue;
9900
9901 throw new TypeError('Unexpected property "' + propertyName + '"');
9902 }
9903 }
9904
9905 return true;
9906 }
9907 object.toJSON = function () {
9908 return type;
9909 };
9910
9911 return object;
9912 },
9913
9914 oneOf: function oneOf() {
9915 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9916 types[_key] = arguments[_key];
9917 }
9918
9919 function oneOf(value, strict) {
9920 return types.some(function (type) {
9921 try {
9922 return typeforce(type, value, strict);
9923 } catch (e) {
9924 return false;
9925 }
9926 });
9927 }
9928 oneOf.toJSON = function () {
9929 return types.map(sJSON).join('|');
9930 };
9931
9932 return oneOf;
9933 },
9934
9935 quacksLike: function quacksLike(type) {
9936 function quacksLike(value, strict) {
9937 return type === getValueTypeName(value);
9938 }
9939 quacksLike.toJSON = function () {
9940 return type;
9941 };
9942
9943 return quacksLike;
9944 },
9945
9946 tuple: function tuple() {
9947 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9948 types[_key2] = arguments[_key2];
9949 }
9950
9951 function tuple(value, strict) {
9952 return types.every(function (type, i) {
9953 return typeforce(type, value[i], strict);
9954 });
9955 }
9956 tuple.toJSON = function () {
9957 return '(' + types.map(sJSON).join(', ') + ')';
9958 };
9959
9960 return tuple;
9961 },
9962
9963 value: function value(expected) {
9964 function value(actual) {
9965 return actual === expected;
9966 }
9967 value.toJSON = function () {
9968 return expected;
9969 };
9970
9971 return value;
9972 }
9973};
9974
9975function compile(type) {
9976 if (nativeTypes.String(type)) {
9977 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9978
9979 return nativeTypes[type] || otherTypes.quacksLike(type);
9980 } else if (type && nativeTypes.Object(type)) {
9981 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9982
9983 var compiled = {};
9984
9985 for (var propertyName in type) {
9986 compiled[propertyName] = compile(type[propertyName]);
9987 }
9988
9989 return otherTypes.object(compiled);
9990 } else if (nativeTypes.Function(type)) {
9991 return type;
9992 }
9993
9994 return otherTypes.value(type);
ebd8d4e8
IC
9995}
9996
ab78acc6
IC
9997function typeforce(_x3, _x4, _x5) {
9998 var _again = true;
9999
10000 _function: while (_again) {
10001 var type = _x3,
10002 value = _x4,
10003 strict = _x5;
10004 _again = false;
10005
10006 if (nativeTypes.Function(type)) {
10007 if (type(value, strict)) return true;
10008
10009 throw new TypeError(tfErrorString(type, value));
10010 }
10011
10012 // JIT
10013 _x3 = compile(type);
10014 _x4 = value;
10015 _x5 = strict;
10016 _again = true;
10017 continue _function;
10018 }
ebd8d4e8
IC
10019}
10020
ab78acc6
IC
10021// assign all types to typeforce function
10022var typeName;
10023Object.keys(nativeTypes).forEach(function (typeName) {
10024 var nativeType = nativeTypes[typeName];
10025 nativeType.toJSON = function () {
10026 return typeName;
10027 };
10028
10029 typeforce[typeName] = nativeType;
10030});
ebd8d4e8 10031
ab78acc6
IC
10032for (typeName in otherTypes) {
10033 typeforce[typeName] = otherTypes[typeName];
10034}
ebd8d4e8 10035
ab78acc6
IC
10036module.exports = typeforce;
10037module.exports.compile = compile;
10038}).call(this,require("buffer").Buffer)
10039},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10040(function (Buffer){
ab78acc6
IC
10041var assert = require('assert')
10042var base58check = require('bs58check')
10043var typeForce = require('typeforce')
10044var networks = require('./networks')
10045var scripts = require('./scripts')
ebd8d4e8 10046
ab78acc6 10047function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10048 for (var networkName in networks) {
10049 var network = networks[networkName]
10050
10051 if (version === network.pubKeyHash) return 'pubkeyhash'
10052 if (version === network.scriptHash) return 'scripthash'
10053 }
10054}
10055
ab78acc6
IC
10056function Address (hash, version) {
10057 typeForce('Buffer', hash)
10058
ebd8d4e8
IC
10059 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10060 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10061
10062 this.hash = hash
10063 this.version = version
10064}
10065
ab78acc6 10066Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10067 var payload = base58check.decode(string)
10068 var version = payload.readUInt8(0)
10069 var hash = payload.slice(1)
10070
10071 return new Address(hash, version)
10072}
10073
ab78acc6 10074Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10075 network = network || networks.bitcoin
10076
ab78acc6
IC
10077 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10078 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10079
ab78acc6 10080 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10081}
10082
ebd8d4e8
IC
10083Address.prototype.toBase58Check = function () {
10084 var payload = new Buffer(21)
10085 payload.writeUInt8(this.version, 0)
10086 this.hash.copy(payload, 1)
10087
10088 return base58check.encode(payload)
10089}
10090
ab78acc6 10091Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10092 var scriptType = findScriptTypeByVersion(this.version)
10093
10094 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10095 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10096
ab78acc6
IC
10097 assert(false, this.toString() + ' has no matching Script')
10098}
10099
10100Address.prototype.toString = Address.prototype.toBase58Check
10101
10102module.exports = Address
10103
10104}).call(this,require("buffer").Buffer)
10105},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10106var bs58check = require('bs58check')
10107
10108function decode () {
10109 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10110
10111 return bs58check.decode.apply(undefined, arguments)
10112}
10113
10114function encode () {
10115 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10116
10117 return bs58check.encode.apply(undefined, arguments)
10118}
10119
10120module.exports = {
10121 decode: decode,
10122 encode: encode
10123}
10124
10125},{"bs58check":31}],56:[function(require,module,exports){
10126(function (Buffer){
10127var assert = require('assert')
10128var bufferutils = require('./bufferutils')
10129var crypto = require('./crypto')
10130
10131var Transaction = require('./transaction')
10132
10133function Block () {
10134 this.version = 1
10135 this.prevHash = null
10136 this.merkleRoot = null
10137 this.timestamp = 0
10138 this.bits = 0
10139 this.nonce = 0
10140}
10141
10142Block.fromBuffer = function (buffer) {
10143 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10144
10145 var offset = 0
10146 function readSlice (n) {
10147 offset += n
10148 return buffer.slice(offset - n, offset)
10149 }
10150
10151 function readUInt32 () {
10152 var i = buffer.readUInt32LE(offset)
10153 offset += 4
10154 return i
10155 }
10156
10157 var block = new Block()
10158 block.version = readUInt32()
10159 block.prevHash = readSlice(32)
10160 block.merkleRoot = readSlice(32)
10161 block.timestamp = readUInt32()
10162 block.bits = readUInt32()
10163 block.nonce = readUInt32()
10164
10165 if (buffer.length === 80) return block
10166
10167 function readVarInt () {
10168 var vi = bufferutils.readVarInt(buffer, offset)
10169 offset += vi.size
10170 return vi.number
10171 }
10172
10173 // FIXME: poor performance
10174 function readTransaction () {
10175 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10176
10177 offset += tx.toBuffer().length
10178 return tx
10179 }
10180
10181 var nTransactions = readVarInt()
10182 block.transactions = []
10183
10184 for (var i = 0; i < nTransactions; ++i) {
10185 var tx = readTransaction()
10186 block.transactions.push(tx)
10187 }
10188
10189 return block
10190}
10191
10192Block.fromHex = function (hex) {
10193 return Block.fromBuffer(new Buffer(hex, 'hex'))
10194}
10195
10196Block.prototype.getHash = function () {
10197 return crypto.hash256(this.toBuffer(true))
10198}
10199
10200Block.prototype.getId = function () {
10201 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10202}
10203
ab78acc6
IC
10204Block.prototype.getUTCDate = function () {
10205 var date = new Date(0) // epoch
10206 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10207
ab78acc6
IC
10208 return date
10209}
ebd8d4e8 10210
ab78acc6
IC
10211Block.prototype.toBuffer = function (headersOnly) {
10212 var buffer = new Buffer(80)
ebd8d4e8 10213
ab78acc6
IC
10214 var offset = 0
10215 function writeSlice (slice) {
10216 slice.copy(buffer, offset)
10217 offset += slice.length
10218 }
ebd8d4e8 10219
ab78acc6
IC
10220 function writeUInt32 (i) {
10221 buffer.writeUInt32LE(i, offset)
10222 offset += 4
10223 }
ebd8d4e8 10224
ab78acc6
IC
10225 writeUInt32(this.version)
10226 writeSlice(this.prevHash)
10227 writeSlice(this.merkleRoot)
10228 writeUInt32(this.timestamp)
10229 writeUInt32(this.bits)
10230 writeUInt32(this.nonce)
ebd8d4e8 10231
ab78acc6 10232 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10233
ab78acc6
IC
10234 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10235 var txBuffers = this.transactions.map(function (tx) {
10236 return tx.toBuffer()
10237 })
ebd8d4e8 10238
ab78acc6 10239 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10240}
10241
ab78acc6
IC
10242Block.prototype.toHex = function (headersOnly) {
10243 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10244}
10245
ab78acc6
IC
10246module.exports = Block
10247
10248}).call(this,require("buffer").Buffer)
10249},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10250(function (Buffer){
10251var assert = require('assert')
10252var opcodes = require('./opcodes')
ebd8d4e8
IC
10253
10254// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10255function verifuint (value, max) {
ebd8d4e8
IC
10256 assert(typeof value === 'number', 'cannot write a non-number as a number')
10257 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10258 assert(value <= max, 'value is larger than maximum value for type')
10259 assert(Math.floor(value) === value, 'value has a fractional component')
10260}
10261
ab78acc6 10262function pushDataSize (i) {
ebd8d4e8 10263 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10264 : i < 0xff ? 2
10265 : i < 0xffff ? 3
10266 : 5
ebd8d4e8
IC
10267}
10268
ab78acc6 10269function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10270 var opcode = buffer.readUInt8(offset)
10271 var number, size
10272
10273 // ~6 bit
10274 if (opcode < opcodes.OP_PUSHDATA1) {
10275 number = opcode
10276 size = 1
10277
10278 // 8 bit
10279 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10280 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10281 number = buffer.readUInt8(offset + 1)
10282 size = 2
10283
10284 // 16 bit
10285 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10286 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10287 number = buffer.readUInt16LE(offset + 1)
10288 size = 3
10289
10290 // 32 bit
10291 } else {
ab78acc6 10292 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10293 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10294
10295 number = buffer.readUInt32LE(offset + 1)
10296 size = 5
ebd8d4e8
IC
10297 }
10298
10299 return {
10300 opcode: opcode,
10301 number: number,
10302 size: size
10303 }
10304}
10305
ab78acc6 10306function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10307 var a = buffer.readUInt32LE(offset)
10308 var b = buffer.readUInt32LE(offset + 4)
10309 b *= 0x100000000
10310
10311 verifuint(b + a, 0x001fffffffffffff)
10312
10313 return b + a
10314}
10315
ab78acc6 10316function readVarInt (buffer, offset) {
ebd8d4e8
IC
10317 var t = buffer.readUInt8(offset)
10318 var number, size
10319
10320 // 8 bit
10321 if (t < 253) {
10322 number = t
10323 size = 1
10324
10325 // 16 bit
10326 } else if (t < 254) {
10327 number = buffer.readUInt16LE(offset + 1)
10328 size = 3
10329
10330 // 32 bit
10331 } else if (t < 255) {
10332 number = buffer.readUInt32LE(offset + 1)
10333 size = 5
10334
10335 // 64 bit
10336 } else {
10337 number = readUInt64LE(buffer, offset + 1)
10338 size = 9
10339 }
10340
10341 return {
10342 number: number,
10343 size: size
10344 }
10345}
10346
ab78acc6 10347function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10348 var size = pushDataSize(number)
10349
10350 // ~6 bit
10351 if (size === 1) {
10352 buffer.writeUInt8(number, offset)
10353
10354 // 8 bit
10355 } else if (size === 2) {
10356 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10357 buffer.writeUInt8(number, offset + 1)
10358
10359 // 16 bit
10360 } else if (size === 3) {
10361 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10362 buffer.writeUInt16LE(number, offset + 1)
10363
10364 // 32 bit
10365 } else {
10366 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10367 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10368 }
10369
10370 return size
10371}
10372
ab78acc6 10373function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10374 verifuint(value, 0x001fffffffffffff)
10375
10376 buffer.writeInt32LE(value & -1, offset)
10377 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10378}
10379
ab78acc6
IC
10380function varIntSize (i) {
10381 return i < 253 ? 1
10382 : i < 0x10000 ? 3
10383 : i < 0x100000000 ? 5
10384 : 9
ebd8d4e8
IC
10385}
10386
ab78acc6 10387function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10388 var size = varIntSize(number)
10389
10390 // 8 bit
10391 if (size === 1) {
10392 buffer.writeUInt8(number, offset)
10393
10394 // 16 bit
10395 } else if (size === 3) {
10396 buffer.writeUInt8(253, offset)
10397 buffer.writeUInt16LE(number, offset + 1)
10398
10399 // 32 bit
10400 } else if (size === 5) {
10401 buffer.writeUInt8(254, offset)
10402 buffer.writeUInt32LE(number, offset + 1)
10403
10404 // 64 bit
10405 } else {
10406 buffer.writeUInt8(255, offset)
10407 writeUInt64LE(buffer, number, offset + 1)
10408 }
10409
10410 return size
10411}
10412
ab78acc6
IC
10413function varIntBuffer (i) {
10414 var size = varIntSize(i)
10415 var buffer = new Buffer(size)
10416 writeVarInt(buffer, i, 0)
10417
10418 return buffer
10419}
10420
10421function reverse (buffer) {
10422 var buffer2 = new Buffer(buffer)
10423 Array.prototype.reverse.call(buffer2)
10424 return buffer2
10425}
10426
ebd8d4e8
IC
10427module.exports = {
10428 pushDataSize: pushDataSize,
10429 readPushDataInt: readPushDataInt,
10430 readUInt64LE: readUInt64LE,
10431 readVarInt: readVarInt,
ab78acc6
IC
10432 reverse: reverse,
10433 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10434 varIntSize: varIntSize,
10435 writePushDataInt: writePushDataInt,
10436 writeUInt64LE: writeUInt64LE,
10437 writeVarInt: writeVarInt
10438}
10439
ab78acc6
IC
10440}).call(this,require("buffer").Buffer)
10441},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10442var createHash = require('create-hash')
ebd8d4e8 10443
ab78acc6 10444function hash160 (buffer) {
ebd8d4e8
IC
10445 return ripemd160(sha256(buffer))
10446}
10447
ab78acc6 10448function hash256 (buffer) {
ebd8d4e8
IC
10449 return sha256(sha256(buffer))
10450}
10451
ab78acc6
IC
10452function ripemd160 (buffer) {
10453 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10454}
10455
ab78acc6
IC
10456function sha1 (buffer) {
10457 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10458}
10459
ab78acc6
IC
10460function sha256 (buffer) {
10461 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10462}
10463
10464// FIXME: Name not consistent with others
ab78acc6 10465var createHmac = require('create-hmac')
ebd8d4e8 10466
ab78acc6
IC
10467function HmacSHA256 (buffer, secret) {
10468 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10469 return createHmac('sha256', secret).update(buffer).digest()
10470}
ebd8d4e8 10471
ab78acc6
IC
10472function HmacSHA512 (buffer, secret) {
10473 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10474 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10475}
10476
10477module.exports = {
10478 ripemd160: ripemd160,
10479 sha1: sha1,
10480 sha256: sha256,
10481 hash160: hash160,
10482 hash256: hash256,
10483 HmacSHA256: HmacSHA256,
10484 HmacSHA512: HmacSHA512
10485}
10486
ab78acc6 10487},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10488(function (Buffer){
ab78acc6
IC
10489var assert = require('assert')
10490var createHmac = require('create-hmac')
10491var typeForce = require('typeforce')
ebd8d4e8 10492
ab78acc6
IC
10493var BigInteger = require('bigi')
10494var ECSignature = require('./ecsignature')
10495
10496var ZERO = new Buffer([0])
10497var ONE = new Buffer([1])
ebd8d4e8
IC
10498
10499// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10500function deterministicGenerateK (curve, hash, d, checkSig) {
10501 typeForce('Buffer', hash)
10502 typeForce('BigInteger', d)
10503
10504 // FIXME: remove/uncomment for 2.0.0
10505 // typeForce('Function', checkSig)
10506
10507 if (typeof checkSig !== 'function') {
10508 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10509
10510 checkSig = function (k) {
10511 var G = curve.G
10512 var n = curve.n
10513 var e = BigInteger.fromBuffer(hash)
10514
10515 var Q = G.multiply(k)
10516
10517 if (curve.isInfinity(Q))
10518 return false
10519
10520 var r = Q.affineX.mod(n)
10521 if (r.signum() === 0)
10522 return false
10523
10524 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10525 if (s.signum() === 0)
10526 return false
10527
10528 return true
10529 }
10530 }
10531
10532 // sanity check
ebd8d4e8 10533 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10534
10535 var x = d.toBuffer(32)
10536 var k = new Buffer(32)
10537 var v = new Buffer(32)
10538
ab78acc6 10539 // Step A, ignored as hash already provided
ebd8d4e8
IC
10540 // Step B
10541 v.fill(1)
10542
10543 // Step C
10544 k.fill(0)
10545
10546 // Step D
ab78acc6
IC
10547 k = createHmac('sha256', k)
10548 .update(v)
10549 .update(ZERO)
10550 .update(x)
10551 .update(hash)
10552 .digest()
ebd8d4e8
IC
10553
10554 // Step E
ab78acc6 10555 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10556
10557 // Step F
ab78acc6
IC
10558 k = createHmac('sha256', k)
10559 .update(v)
10560 .update(ONE)
10561 .update(x)
10562 .update(hash)
10563 .digest()
ebd8d4e8
IC
10564
10565 // Step G
ab78acc6 10566 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10567
10568 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10569 // Step H2b
ab78acc6 10570 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10571
10572 var T = BigInteger.fromBuffer(v)
10573
ab78acc6
IC
10574 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10575 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10576 k = createHmac('sha256', k)
10577 .update(v)
10578 .update(ZERO)
10579 .digest()
10580
10581 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10582
ab78acc6
IC
10583 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10584 // Step H2b again
10585 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10586 T = BigInteger.fromBuffer(v)
10587 }
10588
10589 return T
10590}
10591
ab78acc6
IC
10592function sign (curve, hash, d) {
10593 var r, s
ebd8d4e8 10594
ab78acc6 10595 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10596 var n = curve.n
10597 var G = curve.G
ebd8d4e8 10598
ab78acc6
IC
10599 deterministicGenerateK(curve, hash, d, function (k) {
10600 var Q = G.multiply(k)
10601
10602 if (curve.isInfinity(Q))
10603 return false
10604
10605 r = Q.affineX.mod(n)
10606 if (r.signum() === 0)
10607 return false
10608
10609 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10610 if (s.signum() === 0)
10611 return false
ebd8d4e8 10612
ab78acc6
IC
10613 return true
10614 })
ebd8d4e8
IC
10615
10616 var N_OVER_TWO = n.shiftRight(1)
10617
10618 // enforce low S values, see bip62: 'low s values in signatures'
10619 if (s.compareTo(N_OVER_TWO) > 0) {
10620 s = n.subtract(s)
10621 }
10622
10623 return new ECSignature(r, s)
10624}
10625
ab78acc6 10626function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10627 var n = curve.n
10628 var G = curve.G
10629
10630 var r = signature.r
10631 var s = signature.s
10632
ab78acc6
IC
10633 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10634 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10635 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10636
ab78acc6 10637 // c = s^-1 mod n
ebd8d4e8
IC
10638 var c = s.modInverse(n)
10639
ab78acc6
IC
10640 // 1.4.4 Compute u1 = es^−1 mod n
10641 // u2 = rs^−1 mod n
ebd8d4e8
IC
10642 var u1 = e.multiply(c).mod(n)
10643 var u2 = r.multiply(c).mod(n)
10644
ab78acc6
IC
10645 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10646 var R = G.multiplyTwo(u1, Q, u2)
10647 var v = R.affineX.mod(n)
ebd8d4e8 10648
ab78acc6
IC
10649 // 1.4.5 (cont.) Enforce R is not at infinity
10650 if (curve.isInfinity(R)) return false
10651
10652 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10653 return v.equals(r)
10654}
10655
ab78acc6
IC
10656function verify (curve, hash, signature, Q) {
10657 // 1.4.2 H = Hash(M), already done by the user
10658 // 1.4.3 e = H
10659 var e = BigInteger.fromBuffer(hash)
10660
10661 return verifyRaw(curve, e, signature, Q)
10662}
10663
ebd8d4e8
IC
10664/**
10665 * Recover a public key from a signature.
10666 *
10667 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10668 * Key Recovery Operation".
10669 *
10670 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10671 */
ab78acc6 10672function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10673 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10674
ab78acc6
IC
10675 var n = curve.n
10676 var G = curve.G
10677
ebd8d4e8
IC
10678 var r = signature.r
10679 var s = signature.s
10680
ab78acc6
IC
10681 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10682 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10683
ebd8d4e8
IC
10684 // A set LSB signifies that the y-coordinate is odd
10685 var isYOdd = i & 1
10686
10687 // The more significant bit specifies whether we should use the
10688 // first or second candidate key.
10689 var isSecondKey = i >> 1
10690
ebd8d4e8
IC
10691 // 1.1 Let x = r + jn
10692 var x = isSecondKey ? r.add(n) : r
10693 var R = curve.pointFromX(isYOdd, x)
10694
10695 // 1.4 Check that nR is at infinity
10696 var nR = R.multiply(n)
10697 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10698
10699 // Compute -e from e
10700 var eNeg = e.negate().mod(n)
10701
10702 // 1.6.1 Compute Q = r^-1 (sR - eG)
10703 // Q = r^-1 (sR + -eG)
10704 var rInv = r.modInverse(n)
10705
10706 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10707 curve.validate(Q)
10708
10709 return Q
10710}
10711
10712/**
10713 * Calculate pubkey extraction parameter.
10714 *
10715 * When extracting a pubkey from a signature, we have to
10716 * distinguish four different cases. Rather than putting this
10717 * burden on the verifier, Bitcoin includes a 2-bit value with the
10718 * signature.
10719 *
10720 * This function simply tries all four cases and returns the value
10721 * that resulted in a successful pubkey recovery.
10722 */
ab78acc6 10723function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10724 for (var i = 0; i < 4; i++) {
10725 var Qprime = recoverPubKey(curve, e, signature, i)
10726
10727 // 1.6.2 Verify Q
10728 if (Qprime.equals(Q)) {
10729 return i
10730 }
10731 }
10732
10733 throw new Error('Unable to find valid recovery factor')
10734}
10735
10736module.exports = {
10737 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10738 deterministicGenerateK: deterministicGenerateK,
10739 recoverPubKey: recoverPubKey,
10740 sign: sign,
10741 verify: verify,
10742 verifyRaw: verifyRaw
10743}
10744
ab78acc6
IC
10745}).call(this,require("buffer").Buffer)
10746},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10747(function (Buffer){
ab78acc6
IC
10748var assert = require('assert')
10749var base58check = require('bs58check')
10750var ecdsa = require('./ecdsa')
10751var networks = require('./networks')
10752var randomBytes = require('randombytes')
10753var typeForce = require('typeforce')
ebd8d4e8 10754
ab78acc6
IC
10755var BigInteger = require('bigi')
10756var ECPubKey = require('./ecpubkey')
ebd8d4e8 10757
ab78acc6
IC
10758var ecurve = require('ecurve')
10759var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10760
ab78acc6 10761function ECKey (d, compressed) {
ebd8d4e8 10762 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10763 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10764
ab78acc6 10765 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10766
10767 this.d = d
10768 this.pub = new ECPubKey(Q, compressed)
10769}
10770
ab78acc6
IC
10771// Constants
10772ECKey.curve = secp256k1
10773
ebd8d4e8 10774// Static constructors
ab78acc6 10775ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10776 var payload = base58check.decode(string)
10777 var compressed = false
10778
10779 // Ignore the version byte
10780 payload = payload.slice(1)
10781
10782 if (payload.length === 33) {
10783 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10784
10785 // Truncate the compression flag
10786 payload = payload.slice(0, -1)
10787 compressed = true
10788 }
10789
10790 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10791
10792 var d = BigInteger.fromBuffer(payload)
10793 return new ECKey(d, compressed)
10794}
10795
ab78acc6
IC
10796ECKey.makeRandom = function (compressed, rng) {
10797 rng = rng || randomBytes
ebd8d4e8
IC
10798
10799 var buffer = rng(32)
ab78acc6
IC
10800 typeForce('Buffer', buffer)
10801 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10802
10803 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10804 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10805
10806 return new ECKey(d, compressed)
10807}
10808
10809// Export functions
ab78acc6 10810ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10811 network = network || networks.bitcoin
10812
10813 var bufferLen = this.pub.compressed ? 34 : 33
10814 var buffer = new Buffer(bufferLen)
10815
10816 buffer.writeUInt8(network.wif, 0)
10817 this.d.toBuffer(32).copy(buffer, 1)
10818
10819 if (this.pub.compressed) {
10820 buffer.writeUInt8(0x01, 33)
10821 }
10822
10823 return base58check.encode(buffer)
10824}
10825
10826// Operations
ab78acc6
IC
10827ECKey.prototype.sign = function (hash) {
10828 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10829}
10830
10831module.exports = ECKey
10832
ab78acc6
IC
10833}).call(this,require("buffer").Buffer)
10834},{"./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 10835(function (Buffer){
ab78acc6
IC
10836var crypto = require('./crypto')
10837var ecdsa = require('./ecdsa')
10838var typeForce = require('typeforce')
10839var networks = require('./networks')
ebd8d4e8 10840
ab78acc6 10841var Address = require('./address')
ebd8d4e8 10842
ab78acc6
IC
10843var ecurve = require('ecurve')
10844var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10845
ab78acc6
IC
10846function ECPubKey (Q, compressed) {
10847 if (compressed === undefined) {
10848 compressed = true
10849 }
ebd8d4e8 10850
ab78acc6
IC
10851 typeForce('Point', Q)
10852 typeForce('Boolean', compressed)
ebd8d4e8
IC
10853
10854 this.compressed = compressed
10855 this.Q = Q
10856}
10857
ab78acc6
IC
10858// Constants
10859ECPubKey.curve = secp256k1
10860
ebd8d4e8 10861// Static constructors
ab78acc6
IC
10862ECPubKey.fromBuffer = function (buffer) {
10863 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10864 return new ECPubKey(Q, Q.compressed)
10865}
10866
ab78acc6 10867ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10868 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10869}
10870
10871// Operations
ab78acc6 10872ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10873 network = network || networks.bitcoin
10874
10875 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10876}
10877
ab78acc6
IC
10878ECPubKey.prototype.verify = function (hash, signature) {
10879 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10880}
10881
10882// Export functions
ab78acc6 10883ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10884 return this.Q.getEncoded(this.compressed)
10885}
10886
ab78acc6 10887ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10888 return this.toBuffer().toString('hex')
10889}
10890
10891module.exports = ECPubKey
10892
ab78acc6
IC
10893}).call(this,require("buffer").Buffer)
10894},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10895(function (Buffer){
ab78acc6
IC
10896var assert = require('assert')
10897var typeForce = require('typeforce')
10898
10899var BigInteger = require('bigi')
10900
10901function ECSignature (r, s) {
10902 typeForce('BigInteger', r)
10903 typeForce('BigInteger', s)
ebd8d4e8 10904
ebd8d4e8
IC
10905 this.r = r
10906 this.s = s
10907}
10908
ab78acc6 10909ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10910 assert.equal(buffer.length, 65, 'Invalid signature length')
10911 var i = buffer.readUInt8(0) - 27
10912
10913 // At most 3 bits
10914 assert.equal(i, i & 7, 'Invalid signature parameter')
10915 var compressed = !!(i & 4)
10916
10917 // Recovery param only
10918 i = i & 3
10919
10920 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10921 var s = BigInteger.fromBuffer(buffer.slice(33))
10922
10923 return {
10924 compressed: compressed,
10925 i: i,
10926 signature: new ECSignature(r, s)
10927 }
10928}
10929
ab78acc6 10930ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10931 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10932 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10933 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10934
10935 var rLen = buffer.readUInt8(3)
10936 assert(rLen > 0, 'R length is zero')
10937
10938 var offset = 4 + rLen
10939 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10940
10941 var sLen = buffer.readUInt8(offset + 1)
10942 assert(sLen > 0, 'S length is zero')
10943
10944 var rB = buffer.slice(4, offset)
10945 var sB = buffer.slice(offset + 2)
10946 offset += 2 + sLen
10947
10948 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10949 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10950 }
10951
10952 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10953 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10954 }
10955
10956 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10957 var r = BigInteger.fromDERInteger(rB)
10958 var s = BigInteger.fromDERInteger(sB)
10959
10960 assert(r.signum() >= 0, 'R value is negative')
10961 assert(s.signum() >= 0, 'S value is negative')
10962
10963 return new ECSignature(r, s)
10964}
10965
ab78acc6
IC
10966// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10967ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10968 var hashType = buffer.readUInt8(buffer.length - 1)
10969 var hashTypeMod = hashType & ~0x80
10970
ab78acc6 10971 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10972
10973 return {
10974 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10975 hashType: hashType
10976 }
10977}
10978
ab78acc6
IC
10979ECSignature.prototype.toCompact = function (i, compressed) {
10980 if (compressed) {
10981 i += 4
10982 }
10983
ebd8d4e8
IC
10984 i += 27
10985
10986 var buffer = new Buffer(65)
10987 buffer.writeUInt8(i, 0)
10988
10989 this.r.toBuffer(32).copy(buffer, 1)
10990 this.s.toBuffer(32).copy(buffer, 33)
10991
10992 return buffer
10993}
10994
ab78acc6 10995ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
10996 var rBa = this.r.toDERInteger()
10997 var sBa = this.s.toDERInteger()
10998
10999 var sequence = []
ab78acc6
IC
11000
11001 // INTEGER
11002 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
11003 sequence = sequence.concat(rBa)
11004
ab78acc6
IC
11005 // INTEGER
11006 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
11007 sequence = sequence.concat(sBa)
11008
ab78acc6
IC
11009 // SEQUENCE
11010 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
11011
11012 return new Buffer(sequence)
11013}
11014
ab78acc6
IC
11015ECSignature.prototype.toScriptSignature = function (hashType) {
11016 var hashTypeMod = hashType & ~0x80
11017 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11018
ebd8d4e8
IC
11019 var hashTypeBuffer = new Buffer(1)
11020 hashTypeBuffer.writeUInt8(hashType, 0)
11021
11022 return Buffer.concat([this.toDER(), hashTypeBuffer])
11023}
11024
11025module.exports = ECSignature
11026
ab78acc6
IC
11027}).call(this,require("buffer").Buffer)
11028},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11029(function (Buffer){
ab78acc6
IC
11030var assert = require('assert')
11031var base58check = require('bs58check')
11032var bcrypto = require('./crypto')
11033var createHmac = require('create-hmac')
11034var typeForce = require('typeforce')
11035var networks = require('./networks')
11036
11037var BigInteger = require('bigi')
11038var ECKey = require('./eckey')
11039var ECPubKey = require('./ecpubkey')
11040
11041var ecurve = require('ecurve')
ebd8d4e8
IC
11042var curve = ecurve.getCurveByName('secp256k1')
11043
ab78acc6 11044function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11045 for (var name in networks) {
11046 var network = networks[name]
11047
ab78acc6
IC
11048 if (version === network.bip32.private || version === network.bip32.public) {
11049 return network
ebd8d4e8
IC
11050 }
11051 }
11052
ab78acc6 11053 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11054}
11055
ab78acc6 11056function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11057 network = network || networks.bitcoin
11058
ab78acc6
IC
11059 typeForce('Buffer', chainCode)
11060
11061 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11062 assert(network.bip32, 'Unknown BIP32 constants for network')
11063
11064 this.chainCode = chainCode
11065 this.depth = 0
11066 this.index = 0
ab78acc6 11067 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11068 this.network = network
11069
11070 if (K instanceof BigInteger) {
11071 this.privKey = new ECKey(K, true)
11072 this.pubKey = this.privKey.pub
ab78acc6
IC
11073 } else if (K instanceof ECKey) {
11074 assert(K.pub.compressed, 'ECKey must be compressed')
11075 this.privKey = K
11076 this.pubKey = K.pub
11077 } else if (K instanceof ECPubKey) {
11078 assert(K.compressed, 'ECPubKey must be compressed')
11079 this.pubKey = K
ebd8d4e8
IC
11080 } else {
11081 this.pubKey = new ECPubKey(K, true)
11082 }
11083}
11084
11085HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11086HDNode.HIGHEST_BIT = 0x80000000
11087HDNode.LENGTH = 78
11088
ab78acc6
IC
11089HDNode.fromSeedBuffer = function (seed, network) {
11090 typeForce('Buffer', seed)
11091
11092 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11093 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11094
11095 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11096 var IL = I.slice(0, 32)
11097 var IR = I.slice(32)
11098
11099 // In case IL is 0 or >= n, the master key is invalid
11100 // This is handled by `new ECKey` in the HDNode constructor
11101 var pIL = BigInteger.fromBuffer(IL)
11102
11103 return new HDNode(pIL, IR, network)
11104}
11105
ab78acc6 11106HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11107 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11108}
11109
ab78acc6
IC
11110HDNode.fromBase58 = function (string, network) {
11111 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11112}
11113
ab78acc6
IC
11114// FIXME: remove in 2.x.y
11115HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11116 if (!__ignoreDeprecation) {
11117 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11118 }
11119
ebd8d4e8
IC
11120 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11121
11122 // 4 byte: version bytes
11123 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11124
11125 if (network) {
11126 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11127
11128 // auto-detect
11129 } else {
11130 network = findBIP32NetworkByVersion(version)
11131 }
ebd8d4e8
IC
11132
11133 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11134 var depth = buffer.readUInt8(4)
11135
11136 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11137 var parentFingerprint = buffer.readUInt32BE(5)
11138 if (depth === 0) {
11139 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11140 }
11141
11142 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11143 // This is encoded in MSB order. (0x00000000 if master key)
11144 var index = buffer.readUInt32BE(9)
11145 assert(depth > 0 || index === 0, 'Invalid index')
11146
11147 // 32 bytes: the chain code
11148 var chainCode = buffer.slice(13, 45)
ab78acc6 11149 var data, hd
ebd8d4e8
IC
11150
11151 // 33 bytes: private key data (0x00 + k)
ab78acc6 11152 if (version === network.bip32.private) {
ebd8d4e8 11153 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11154 data = buffer.slice(46, 78)
ebd8d4e8 11155 var d = BigInteger.fromBuffer(data)
ab78acc6 11156 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11157
11158 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11159 } else {
ab78acc6 11160 data = buffer.slice(45, 78)
ebd8d4e8
IC
11161 var Q = ecurve.Point.decodeFrom(curve, data)
11162 assert.equal(Q.compressed, true, 'Invalid public key')
11163
11164 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11165 // If not, the extended public key is invalid.
11166 curve.validate(Q)
11167
ab78acc6 11168 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11169 }
11170
11171 hd.depth = depth
11172 hd.index = index
11173 hd.parentFingerprint = parentFingerprint
11174
11175 return hd
11176}
11177
ab78acc6
IC
11178// FIXME: remove in 2.x.y
11179HDNode.fromHex = function (hex, network) {
11180 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11181}
11182
ab78acc6
IC
11183HDNode.prototype.getIdentifier = function () {
11184 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11185}
11186
ab78acc6 11187HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11188 return this.getIdentifier().slice(0, 4)
11189}
11190
ab78acc6 11191HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11192 return this.pubKey.getAddress(this.network)
11193}
11194
ab78acc6
IC
11195HDNode.prototype.neutered = function () {
11196 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11197 neutered.depth = this.depth
11198 neutered.index = this.index
11199 neutered.parentFingerprint = this.parentFingerprint
11200
11201 return neutered
11202}
11203
11204HDNode.prototype.toBase58 = function (isPrivate) {
11205 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11206}
11207
ab78acc6
IC
11208// FIXME: remove in 2.x.y
11209HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11210 if (isPrivate === undefined) {
11211 isPrivate = !!this.privKey
11212
11213 // FIXME: remove in 2.x.y
11214 } else {
11215 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11216 }
11217
11218 if (!__ignoreDeprecation) {
11219 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11220 }
ebd8d4e8
IC
11221
11222 // Version
11223 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11224 var buffer = new Buffer(HDNode.LENGTH)
11225
11226 // 4 bytes: version bytes
11227 buffer.writeUInt32BE(version, 0)
11228
11229 // Depth
11230 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11231 buffer.writeUInt8(this.depth, 4)
11232
11233 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11234 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11235
11236 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11237 // This is encoded in Big endian. (0x00000000 if master key)
11238 buffer.writeUInt32BE(this.index, 9)
11239
11240 // 32 bytes: the chain code
11241 this.chainCode.copy(buffer, 13)
11242
11243 // 33 bytes: the public key or private key data
11244 if (isPrivate) {
ab78acc6 11245 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11246 assert(this.privKey, 'Missing private key')
11247
11248 // 0x00 + k for private keys
11249 buffer.writeUInt8(0, 45)
11250 this.privKey.d.toBuffer(32).copy(buffer, 46)
11251 } else {
ebd8d4e8
IC
11252 // X9.62 encoding for public keys
11253 this.pubKey.toBuffer().copy(buffer, 45)
11254 }
11255
11256 return buffer
11257}
11258
ab78acc6
IC
11259// FIXME: remove in 2.x.y
11260HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11261 return this.toBuffer(isPrivate).toString('hex')
11262}
11263
11264// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11265HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11266 var isHardened = index >= HDNode.HIGHEST_BIT
11267 var indexBuffer = new Buffer(4)
11268 indexBuffer.writeUInt32BE(index, 0)
11269
11270 var data
11271
11272 // Hardened child
11273 if (isHardened) {
11274 assert(this.privKey, 'Could not derive hardened child key')
11275
11276 // data = 0x00 || ser256(kpar) || ser32(index)
11277 data = Buffer.concat([
11278 this.privKey.d.toBuffer(33),
11279 indexBuffer
11280 ])
11281
11282 // Normal child
11283 } else {
11284 // data = serP(point(kpar)) || ser32(index)
11285 // = serP(Kpar) || ser32(index)
11286 data = Buffer.concat([
11287 this.pubKey.toBuffer(),
11288 indexBuffer
11289 ])
11290 }
11291
ab78acc6 11292 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11293 var IL = I.slice(0, 32)
11294 var IR = I.slice(32)
11295
11296 var pIL = BigInteger.fromBuffer(IL)
11297
11298 // In case parse256(IL) >= n, proceed with the next value for i
11299 if (pIL.compareTo(curve.n) >= 0) {
11300 return this.derive(index + 1)
11301 }
11302
11303 // Private parent key -> private child key
11304 var hd
11305 if (this.privKey) {
11306 // ki = parse256(IL) + kpar (mod n)
11307 var ki = pIL.add(this.privKey.d).mod(curve.n)
11308
11309 // In case ki == 0, proceed with the next value for i
11310 if (ki.signum() === 0) {
11311 return this.derive(index + 1)
11312 }
11313
11314 hd = new HDNode(ki, IR, this.network)
11315
11316 // Public parent key -> public child key
11317 } else {
11318 // Ki = point(parse256(IL)) + Kpar
11319 // = G*IL + Kpar
11320 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11321
11322 // In case Ki is the point at infinity, proceed with the next value for i
11323 if (curve.isInfinity(Ki)) {
11324 return this.derive(index + 1)
11325 }
11326
11327 hd = new HDNode(Ki, IR, this.network)
11328 }
11329
11330 hd.depth = this.depth + 1
11331 hd.index = index
11332 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11333
11334 return hd
11335}
11336
ab78acc6 11337HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11338 // Only derives hardened private keys by default
11339 return this.derive(index + HDNode.HIGHEST_BIT)
11340}
11341
11342HDNode.prototype.toString = HDNode.prototype.toBase58
11343
11344module.exports = HDNode
11345
ab78acc6
IC
11346}).call(this,require("buffer").Buffer)
11347},{"./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 11348module.exports = {
ab78acc6
IC
11349 Address: require('./address'),
11350 base58check: require('./base58check'),
11351 Block: require('./block'),
11352 bufferutils: require('./bufferutils'),
11353 crypto: require('./crypto'),
11354 ecdsa: require('./ecdsa'),
11355 ECKey: require('./eckey'),
11356 ECPubKey: require('./ecpubkey'),
11357 ECSignature: require('./ecsignature'),
11358 Message: require('./message'),
11359 opcodes: require('./opcodes'),
11360 HDNode: require('./hdnode'),
11361 Script: require('./script'),
11362 scripts: require('./scripts'),
11363 Transaction: require('./transaction'),
11364 TransactionBuilder: require('./transaction_builder'),
11365 networks: require('./networks'),
11366 Wallet: require('./wallet')
11367}
11368
11369},{"./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 11370(function (Buffer){
ab78acc6
IC
11371var bufferutils = require('./bufferutils')
11372var crypto = require('./crypto')
11373var ecdsa = require('./ecdsa')
11374var networks = require('./networks')
11375
11376var BigInteger = require('bigi')
11377var ECPubKey = require('./ecpubkey')
11378var ECSignature = require('./ecsignature')
11379
11380var ecurve = require('ecurve')
ebd8d4e8
IC
11381var ecparams = ecurve.getCurveByName('secp256k1')
11382
ab78acc6 11383function magicHash (message, network) {
ebd8d4e8
IC
11384 var magicPrefix = new Buffer(network.magicPrefix)
11385 var messageBuffer = new Buffer(message)
ab78acc6 11386 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11387
11388 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11389 return crypto.hash256(buffer)
11390}
11391
ab78acc6 11392function sign (privKey, message, network) {
ebd8d4e8
IC
11393 network = network || networks.bitcoin
11394
11395 var hash = magicHash(message, network)
11396 var signature = privKey.sign(hash)
11397 var e = BigInteger.fromBuffer(hash)
11398 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11399
11400 return signature.toCompact(i, privKey.pub.compressed)
11401}
11402
11403// TODO: network could be implied from address
ab78acc6
IC
11404function verify (address, signature, message, network) {
11405 if (!Buffer.isBuffer(signature)) {
11406 signature = new Buffer(signature, 'base64')
ebd8d4e8 11407 }
ab78acc6 11408
ebd8d4e8
IC
11409 network = network || networks.bitcoin
11410
11411 var hash = magicHash(message, network)
ab78acc6 11412 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11413 var e = BigInteger.fromBuffer(hash)
11414 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11415
11416 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11417 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11418}
11419
11420module.exports = {
11421 magicHash: magicHash,
11422 sign: sign,
11423 verify: verify
11424}
11425
ab78acc6
IC
11426}).call(this,require("buffer").Buffer)
11427},{"./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
11428// https://en.bitcoin.it/wiki/List_of_address_prefixes
11429// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11430
11431var networks = {
11432 bitcoin: {
11433 magicPrefix: '\x18Bitcoin Signed Message:\n',
11434 bip32: {
11435 public: 0x0488b21e,
11436 private: 0x0488ade4
11437 },
11438 pubKeyHash: 0x00,
11439 scriptHash: 0x05,
11440 wif: 0x80,
11441 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11442 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11443 estimateFee: estimateFee('bitcoin')
a9385c1b 11444 },
ab78acc6
IC
11445 testnet: {
11446 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11447 bip32: {
ab78acc6
IC
11448 public: 0x043587cf,
11449 private: 0x04358394
a9385c1b 11450 },
ab78acc6
IC
11451 pubKeyHash: 0x6f,
11452 scriptHash: 0xc4,
11453 wif: 0xef,
11454 dustThreshold: 546,
cb325c58 11455 feePerKb: 10000,
ab78acc6 11456 estimateFee: estimateFee('testnet')
a9385c1b 11457 },
ab78acc6
IC
11458 litecoin: {
11459 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11460 bip32: {
ab78acc6
IC
11461 public: 0x019da462,
11462 private: 0x019d9cfe
a9385c1b 11463 },
ab78acc6
IC
11464 pubKeyHash: 0x30,
11465 scriptHash: 0x05,
11466 wif: 0xb0,
11467 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11468 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11469 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11470 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11471 },
11472 dogecoin: {
11473 magicPrefix: '\x19Dogecoin Signed Message:\n',
11474 bip32: {
11475 public: 0x02facafd,
11476 private: 0x02fac398
11477 },
11478 pubKeyHash: 0x1e,
11479 scriptHash: 0x16,
11480 wif: 0x9e,
11481 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11482 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11483 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11484 estimateFee: estimateFee('dogecoin')
11485 },
ab78acc6
IC
11486 viacoin: {
11487 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11488 bip32: {
ab78acc6
IC
11489 public: 0x0488b21e,
11490 private: 0x0488ade4
ebd8d4e8 11491 },
ab78acc6
IC
11492 pubKeyHash: 0x47,
11493 scriptHash: 0x21,
11494 wif: 0xc7,
11495 dustThreshold: 560,
11496 dustSoftThreshold: 100000,
11497 feePerKb: 100000, //
11498 estimateFee: estimateFee('viacoin')
ebd8d4e8 11499 },
ab78acc6
IC
11500 viacointestnet: {
11501 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11502 bip32: {
11503 public: 0x043587cf,
11504 private: 0x04358394
11505 },
ab78acc6 11506 pubKeyHash: 0x7f,
ebd8d4e8 11507 scriptHash: 0xc4,
ab78acc6
IC
11508 wif: 0xff,
11509 dustThreshold: 560,
11510 dustSoftThreshold: 100000,
11511 feePerKb: 100000,
11512 estimateFee: estimateFee('viacointestnet')
11513 },
11514 gamerscoin: {
11515 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11516 bip32: {
11517 public: 0x019da462,
11518 private: 0x019d9cfe
11519 },
11520 pubKeyHash: 0x26,
11521 scriptHash: 0x05,
11522 wif: 0xA6,
11523 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11524 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11525 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11526 estimateFee: estimateFee('gamerscoin')
11527 },
11528 jumbucks: {
11529 magicPrefix: '\x19Jumbucks Signed Message:\n',
11530 bip32: {
11531 public: 0x037a689a,
11532 private: 0x037a6460
11533 },
11534 pubKeyHash: 0x2b,
11535 scriptHash: 0x05,
11536 wif: 0xab,
11537 dustThreshold: 0,
11538 dustSoftThreshold: 10000,
ebd8d4e8 11539 feePerKb: 10000,
ab78acc6
IC
11540 estimateFee: estimateFee('jumbucks')
11541 },
11542 zetacoin: {
11543 magicPrefix: '\x18Zetacoin Signed Message:\n',
11544 bip32: {
11545 public: 0x0488b21e,
11546 private: 0x0488ade4
11547 },
11548 pubKeyHash: 0x50,
11549 scriptHash: 0x09,
11550 wif: 0xe0,
11551 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11552 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11553 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11554 }
11555}
11556
ab78acc6
IC
11557function estimateFee (type) {
11558 return function (tx) {
ebd8d4e8
IC
11559 var network = networks[type]
11560 var baseFee = network.feePerKb
11561 var byteSize = tx.toBuffer().length
11562
11563 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11564 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11565
ab78acc6 11566 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11567 if (e.value < network.dustSoftThreshold) {
11568 fee += baseFee
11569 }
11570 })
11571
11572 return fee
11573 }
11574}
11575
11576module.exports = networks
11577
ab78acc6 11578},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11579module.exports = {
11580 // push value
ab78acc6
IC
11581 OP_FALSE: 0,
11582 OP_0: 0,
11583 OP_PUSHDATA1: 76,
11584 OP_PUSHDATA2: 77,
11585 OP_PUSHDATA4: 78,
11586 OP_1NEGATE: 79,
11587 OP_RESERVED: 80,
11588 OP_1: 81,
11589 OP_TRUE: 81,
11590 OP_2: 82,
11591 OP_3: 83,
11592 OP_4: 84,
11593 OP_5: 85,
11594 OP_6: 86,
11595 OP_7: 87,
11596 OP_8: 88,
11597 OP_9: 89,
11598 OP_10: 90,
11599 OP_11: 91,
11600 OP_12: 92,
11601 OP_13: 93,
11602 OP_14: 94,
11603 OP_15: 95,
11604 OP_16: 96,
ebd8d4e8
IC
11605
11606 // control
ab78acc6
IC
11607 OP_NOP: 97,
11608 OP_VER: 98,
11609 OP_IF: 99,
11610 OP_NOTIF: 100,
11611 OP_VERIF: 101,
11612 OP_VERNOTIF: 102,
11613 OP_ELSE: 103,
11614 OP_ENDIF: 104,
11615 OP_VERIFY: 105,
11616 OP_RETURN: 106,
ebd8d4e8
IC
11617
11618 // stack ops
ab78acc6
IC
11619 OP_TOALTSTACK: 107,
11620 OP_FROMALTSTACK: 108,
11621 OP_2DROP: 109,
11622 OP_2DUP: 110,
11623 OP_3DUP: 111,
11624 OP_2OVER: 112,
11625 OP_2ROT: 113,
11626 OP_2SWAP: 114,
11627 OP_IFDUP: 115,
11628 OP_DEPTH: 116,
11629 OP_DROP: 117,
11630 OP_DUP: 118,
11631 OP_NIP: 119,
11632 OP_OVER: 120,
11633 OP_PICK: 121,
11634 OP_ROLL: 122,
11635 OP_ROT: 123,
11636 OP_SWAP: 124,
11637 OP_TUCK: 125,
ebd8d4e8
IC
11638
11639 // splice ops
ab78acc6
IC
11640 OP_CAT: 126,
11641 OP_SUBSTR: 127,
11642 OP_LEFT: 128,
11643 OP_RIGHT: 129,
11644 OP_SIZE: 130,
ebd8d4e8
IC
11645
11646 // bit logic
ab78acc6
IC
11647 OP_INVERT: 131,
11648 OP_AND: 132,
11649 OP_OR: 133,
11650 OP_XOR: 134,
11651 OP_EQUAL: 135,
11652 OP_EQUALVERIFY: 136,
11653 OP_RESERVED1: 137,
11654 OP_RESERVED2: 138,
ebd8d4e8
IC
11655
11656 // numeric
ab78acc6
IC
11657 OP_1ADD: 139,
11658 OP_1SUB: 140,
11659 OP_2MUL: 141,
11660 OP_2DIV: 142,
11661 OP_NEGATE: 143,
11662 OP_ABS: 144,
11663 OP_NOT: 145,
11664 OP_0NOTEQUAL: 146,
11665
11666 OP_ADD: 147,
11667 OP_SUB: 148,
11668 OP_MUL: 149,
11669 OP_DIV: 150,
11670 OP_MOD: 151,
11671 OP_LSHIFT: 152,
11672 OP_RSHIFT: 153,
11673
11674 OP_BOOLAND: 154,
11675 OP_BOOLOR: 155,
11676 OP_NUMEQUAL: 156,
11677 OP_NUMEQUALVERIFY: 157,
11678 OP_NUMNOTEQUAL: 158,
11679 OP_LESSTHAN: 159,
11680 OP_GREATERTHAN: 160,
11681 OP_LESSTHANOREQUAL: 161,
11682 OP_GREATERTHANOREQUAL: 162,
11683 OP_MIN: 163,
11684 OP_MAX: 164,
11685
11686 OP_WITHIN: 165,
ebd8d4e8
IC
11687
11688 // crypto
ab78acc6
IC
11689 OP_RIPEMD160: 166,
11690 OP_SHA1: 167,
11691 OP_SHA256: 168,
11692 OP_HASH160: 169,
11693 OP_HASH256: 170,
11694 OP_CODESEPARATOR: 171,
11695 OP_CHECKSIG: 172,
11696 OP_CHECKSIGVERIFY: 173,
11697 OP_CHECKMULTISIG: 174,
11698 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11699
11700 // expansion
ab78acc6
IC
11701 OP_NOP1: 176,
11702 OP_NOP2: 177,
11703 OP_NOP3: 178,
11704 OP_NOP4: 179,
11705 OP_NOP5: 180,
11706 OP_NOP6: 181,
11707 OP_NOP7: 182,
11708 OP_NOP8: 183,
11709 OP_NOP9: 184,
11710 OP_NOP10: 185,
ebd8d4e8
IC
11711
11712 // template matching params
ab78acc6
IC
11713 OP_PUBKEYHASH: 253,
11714 OP_PUBKEY: 254,
11715 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11716}
11717
ab78acc6 11718},{}],68:[function(require,module,exports){
ebd8d4e8 11719(function (Buffer){
ab78acc6
IC
11720var assert = require('assert')
11721var bufferutils = require('./bufferutils')
11722var crypto = require('./crypto')
11723var typeForce = require('typeforce')
11724var opcodes = require('./opcodes')
ebd8d4e8 11725
ab78acc6
IC
11726function Script (buffer, chunks) {
11727 typeForce('Buffer', buffer)
11728 typeForce('Array', chunks)
ebd8d4e8
IC
11729
11730 this.buffer = buffer
11731 this.chunks = chunks
11732}
11733
ab78acc6 11734Script.fromASM = function (asm) {
ebd8d4e8 11735 var strChunks = asm.split(' ')
ab78acc6
IC
11736 var chunks = strChunks.map(function (strChunk) {
11737 // opcode
ebd8d4e8
IC
11738 if (strChunk in opcodes) {
11739 return opcodes[strChunk]
11740
ab78acc6 11741 // data chunk
ebd8d4e8
IC
11742 } else {
11743 return new Buffer(strChunk, 'hex')
11744 }
11745 })
11746
11747 return Script.fromChunks(chunks)
11748}
11749
ab78acc6 11750Script.fromBuffer = function (buffer) {
ebd8d4e8 11751 var chunks = []
ebd8d4e8
IC
11752 var i = 0
11753
11754 while (i < buffer.length) {
11755 var opcode = buffer.readUInt8(i)
11756
ab78acc6 11757 // data chunk
ebd8d4e8
IC
11758 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11759 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11760
11761 // did reading a pushDataInt fail? return non-chunked script
11762 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11763 i += d.size
11764
ab78acc6
IC
11765 // attempt to read too much data?
11766 if (i + d.number > buffer.length) return new Script(buffer, [])
11767
ebd8d4e8
IC
11768 var data = buffer.slice(i, i + d.number)
11769 i += d.number
11770
11771 chunks.push(data)
11772
ab78acc6 11773 // opcode
ebd8d4e8
IC
11774 } else {
11775 chunks.push(opcode)
11776
11777 i += 1
11778 }
11779 }
11780
11781 return new Script(buffer, chunks)
11782}
11783
ab78acc6
IC
11784Script.fromChunks = function (chunks) {
11785 typeForce('Array', chunks)
ebd8d4e8 11786
ab78acc6
IC
11787 var bufferSize = chunks.reduce(function (accum, chunk) {
11788 // data chunk
ebd8d4e8
IC
11789 if (Buffer.isBuffer(chunk)) {
11790 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11791 }
11792
ab78acc6 11793 // opcode
ebd8d4e8
IC
11794 return accum + 1
11795 }, 0.0)
11796
11797 var buffer = new Buffer(bufferSize)
11798 var offset = 0
11799
ab78acc6
IC
11800 chunks.forEach(function (chunk) {
11801 // data chunk
ebd8d4e8
IC
11802 if (Buffer.isBuffer(chunk)) {
11803 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11804
11805 chunk.copy(buffer, offset)
11806 offset += chunk.length
11807
ab78acc6 11808 // opcode
ebd8d4e8
IC
11809 } else {
11810 buffer.writeUInt8(chunk, offset)
11811 offset += 1
11812 }
11813 })
11814
11815 assert.equal(offset, buffer.length, 'Could not decode chunks')
11816 return new Script(buffer, chunks)
11817}
11818
ab78acc6 11819Script.fromHex = function (hex) {
ebd8d4e8
IC
11820 return Script.fromBuffer(new Buffer(hex, 'hex'))
11821}
11822
ebd8d4e8
IC
11823Script.EMPTY = Script.fromChunks([])
11824
ab78acc6 11825Script.prototype.getHash = function () {
ebd8d4e8
IC
11826 return crypto.hash160(this.buffer)
11827}
11828
11829// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11830Script.prototype.without = function (needle) {
11831 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11832 return op !== needle
11833 }))
11834}
11835
ebd8d4e8
IC
11836var reverseOps = []
11837for (var op in opcodes) {
11838 var code = opcodes[op]
11839 reverseOps[code] = op
11840}
11841
ab78acc6
IC
11842Script.prototype.toASM = function () {
11843 return this.chunks.map(function (chunk) {
11844 // data chunk
ebd8d4e8
IC
11845 if (Buffer.isBuffer(chunk)) {
11846 return chunk.toString('hex')
11847
ab78acc6 11848 // opcode
ebd8d4e8
IC
11849 } else {
11850 return reverseOps[chunk]
11851 }
11852 }).join(' ')
11853}
11854
ab78acc6 11855Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11856 return this.buffer
11857}
11858
ab78acc6 11859Script.prototype.toHex = function () {
ebd8d4e8
IC
11860 return this.toBuffer().toString('hex')
11861}
11862
11863module.exports = Script
11864
ab78acc6
IC
11865}).call(this,require("buffer").Buffer)
11866},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11867(function (Buffer){
ab78acc6
IC
11868var assert = require('assert')
11869var ops = require('./opcodes')
11870var typeForce = require('typeforce')
ebd8d4e8 11871
ab78acc6 11872var ecurve = require('ecurve')
ebd8d4e8
IC
11873var curve = ecurve.getCurveByName('secp256k1')
11874
ab78acc6
IC
11875var ECSignature = require('./ecsignature')
11876var Script = require('./script')
ebd8d4e8 11877
ab78acc6 11878function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11879 if (!Buffer.isBuffer(buffer)) return false
11880
11881 try {
ebd8d4e8
IC
11882 ecurve.Point.decodeFrom(curve, buffer)
11883 } catch (e) {
ab78acc6
IC
11884 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11885 throw e
ebd8d4e8
IC
11886
11887 return false
11888 }
11889
11890 return true
11891}
11892
ab78acc6 11893function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11894 if (!Buffer.isBuffer(buffer)) return false
11895
11896 try {
11897 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11898 } catch (e) {
11899 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/))) {
11900 throw e
11901 }
ebd8d4e8
IC
11902
11903 return false
11904 }
11905
11906 return true
11907}
11908
ab78acc6
IC
11909function isPubKeyHashInput (script) {
11910 return script.chunks.length === 2 &&
11911 isCanonicalSignature(script.chunks[0]) &&
11912 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11913}
11914
ab78acc6
IC
11915function isPubKeyHashOutput (script) {
11916 return script.chunks.length === 5 &&
11917 script.chunks[0] === ops.OP_DUP &&
11918 script.chunks[1] === ops.OP_HASH160 &&
11919 Buffer.isBuffer(script.chunks[2]) &&
11920 script.chunks[2].length === 20 &&
11921 script.chunks[3] === ops.OP_EQUALVERIFY &&
11922 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11923}
11924
ab78acc6
IC
11925function isPubKeyInput (script) {
11926 return script.chunks.length === 1 &&
11927 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11928}
11929
ab78acc6
IC
11930function isPubKeyOutput (script) {
11931 return script.chunks.length === 2 &&
11932 isCanonicalPubKey(script.chunks[0]) &&
11933 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11934}
11935
ab78acc6
IC
11936function isScriptHashInput (script, allowIncomplete) {
11937 if (script.chunks.length < 2) return false
ebd8d4e8 11938
ab78acc6 11939 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11940 if (!Buffer.isBuffer(lastChunk)) return false
11941
ab78acc6
IC
11942 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11943 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11944
ab78acc6
IC
11945 // is redeemScript a valid script?
11946 if (redeemScript.chunks.length === 0) return false
11947
11948 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11949}
11950
ab78acc6
IC
11951function isScriptHashOutput (script) {
11952 return script.chunks.length === 3 &&
11953 script.chunks[0] === ops.OP_HASH160 &&
11954 Buffer.isBuffer(script.chunks[1]) &&
11955 script.chunks[1].length === 20 &&
11956 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11957}
11958
ab78acc6
IC
11959// allowIncomplete is to account for combining signatures
11960// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11961function isMultisigInput (script, allowIncomplete) {
11962 if (script.chunks.length < 2) return false
11963 if (script.chunks[0] !== ops.OP_0) return false
11964
11965 if (allowIncomplete) {
11966 return script.chunks.slice(1).every(function (chunk) {
11967 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11968 })
11969 }
11970
11971 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11972}
11973
ab78acc6
IC
11974function isMultisigOutput (script) {
11975 if (script.chunks.length < 4) return false
11976 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11977
ab78acc6
IC
11978 var mOp = script.chunks[0]
11979 if (mOp === ops.OP_0) return false
11980 if (mOp < ops.OP_1) return false
11981 if (mOp > ops.OP_16) return false
ebd8d4e8 11982
ab78acc6
IC
11983 var nOp = script.chunks[script.chunks.length - 2]
11984 if (nOp === ops.OP_0) return false
11985 if (nOp < ops.OP_1) return false
11986 if (nOp > ops.OP_16) return false
ebd8d4e8 11987
ab78acc6
IC
11988 var m = mOp - (ops.OP_1 - 1)
11989 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
11990 if (n < m) return false
11991
ab78acc6 11992 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
11993 if (n < pubKeys.length) return false
11994
11995 return pubKeys.every(isCanonicalPubKey)
11996}
11997
ab78acc6
IC
11998function isNullDataOutput (script) {
11999 return script.chunks[0] === ops.OP_RETURN
12000}
12001
12002function classifyOutput (script) {
12003 typeForce('Script', script)
12004
12005 if (isPubKeyHashOutput(script)) {
12006 return 'pubkeyhash'
12007 } else if (isScriptHashOutput(script)) {
12008 return 'scripthash'
12009 } else if (isMultisigOutput(script)) {
12010 return 'multisig'
12011 } else if (isPubKeyOutput(script)) {
12012 return 'pubkey'
12013 } else if (isNullDataOutput(script)) {
12014 return 'nulldata'
12015 }
12016
12017 return 'nonstandard'
12018}
12019
12020function classifyInput (script, allowIncomplete) {
12021 typeForce('Script', script)
12022
12023 if (isPubKeyHashInput(script)) {
12024 return 'pubkeyhash'
12025 } else if (isMultisigInput(script, allowIncomplete)) {
12026 return 'multisig'
12027 } else if (isScriptHashInput(script, allowIncomplete)) {
12028 return 'scripthash'
12029 } else if (isPubKeyInput(script)) {
12030 return 'pubkey'
12031 }
12032
12033 return 'nonstandard'
ebd8d4e8
IC
12034}
12035
12036// Standard Script Templates
12037// {pubKey} OP_CHECKSIG
ab78acc6 12038function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12039 return Script.fromChunks([
12040 pubKey.toBuffer(),
ab78acc6 12041 ops.OP_CHECKSIG
ebd8d4e8
IC
12042 ])
12043}
12044
12045// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12046function pubKeyHashOutput (hash) {
12047 typeForce('Buffer', hash)
ebd8d4e8
IC
12048
12049 return Script.fromChunks([
ab78acc6
IC
12050 ops.OP_DUP,
12051 ops.OP_HASH160,
ebd8d4e8 12052 hash,
ab78acc6
IC
12053 ops.OP_EQUALVERIFY,
12054 ops.OP_CHECKSIG
ebd8d4e8
IC
12055 ])
12056}
12057
12058// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12059function scriptHashOutput (hash) {
12060 typeForce('Buffer', hash)
ebd8d4e8
IC
12061
12062 return Script.fromChunks([
ab78acc6 12063 ops.OP_HASH160,
ebd8d4e8 12064 hash,
ab78acc6 12065 ops.OP_EQUAL
ebd8d4e8
IC
12066 ])
12067}
12068
12069// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12070function multisigOutput (m, pubKeys) {
12071 typeForce(['ECPubKey'], pubKeys)
12072
ebd8d4e8
IC
12073 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12074
ab78acc6 12075 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12076 return pubKey.toBuffer()
12077 })
12078 var n = pubKeys.length
12079
12080 return Script.fromChunks([].concat(
ab78acc6 12081 (ops.OP_1 - 1) + m,
ebd8d4e8 12082 pubKeyBuffers,
ab78acc6
IC
12083 (ops.OP_1 - 1) + n,
12084 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12085 ))
12086}
12087
12088// {signature}
ab78acc6
IC
12089function pubKeyInput (signature) {
12090 typeForce('Buffer', signature)
ebd8d4e8
IC
12091
12092 return Script.fromChunks([signature])
12093}
12094
12095// {signature} {pubKey}
ab78acc6
IC
12096function pubKeyHashInput (signature, pubKey) {
12097 typeForce('Buffer', signature)
ebd8d4e8
IC
12098
12099 return Script.fromChunks([signature, pubKey.toBuffer()])
12100}
12101
12102// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12103function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12104 return Script.fromChunks([].concat(
12105 scriptSig.chunks,
12106 scriptPubKey.toBuffer()
12107 ))
12108}
12109
12110// OP_0 [signatures ...]
ab78acc6 12111function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12112 if (scriptPubKey) {
ab78acc6
IC
12113 assert(isMultisigOutput(scriptPubKey))
12114
12115 var mOp = scriptPubKey.chunks[0]
12116 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12117 var m = mOp - (ops.OP_1 - 1)
12118 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12119
ab78acc6
IC
12120 assert(signatures.length >= m, 'Not enough signatures provided')
12121 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12122 }
12123
ab78acc6
IC
12124 return Script.fromChunks([].concat(ops.OP_0, signatures))
12125}
12126
12127function nullDataOutput (data) {
12128 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12129}
12130
12131module.exports = {
ab78acc6
IC
12132 isCanonicalPubKey: isCanonicalPubKey,
12133 isCanonicalSignature: isCanonicalSignature,
12134 isPubKeyHashInput: isPubKeyHashInput,
12135 isPubKeyHashOutput: isPubKeyHashOutput,
12136 isPubKeyInput: isPubKeyInput,
12137 isPubKeyOutput: isPubKeyOutput,
12138 isScriptHashInput: isScriptHashInput,
12139 isScriptHashOutput: isScriptHashOutput,
12140 isMultisigInput: isMultisigInput,
12141 isMultisigOutput: isMultisigOutput,
12142 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12143 classifyOutput: classifyOutput,
ab78acc6
IC
12144 classifyInput: classifyInput,
12145 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12146 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12147 scriptHashOutput: scriptHashOutput,
12148 multisigOutput: multisigOutput,
ebd8d4e8 12149 pubKeyInput: pubKeyInput,
ab78acc6 12150 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12151 scriptHashInput: scriptHashInput,
ab78acc6
IC
12152 multisigInput: multisigInput,
12153 dataOutput: function (data) {
12154 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12155 return nullDataOutput(data)
12156 },
12157 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12158}
12159
ab78acc6
IC
12160}).call(this,require("buffer").Buffer)
12161},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12162(function (Buffer){
ab78acc6
IC
12163var assert = require('assert')
12164var bufferutils = require('./bufferutils')
12165var crypto = require('./crypto')
12166var typeForce = require('typeforce')
12167var opcodes = require('./opcodes')
12168var scripts = require('./scripts')
12169
12170var Address = require('./address')
12171var ECSignature = require('./ecsignature')
12172var Script = require('./script')
12173
12174function Transaction () {
12175 this.version = 1
12176 this.locktime = 0
12177 this.ins = []
12178 this.outs = []
12179}
ebd8d4e8
IC
12180
12181Transaction.DEFAULT_SEQUENCE = 0xffffffff
12182Transaction.SIGHASH_ALL = 0x01
12183Transaction.SIGHASH_NONE = 0x02
12184Transaction.SIGHASH_SINGLE = 0x03
12185Transaction.SIGHASH_ANYONECANPAY = 0x80
12186
ab78acc6
IC
12187Transaction.fromBuffer = function (buffer, __disableAssert) {
12188 var offset = 0
12189 function readSlice (n) {
12190 offset += n
12191 return buffer.slice(offset - n, offset)
12192 }
12193
12194 function readUInt32 () {
12195 var i = buffer.readUInt32LE(offset)
12196 offset += 4
12197 return i
12198 }
12199
12200 function readUInt64 () {
12201 var i = bufferutils.readUInt64LE(buffer, offset)
12202 offset += 8
12203 return i
12204 }
12205
12206 function readVarInt () {
12207 var vi = bufferutils.readVarInt(buffer, offset)
12208 offset += vi.size
12209 return vi.number
12210 }
12211
12212 function readScript () {
12213 return Script.fromBuffer(readSlice(readVarInt()))
12214 }
12215
12216 function readGenerationScript () {
12217 return new Script(readSlice(readVarInt()), [])
12218 }
12219
12220 var tx = new Transaction()
12221 tx.version = readUInt32()
12222
12223 var vinLen = readVarInt()
12224 for (var i = 0; i < vinLen; ++i) {
12225 var hash = readSlice(32)
12226
12227 if (Transaction.isCoinbaseHash(hash)) {
12228 tx.ins.push({
12229 hash: hash,
12230 index: readUInt32(),
12231 script: readGenerationScript(),
12232 sequence: readUInt32()
12233 })
12234 } else {
12235 tx.ins.push({
12236 hash: hash,
12237 index: readUInt32(),
12238 script: readScript(),
12239 sequence: readUInt32()
12240 })
12241 }
12242 }
12243
12244 var voutLen = readVarInt()
12245 for (i = 0; i < voutLen; ++i) {
12246 tx.outs.push({
12247 value: readUInt64(),
12248 script: readScript()
12249 })
12250 }
12251
12252 tx.locktime = readUInt32()
12253
12254 if (!__disableAssert) {
12255 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12256 }
12257
12258 return tx
12259}
12260
12261Transaction.fromHex = function (hex) {
12262 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12263}
12264
12265Transaction.isCoinbaseHash = function (buffer) {
12266 return Array.prototype.every.call(buffer, function (x) {
12267 return x === 0
12268 })
ebd8d4e8
IC
12269}
12270
12271/**
ab78acc6 12272 * Create a new txIn.
ebd8d4e8
IC
12273 *
12274 * Can be called with any of:
12275 *
12276 * - A transaction and an index
12277 * - A transaction hash and an index
12278 *
12279 * Note that this method does not sign the created input.
12280 */
ab78acc6
IC
12281Transaction.prototype.addInput = function (hash, index, sequence, script) {
12282 if (sequence === undefined || sequence === null) {
12283 sequence = Transaction.DEFAULT_SEQUENCE
12284 }
ebd8d4e8 12285
ab78acc6 12286 script = script || Script.EMPTY
ebd8d4e8 12287
ab78acc6 12288 if (typeof hash === 'string') {
ebd8d4e8 12289 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12290 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12291 } else if (hash instanceof Transaction) {
12292 hash = hash.getHash()
ebd8d4e8
IC
12293 }
12294
ab78acc6
IC
12295 typeForce('Buffer', hash)
12296 typeForce('Number', index)
12297 typeForce('Number', sequence)
12298 typeForce('Script', script)
12299
ebd8d4e8 12300 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12301
ab78acc6 12302 // Add the input and return the input's index
ebd8d4e8
IC
12303 return (this.ins.push({
12304 hash: hash,
12305 index: index,
ab78acc6 12306 script: script,
ebd8d4e8
IC
12307 sequence: sequence
12308 }) - 1)
12309}
12310
12311/**
ab78acc6 12312 * Create a new txOut.
ebd8d4e8
IC
12313 *
12314 * Can be called with:
12315 *
12316 * - A base58 address string and a value
12317 * - An Address object and a value
12318 * - A scriptPubKey Script and a value
12319 */
ab78acc6 12320Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12321 // Attempt to get a valid address if it's a base58 address string
12322 if (typeof scriptPubKey === 'string') {
12323 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12324 }
12325
12326 // Attempt to get a valid script if it's an Address object
12327 if (scriptPubKey instanceof Address) {
ab78acc6 12328 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12329 }
12330
ab78acc6
IC
12331 typeForce('Script', scriptPubKey)
12332 typeForce('Number', value)
12333
12334 // Add the output and return the output's index
ebd8d4e8
IC
12335 return (this.outs.push({
12336 script: scriptPubKey,
ab78acc6 12337 value: value
ebd8d4e8
IC
12338 }) - 1)
12339}
12340
ab78acc6
IC
12341Transaction.prototype.clone = function () {
12342 var newTx = new Transaction()
12343 newTx.version = this.version
12344 newTx.locktime = this.locktime
12345
12346 newTx.ins = this.ins.map(function (txIn) {
12347 return {
12348 hash: txIn.hash,
12349 index: txIn.index,
12350 script: txIn.script,
12351 sequence: txIn.sequence
12352 }
12353 })
12354
12355 newTx.outs = this.outs.map(function (txOut) {
12356 return {
12357 script: txOut.script,
12358 value: txOut.value
12359 }
12360 })
12361
12362 return newTx
12363}
12364
12365/**
12366 * Hash transaction for signing a specific input.
12367 *
12368 * Bitcoin uses a different hash for each signed transaction input. This
12369 * method copies the transaction, makes the necessary changes based on the
12370 * hashType, serializes and finally hashes the result. This hash can then be
12371 * used to sign the transaction input in question.
12372 */
12373Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12374 // FIXME: remove in 2.x.y
12375 if (arguments[0] instanceof Script) {
12376 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12377
12378 // swap the arguments (must be stored in tmp, arguments is special)
12379 var tmp = arguments[0]
12380 inIndex = arguments[1]
12381 prevOutScript = tmp
12382 }
12383
12384 typeForce('Number', inIndex)
12385 typeForce('Script', prevOutScript)
12386 typeForce('Number', hashType)
12387
12388 assert(inIndex >= 0, 'Invalid vin index')
12389 assert(inIndex < this.ins.length, 'Invalid vin index')
12390
12391 var txTmp = this.clone()
12392 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12393
12394 // Blank out other inputs' signatures
12395 txTmp.ins.forEach(function (txIn) {
12396 txIn.script = Script.EMPTY
12397 })
12398 txTmp.ins[inIndex].script = hashScript
12399
12400 var hashTypeModifier = hashType & 0x1f
12401
12402 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12403 assert(false, 'SIGHASH_NONE not yet supported')
12404 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12405 assert(false, 'SIGHASH_SINGLE not yet supported')
12406 }
12407
12408 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12409 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12410 }
12411
12412 var hashTypeBuffer = new Buffer(4)
12413 hashTypeBuffer.writeInt32LE(hashType, 0)
12414
12415 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12416 return crypto.hash256(buffer)
12417}
12418
12419Transaction.prototype.getHash = function () {
12420 return crypto.hash256(this.toBuffer())
12421}
12422
12423Transaction.prototype.getId = function () {
12424 // TxHash is little-endian, we need big-endian
12425 return bufferutils.reverse(this.getHash()).toString('hex')
12426}
12427
ebd8d4e8 12428Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12429 function scriptSize (script) {
12430 var length = script.buffer.length
ebd8d4e8 12431
ab78acc6
IC
12432 return bufferutils.varIntSize(length) + length
12433 }
ebd8d4e8
IC
12434
12435 var buffer = new Buffer(
12436 8 +
12437 bufferutils.varIntSize(this.ins.length) +
12438 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12439 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12440 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12441 )
12442
12443 var offset = 0
ab78acc6 12444 function writeSlice (slice) {
ebd8d4e8
IC
12445 slice.copy(buffer, offset)
12446 offset += slice.length
12447 }
ab78acc6
IC
12448
12449 function writeUInt32 (i) {
ebd8d4e8
IC
12450 buffer.writeUInt32LE(i, offset)
12451 offset += 4
12452 }
ab78acc6
IC
12453
12454 function writeUInt64 (i) {
ebd8d4e8
IC
12455 bufferutils.writeUInt64LE(buffer, i, offset)
12456 offset += 8
12457 }
ab78acc6
IC
12458
12459 function writeVarInt (i) {
ebd8d4e8
IC
12460 var n = bufferutils.writeVarInt(buffer, i, offset)
12461 offset += n
12462 }
12463
12464 writeUInt32(this.version)
12465 writeVarInt(this.ins.length)
12466
ab78acc6
IC
12467 this.ins.forEach(function (txIn) {
12468 writeSlice(txIn.hash)
12469 writeUInt32(txIn.index)
12470 writeVarInt(txIn.script.buffer.length)
12471 writeSlice(txIn.script.buffer)
12472 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12473 })
12474
12475 writeVarInt(this.outs.length)
ab78acc6
IC
12476 this.outs.forEach(function (txOut) {
12477 writeUInt64(txOut.value)
12478 writeVarInt(txOut.script.buffer.length)
12479 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12480 })
12481
12482 writeUInt32(this.locktime)
12483
12484 return buffer
12485}
12486
ab78acc6 12487Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12488 return this.toBuffer().toString('hex')
12489}
12490
ab78acc6
IC
12491Transaction.prototype.setInputScript = function (index, script) {
12492 typeForce('Number', index)
12493 typeForce('Script', script)
12494
12495 this.ins[index].script = script
12496}
12497
12498// FIXME: remove in 2.x.y
12499Transaction.prototype.sign = function (index, privKey, hashType) {
12500 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12501
12502 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12503 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12504
12505 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12506 this.setInputScript(index, scriptSig)
12507}
12508
12509// FIXME: remove in 2.x.y
12510Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12511 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12512
12513 hashType = hashType || Transaction.SIGHASH_ALL
12514
12515 var hash = this.hashForSignature(index, prevOutScript, hashType)
12516 var signature = privKey.sign(hash)
12517
12518 return signature.toScriptSignature(hashType)
12519}
12520
12521// FIXME: remove in 2.x.y
12522Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12523 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12524
12525 var parsed = ECSignature.parseScriptSignature(buffer)
12526 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12527
12528 return pubKey.verify(hash, parsed.signature)
12529}
12530
12531module.exports = Transaction
12532
12533}).call(this,require("buffer").Buffer)
12534},{"./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){
12535(function (Buffer){
12536var assert = require('assert')
12537var ops = require('./opcodes')
12538var scripts = require('./scripts')
12539
12540var ECPubKey = require('./ecpubkey')
12541var ECSignature = require('./ecsignature')
12542var Script = require('./script')
12543var Transaction = require('./transaction')
12544
12545function extractInput (txIn) {
12546 var redeemScript
12547 var scriptSig = txIn.script
12548 var prevOutScript
12549 var prevOutType = scripts.classifyInput(scriptSig, true)
12550 var scriptType
12551
12552 // Re-classify if scriptHash
12553 if (prevOutType === 'scripthash') {
12554 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12555 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12556
12557 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12558 scriptType = scripts.classifyInput(scriptSig, true)
12559 } else {
12560 scriptType = prevOutType
12561 }
12562
12563 // Extract hashType, pubKeys and signatures
12564 var hashType, parsed, pubKeys, signatures
12565
12566 switch (scriptType) {
12567 case 'pubkeyhash': {
12568 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12569 hashType = parsed.hashType
12570 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12571 signatures = [parsed.signature]
12572 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12573
12574 break
12575 }
12576
12577 case 'pubkey': {
12578 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12579 hashType = parsed.hashType
12580 signatures = [parsed.signature]
12581
12582 if (redeemScript) {
12583 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12584 }
12585
12586 break
12587 }
12588
12589 case 'multisig': {
12590 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12591 if (chunk === ops.OP_0) return chunk
12592
12593 var parsed = ECSignature.parseScriptSignature(chunk)
12594 hashType = parsed.hashType
12595
12596 return parsed.signature
12597 })
12598
12599 if (redeemScript) {
12600 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12601 }
12602
12603 break
12604 }
12605 }
12606
12607 return {
12608 hashType: hashType,
12609 prevOutScript: prevOutScript,
12610 prevOutType: prevOutType,
12611 pubKeys: pubKeys,
12612 redeemScript: redeemScript,
12613 scriptType: scriptType,
12614 signatures: signatures
12615 }
12616}
12617
12618function TransactionBuilder () {
12619 this.prevTxMap = {}
12620 this.prevOutScripts = {}
12621 this.prevOutTypes = {}
12622
12623 this.inputs = []
12624 this.tx = new Transaction()
12625}
12626
12627TransactionBuilder.fromTransaction = function (transaction) {
12628 var txb = new TransactionBuilder()
12629
12630 // Copy other transaction fields
12631 txb.tx.version = transaction.version
12632 txb.tx.locktime = transaction.locktime
12633
12634 // Extract/add inputs
12635 transaction.ins.forEach(function (txIn) {
12636 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12637 })
12638
12639 // Extract/add outputs
12640 transaction.outs.forEach(function (txOut) {
12641 txb.addOutput(txOut.script, txOut.value)
12642 })
12643
12644 // Extract/add signatures
12645 txb.inputs = transaction.ins.map(function (txIn) {
12646 // TODO: remove me after testcase added
12647 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12648
12649 // Ignore empty scripts
12650 if (txIn.script.buffer.length === 0) return {}
12651
12652 return extractInput(txIn)
12653 })
12654
12655 return txb
12656}
12657
12658TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12659 var prevOutHash
12660
12661 // txId
12662 if (typeof prevTx === 'string') {
12663 prevOutHash = new Buffer(prevTx, 'hex')
12664
12665 // TxId hex is big-endian, we want little-endian hash
12666 Array.prototype.reverse.call(prevOutHash)
12667
12668 // Transaction
12669 } else if (prevTx instanceof Transaction) {
12670 prevOutHash = prevTx.getHash()
12671 prevOutScript = prevTx.outs[index].script
12672
12673 // txHash
12674 } else {
12675 prevOutHash = prevTx
12676 }
12677
12678 var input = {}
12679 if (prevOutScript) {
12680 var prevOutType = scripts.classifyOutput(prevOutScript)
12681
12682 // if we can, extract pubKey information
12683 switch (prevOutType) {
12684 case 'multisig': {
12685 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12686 break
12687 }
12688
12689 case 'pubkey': {
12690 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12691 break
12692 }
12693 }
12694
12695 if (prevOutType !== 'scripthash') {
12696 input.scriptType = prevOutType
12697 }
12698
12699 input.prevOutScript = prevOutScript
12700 input.prevOutType = prevOutType
12701 }
12702
12703 assert(this.inputs.every(function (input2) {
12704 if (input2.hashType === undefined) return true
12705
12706 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12707 }), 'No, this would invalidate signatures')
12708
12709 var prevOut = prevOutHash.toString('hex') + ':' + index
12710 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12711
12712 var vin = this.tx.addInput(prevOutHash, index, sequence)
12713 this.inputs[vin] = input
12714 this.prevTxMap[prevOut] = vin
12715
12716 return vin
12717}
12718
12719TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12720 assert(this.inputs.every(function (input) {
12721 if (input.hashType === undefined) return true
ebd8d4e8 12722
ab78acc6
IC
12723 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12724 }), 'No, this would invalidate signatures')
ebd8d4e8 12725
ab78acc6
IC
12726 return this.tx.addOutput(scriptPubKey, value)
12727}
ebd8d4e8 12728
ab78acc6
IC
12729TransactionBuilder.prototype.build = function () {
12730 return this.__build(false)
12731}
12732TransactionBuilder.prototype.buildIncomplete = function () {
12733 return this.__build(true)
12734}
ebd8d4e8 12735
ab78acc6
IC
12736var canSignTypes = {
12737 'pubkeyhash': true,
12738 'multisig': true,
12739 'pubkey': true
12740}
ebd8d4e8 12741
ab78acc6
IC
12742TransactionBuilder.prototype.__build = function (allowIncomplete) {
12743 if (!allowIncomplete) {
12744 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12745 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12746 }
12747
ab78acc6 12748 var tx = this.tx.clone()
ebd8d4e8 12749
ab78acc6
IC
12750 // Create script signatures from signature meta-data
12751 this.inputs.forEach(function (input, index) {
12752 var scriptType = input.scriptType
12753 var scriptSig
ebd8d4e8 12754
ab78acc6
IC
12755 if (!allowIncomplete) {
12756 assert(!!scriptType, 'Transaction is not complete')
12757 assert(scriptType in canSignTypes, scriptType + ' not supported')
12758 assert(input.signatures, 'Transaction is missing signatures')
12759 }
ebd8d4e8 12760
ab78acc6
IC
12761 if (input.signatures) {
12762 switch (scriptType) {
12763 case 'pubkeyhash': {
12764 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12765 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12766 break
12767 }
ebd8d4e8 12768
ab78acc6
IC
12769 case 'multisig': {
12770 // Array.prototype.map is sparse-compatible
12771 var msSignatures = input.signatures.map(function (signature) {
12772 return signature && signature.toScriptSignature(input.hashType)
12773 })
ebd8d4e8 12774
ab78acc6
IC
12775 // fill in blanks with OP_0
12776 if (allowIncomplete) {
12777 for (var i = 0; i < msSignatures.length; ++i) {
12778 if (msSignatures[i]) continue
ebd8d4e8 12779
ab78acc6
IC
12780 msSignatures[i] = ops.OP_0
12781 }
12782 } else {
12783 // Array.prototype.filter returns non-sparse array
12784 msSignatures = msSignatures.filter(function (x) { return x })
12785 }
ebd8d4e8 12786
ab78acc6
IC
12787 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12788 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12789 break
12790 }
ebd8d4e8 12791
ab78acc6
IC
12792 case 'pubkey': {
12793 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12794 scriptSig = scripts.pubKeyInput(pkSignature)
12795 break
12796 }
12797 }
ebd8d4e8 12798 }
ebd8d4e8 12799
ab78acc6
IC
12800 // did we build a scriptSig?
12801 if (scriptSig) {
12802 // wrap as scriptHash if necessary
12803 if (input.prevOutType === 'scripthash') {
12804 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12805 }
12806
12807 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12808 }
12809 })
12810
ab78acc6 12811 return tx
ebd8d4e8
IC
12812}
12813
ab78acc6
IC
12814TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12815 assert(index in this.inputs, 'No input at index: ' + index)
12816 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12817
ab78acc6
IC
12818 var input = this.inputs[index]
12819 var canSign = input.hashType &&
12820 input.prevOutScript &&
12821 input.prevOutType &&
12822 input.pubKeys &&
12823 input.scriptType &&
12824 input.signatures
ebd8d4e8 12825
ab78acc6
IC
12826 // are we almost ready to sign?
12827 if (canSign) {
12828 // if redeemScript was provided, enforce consistency
12829 if (redeemScript) {
12830 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12831 }
ebd8d4e8 12832
ab78acc6 12833 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12834
ab78acc6
IC
12835 // no? prepare
12836 } else {
12837 // must be pay-to-scriptHash?
12838 if (redeemScript) {
12839 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12840 if (input.prevOutScript) {
12841 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12842
12843 var scriptHash = input.prevOutScript.chunks[1]
12844 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12845 }
ebd8d4e8 12846
ab78acc6
IC
12847 var scriptType = scripts.classifyOutput(redeemScript)
12848 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12849
ab78acc6
IC
12850 var pubKeys = []
12851 switch (scriptType) {
12852 case 'multisig': {
12853 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12854 break
12855 }
ebd8d4e8 12856
ab78acc6
IC
12857 case 'pubkeyhash': {
12858 var pkh1 = redeemScript.chunks[2]
12859 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12860
ab78acc6
IC
12861 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12862 pubKeys = [privKey.pub]
12863 break
12864 }
ebd8d4e8 12865
ab78acc6
IC
12866 case 'pubkey': {
12867 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12868 break
12869 }
12870 }
ebd8d4e8 12871
ab78acc6
IC
12872 if (!input.prevOutScript) {
12873 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12874 input.prevOutType = 'scripthash'
12875 }
ebd8d4e8 12876
ab78acc6
IC
12877 input.pubKeys = pubKeys
12878 input.redeemScript = redeemScript
12879 input.scriptType = scriptType
ebd8d4e8 12880
ab78acc6
IC
12881 // cannot be pay-to-scriptHash
12882 } else {
12883 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12884
ab78acc6
IC
12885 // can we otherwise sign this?
12886 if (input.scriptType) {
12887 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12888
ab78acc6
IC
12889 // we know nothin' Jon Snow, assume pubKeyHash
12890 } else {
12891 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12892 input.prevOutType = 'pubkeyhash'
12893 input.pubKeys = [privKey.pub]
12894 input.scriptType = input.prevOutType
12895 }
12896 }
ebd8d4e8 12897
ab78acc6
IC
12898 input.hashType = hashType
12899 input.signatures = input.signatures || []
12900 }
12901
12902 var signatureScript = input.redeemScript || input.prevOutScript
12903 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12904
12905 // enforce signature order matches public keys
12906 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12907 // maintain a local copy of unmatched signatures
12908 var unmatched = input.signatures.slice()
12909
12910 input.signatures = input.pubKeys.map(function (pubKey) {
12911 var match
12912
12913 // check for any matching signatures
12914 unmatched.some(function (signature, i) {
12915 if (!pubKey.verify(signatureHash, signature)) return false
12916 match = signature
12917
12918 // remove matched signature from unmatched
12919 unmatched.splice(i, 1)
12920
12921 return true
12922 })
12923
12924 return match || undefined
12925 })
12926 }
12927
12928 // enforce in order signing of public keys
12929 assert(input.pubKeys.some(function (pubKey, i) {
12930 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12931
12932 assert(!input.signatures[i], 'Signature already exists')
12933 var signature = privKey.sign(signatureHash)
12934 input.signatures[i] = signature
12935
12936 return true
12937 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12938}
12939
ab78acc6 12940module.exports = TransactionBuilder
ebd8d4e8 12941
ab78acc6
IC
12942}).call(this,require("buffer").Buffer)
12943},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12944(function (Buffer){
ab78acc6
IC
12945var assert = require('assert')
12946var bufferutils = require('./bufferutils')
12947var typeForce = require('typeforce')
12948var networks = require('./networks')
12949var randomBytes = require('randombytes')
ebd8d4e8 12950
ab78acc6
IC
12951var Address = require('./address')
12952var HDNode = require('./hdnode')
12953var TransactionBuilder = require('./transaction_builder')
12954var Script = require('./script')
ebd8d4e8 12955
ab78acc6
IC
12956function Wallet (seed, network) {
12957 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12958
12959 seed = seed || randomBytes(32)
ebd8d4e8
IC
12960 network = network || networks.bitcoin
12961
12962 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12963 var masterKey = HDNode.fromSeedBuffer(seed, network)
12964
12965 // HD first-level child derivation method should be hardened
12966 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12967 var accountZero = masterKey.deriveHardened(0)
12968 var externalAccount = accountZero.derive(0)
12969 var internalAccount = accountZero.derive(1)
ebd8d4e8 12970
ebd8d4e8
IC
12971 this.addresses = []
12972 this.changeAddresses = []
ab78acc6
IC
12973 this.network = network
12974 this.unspents = []
ebd8d4e8 12975
ab78acc6
IC
12976 // FIXME: remove in 2.0.0
12977 this.unspentMap = {}
ebd8d4e8 12978
ab78acc6
IC
12979 // FIXME: remove in 2.0.0
12980 var me = this
12981 this.newMasterKey = function (seed) {
12982 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12983
12984 seed = seed || randomBytes(32)
12985 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 12986
ab78acc6 12987 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
12988 externalAccount = accountZero.derive(0)
12989 internalAccount = accountZero.derive(1)
12990
12991 me.addresses = []
12992 me.changeAddresses = []
12993
ab78acc6
IC
12994 me.unspents = []
12995 me.unspentMap = {}
ebd8d4e8
IC
12996 }
12997
ab78acc6
IC
12998 this.getMasterKey = function () {
12999 return masterKey
ebd8d4e8 13000 }
ab78acc6
IC
13001 this.getAccountZero = function () {
13002 return accountZero
ebd8d4e8 13003 }
ab78acc6
IC
13004 this.getExternalAccount = function () {
13005 return externalAccount
13006 }
13007 this.getInternalAccount = function () {
13008 return internalAccount
ebd8d4e8 13009 }
ab78acc6 13010}
ebd8d4e8 13011
ab78acc6
IC
13012Wallet.prototype.createTransaction = function (to, value, options) {
13013 // FIXME: remove in 2.0.0
13014 if (typeof options !== 'object') {
13015 if (options !== undefined) {
13016 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13017
ab78acc6
IC
13018 options = {
13019 fixedFee: arguments[2],
13020 changeAddress: arguments[3]
13021 }
ebd8d4e8 13022 }
ebd8d4e8
IC
13023 }
13024
ab78acc6 13025 options = options || {}
ebd8d4e8 13026
ab78acc6 13027 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13028
ab78acc6
IC
13029 var changeAddress = options.changeAddress
13030 var fixedFee = options.fixedFee
13031 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13032
ab78acc6
IC
13033 // filter by minConf, then pending and sort by descending value
13034 var unspents = this.unspents.filter(function (unspent) {
13035 return unspent.confirmations >= minConf
13036 }).filter(function (unspent) {
13037 return !unspent.pending
13038 }).sort(function (o1, o2) {
13039 return o2.value - o1.value
13040 })
ebd8d4e8 13041
ab78acc6
IC
13042 var accum = 0
13043 var addresses = []
13044 var subTotal = value
ebd8d4e8 13045
ab78acc6
IC
13046 var txb = new TransactionBuilder()
13047 txb.addOutput(to, value)
ebd8d4e8 13048
ab78acc6
IC
13049 for (var i = 0; i < unspents.length; ++i) {
13050 var unspent = unspents[i]
13051 addresses.push(unspent.address)
ebd8d4e8 13052
ab78acc6
IC
13053 txb.addInput(unspent.txHash, unspent.index)
13054
13055 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13056
ab78acc6
IC
13057 accum += unspent.value
13058 subTotal = value + fee
13059
13060 if (accum >= subTotal) {
13061 var change = accum - subTotal
13062
13063 if (change > this.network.dustThreshold) {
13064 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13065 }
ebd8d4e8 13066
ab78acc6 13067 break
ebd8d4e8
IC
13068 }
13069 }
13070
ab78acc6 13071 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13072
ab78acc6
IC
13073 return this.signWith(txb, addresses).build()
13074}
ebd8d4e8 13075
ab78acc6
IC
13076// FIXME: remove in 2.0.0
13077Wallet.prototype.processPendingTx = function (tx) {
13078 this.__processTx(tx, true)
13079}
ebd8d4e8 13080
ab78acc6
IC
13081// FIXME: remove in 2.0.0
13082Wallet.prototype.processConfirmedTx = function (tx) {
13083 this.__processTx(tx, false)
13084}
ebd8d4e8 13085
ab78acc6
IC
13086// FIXME: remove in 2.0.0
13087Wallet.prototype.__processTx = function (tx, isPending) {
13088 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13089
ab78acc6
IC
13090 var txId = tx.getId()
13091 var txHash = tx.getHash()
ebd8d4e8 13092
ab78acc6
IC
13093 tx.outs.forEach(function (txOut, i) {
13094 var address
ebd8d4e8 13095
ab78acc6
IC
13096 try {
13097 address = Address.fromOutputScript(txOut.script, this.network).toString()
13098 } catch (e) {
13099 if (!(e.message.match(/has no matching Address/)))
13100 throw e
13101 }
13102
13103 var myAddresses = this.addresses.concat(this.changeAddresses)
13104 if (myAddresses.indexOf(address) > -1) {
13105 var lookup = txId + ':' + i
13106 if (lookup in this.unspentMap) return
13107
13108 // its unique, add it
13109 var unspent = {
13110 address: address,
13111 confirmations: 0, // no way to determine this without more information
13112 index: i,
13113 txHash: txHash,
13114 txId: txId,
13115 value: txOut.value,
13116 pending: isPending
ebd8d4e8 13117 }
ebd8d4e8 13118
ab78acc6
IC
13119 this.unspentMap[lookup] = unspent
13120 this.unspents.push(unspent)
13121 }
13122 }, this)
ebd8d4e8 13123
ab78acc6
IC
13124 tx.ins.forEach(function (txIn) {
13125 // copy and convert to big-endian hex
13126 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13127
ab78acc6
IC
13128 var lookup = txInId + ':' + txIn.index
13129 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13130
ab78acc6 13131 var unspent = this.unspentMap[lookup]
ebd8d4e8 13132
ab78acc6
IC
13133 if (isPending) {
13134 unspent.pending = true
13135 unspent.spent = true
13136 } else {
13137 delete this.unspentMap[lookup]
ebd8d4e8 13138
ab78acc6
IC
13139 this.unspents = this.unspents.filter(function (unspent2) {
13140 return unspent !== unspent2
13141 })
13142 }
13143 }, this)
13144}
ebd8d4e8 13145
ab78acc6
IC
13146Wallet.prototype.generateAddress = function () {
13147 var k = this.addresses.length
13148 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13149
ab78acc6 13150 this.addresses.push(address.toString())
ebd8d4e8 13151
ab78acc6
IC
13152 return this.getReceiveAddress()
13153}
ebd8d4e8 13154
ab78acc6
IC
13155Wallet.prototype.generateChangeAddress = function () {
13156 var k = this.changeAddresses.length
13157 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13158
ab78acc6 13159 this.changeAddresses.push(address.toString())
ebd8d4e8 13160
ab78acc6
IC
13161 return this.getChangeAddress()
13162}
ebd8d4e8 13163
ab78acc6
IC
13164Wallet.prototype.getAddress = function () {
13165 if (this.addresses.length === 0) {
13166 this.generateAddress()
ebd8d4e8
IC
13167 }
13168
ab78acc6
IC
13169 return this.addresses[this.addresses.length - 1]
13170}
ebd8d4e8 13171
ab78acc6
IC
13172Wallet.prototype.getBalance = function (minConf) {
13173 minConf = minConf || 0
ebd8d4e8 13174
ab78acc6
IC
13175 return this.unspents.filter(function (unspent) {
13176 return unspent.confirmations >= minConf
13177
13178 // FIXME: remove spent filter in 2.0.0
13179 }).filter(function (unspent) {
13180 return !unspent.spent
13181 }).reduce(function (accum, unspent) {
13182 return accum + unspent.value
13183 }, 0)
13184}
ebd8d4e8 13185
ab78acc6
IC
13186Wallet.prototype.getChangeAddress = function () {
13187 if (this.changeAddresses.length === 0) {
13188 this.generateChangeAddress()
ebd8d4e8
IC
13189 }
13190
ab78acc6
IC
13191 return this.changeAddresses[this.changeAddresses.length - 1]
13192}
13193
13194Wallet.prototype.getInternalPrivateKey = function (index) {
13195 return this.getInternalAccount().derive(index).privKey
13196}
13197
13198Wallet.prototype.getPrivateKey = function (index) {
13199 return this.getExternalAccount().derive(index).privKey
13200}
13201
13202Wallet.prototype.getPrivateKeyForAddress = function (address) {
13203 var index
ebd8d4e8 13204
ab78acc6
IC
13205 if ((index = this.addresses.indexOf(address)) > -1) {
13206 return this.getPrivateKey(index)
ebd8d4e8
IC
13207 }
13208
ab78acc6
IC
13209 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13210 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13211 }
13212
ab78acc6
IC
13213 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13214}
ebd8d4e8 13215
ab78acc6
IC
13216Wallet.prototype.getUnspentOutputs = function (minConf) {
13217 minConf = minConf || 0
ebd8d4e8 13218
ab78acc6
IC
13219 return this.unspents.filter(function (unspent) {
13220 return unspent.confirmations >= minConf
ebd8d4e8 13221
ab78acc6
IC
13222 // FIXME: remove spent filter in 2.0.0
13223 }).filter(function (unspent) {
13224 return !unspent.spent
13225 }).map(function (unspent) {
13226 return {
13227 address: unspent.address,
13228 confirmations: unspent.confirmations,
13229 index: unspent.index,
13230 txId: unspent.txId,
13231 value: unspent.value,
13232
13233 // FIXME: remove in 2.0.0
13234 hash: unspent.txId,
13235 pending: unspent.pending
13236 }
13237 })
13238}
ebd8d4e8 13239
ab78acc6
IC
13240Wallet.prototype.setUnspentOutputs = function (unspents) {
13241 this.unspentMap = {}
13242 this.unspents = unspents.map(function (unspent) {
13243 // FIXME: remove unspent.hash in 2.0.0
13244 var txId = unspent.txId || unspent.hash
13245 var index = unspent.index
ebd8d4e8 13246
ab78acc6
IC
13247 // FIXME: remove in 2.0.0
13248 if (unspent.hash !== undefined) {
13249 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13250 }
ebd8d4e8 13251
ab78acc6
IC
13252 // FIXME: remove in 2.0.0
13253 if (index === undefined) {
13254 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13255 index = unspent.outputIndex
13256 }
ebd8d4e8 13257
ab78acc6
IC
13258 typeForce('String', txId)
13259 typeForce('Number', index)
13260 typeForce('Number', unspent.value)
13261
13262 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13263 assert.doesNotThrow(function () {
13264 Address.fromBase58Check(unspent.address)
13265 }, 'Expected Base58 Address, got ' + unspent.address)
13266 assert(isFinite(index), 'Expected finite index, got ' + index)
13267
13268 // FIXME: remove branch in 2.0.0
13269 if (unspent.confirmations !== undefined) {
13270 typeForce('Number', unspent.confirmations)
ebd8d4e8 13271 }
ebd8d4e8 13272
ab78acc6 13273 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13274
ab78acc6
IC
13275 unspent = {
13276 address: unspent.address,
13277 confirmations: unspent.confirmations || 0,
13278 index: index,
13279 txHash: txHash,
13280 txId: txId,
13281 value: unspent.value,
ebd8d4e8 13282
ab78acc6
IC
13283 // FIXME: remove in 2.0.0
13284 pending: unspent.pending || false
13285 }
13286
13287 // FIXME: remove in 2.0.0
13288 this.unspentMap[txId + ':' + index] = unspent
13289
13290 return unspent
13291 }, this)
13292}
13293
13294Wallet.prototype.signWith = function (tx, addresses) {
13295 addresses.forEach(function (address, i) {
13296 var privKey = this.getPrivateKeyForAddress(address)
13297
13298 tx.sign(i, privKey)
13299 }, this)
13300
13301 return tx
13302}
13303
13304function estimatePaddedFee (tx, network) {
13305 var tmpTx = tx.clone()
13306 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13307
13308 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13309}
13310
ab78acc6
IC
13311// FIXME: 1.0.0 shims, remove in 2.0.0
13312Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13313Wallet.prototype.createTx = Wallet.prototype.createTransaction
13314
ebd8d4e8
IC
13315module.exports = Wallet
13316
ab78acc6
IC
13317}).call(this,require("buffer").Buffer)
13318},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13319});</script>
d5dc92fd
IC
13320 <script>bitcoin.networks.shadow = {
13321 magicPrefix: '\x19ShadowCash Signed Message:\n',
13322 bip32: {
13323 public: 0xEE80286A,
13324 private: 0xEE8031E8
13325 },
13326 pubKeyHash: 0x3f,
13327 scriptHash: 0x7d,
13328 wif: 0xbf,
13329 dustThreshold: 0,
13330 feePerKb: 1000,
13331 estimateFee: function() { return "unused in this app" },
13332};
13333
13334bitcoin.networks.shadowtn = {
13335 magicPrefix: '\x19ShadowCash Signed Message:\n',
13336 bip32: {
13337 public: 0x76C0FDFB,
13338 private: 0x76C1077A
13339 },
13340 pubKeyHash: 0x7f,
13341 scriptHash: 0xc4,
13342 wif: 0xff,
13343 dustThreshold: 0,
13344 feePerKb: 1000,
13345 estimateFee: function() { return "unused in this app" },
13346};
5c434a8a
CM
13347
13348bitcoin.networks.clam = {
13349 bip32: {
13350 public: 0xa8c26d64,
13351 private: 0xa8c17826
13352 },
13353 pubKeyHash: 0x89,
13354 wif: 0x85,
13355};
d5dc92fd 13356</script>
ab78acc6 13357 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13358
13359//// base.js
13360
13361/** @fileOverview Javascript cryptography implementation.
13362 *
13363 * Crush to remove comments, shorten variable names and
13364 * generally reduce transmission size.
13365 *
13366 * @author Emily Stark
13367 * @author Mike Hamburg
13368 * @author Dan Boneh
13369 */
13370
13371"use strict";
13372/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13373/*global document, window, escape, unescape, module, require, Uint32Array */
13374
13375/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13376var sjcl = {
13377 /** @namespace Symmetric ciphers. */
13378 cipher: {},
13379
13380 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13381 hash: {},
13382
13383 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13384 keyexchange: {},
13385
13386 /** @namespace Block cipher modes of operation. */
13387 mode: {},
13388
13389 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13390 misc: {},
13391
13392 /**
13393 * @namespace Bit array encoders and decoders.
13394 *
13395 * @description
13396 * The members of this namespace are functions which translate between
13397 * SJCL's bitArrays and other objects (usually strings). Because it
13398 * isn't always clear which direction is encoding and which is decoding,
13399 * the method names are "fromBits" and "toBits".
13400 */
13401 codec: {},
13402
13403 /** @namespace Exceptions. */
13404 exception: {
13405 /** @constructor Ciphertext is corrupt. */
13406 corrupt: function(message) {
13407 this.toString = function() { return "CORRUPT: "+this.message; };
13408 this.message = message;
13409 },
13410
13411 /** @constructor Invalid parameter. */
13412 invalid: function(message) {
13413 this.toString = function() { return "INVALID: "+this.message; };
13414 this.message = message;
13415 },
13416
13417 /** @constructor Bug or missing feature in SJCL. @constructor */
13418 bug: function(message) {
13419 this.toString = function() { return "BUG: "+this.message; };
13420 this.message = message;
13421 },
13422
13423 /** @constructor Something isn't ready. */
13424 notReady: function(message) {
13425 this.toString = function() { return "NOT READY: "+this.message; };
13426 this.message = message;
ebd8d4e8 13427 }
80c4dd2a
IC
13428 }
13429};
13430
13431if(typeof module !== 'undefined' && module.exports){
13432 module.exports = sjcl;
13433}
13434if (typeof define === "function") {
13435 define([], function () {
13436 return sjcl;
13437 });
13438}
13439
13440
13441//// bitArray.js
13442
13443/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13444 *
13445 * @author Emily Stark
13446 * @author Mike Hamburg
13447 * @author Dan Boneh
13448 */
13449
13450/** @namespace Arrays of bits, encoded as arrays of Numbers.
13451 *
13452 * @description
13453 * <p>
13454 * These objects are the currency accepted by SJCL's crypto functions.
13455 * </p>
13456 *
13457 * <p>
13458 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13459 * but many of them can take arguments that are not a multiple of 4 bytes.
13460 * This library encodes arrays of bits (whose size need not be a multiple of 8
13461 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13462 * array of words, 32 bits at a time. Since the words are double-precision
13463 * floating point numbers, they fit some extra data. We use this (in a private,
13464 * possibly-changing manner) to encode the number of bits actually present
13465 * in the last word of the array.
13466 * </p>
13467 *
13468 * <p>
13469 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13470 * to ciphers like AES which want arrays of words.
13471 * </p>
13472 */
13473sjcl.bitArray = {
13474 /**
13475 * Array slices in units of bits.
13476 * @param {bitArray} a The array to slice.
13477 * @param {Number} bstart The offset to the start of the slice, in bits.
13478 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13479 * slice until the end of the array.
13480 * @return {bitArray} The requested slice.
13481 */
13482 bitSlice: function (a, bstart, bend) {
13483 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13484 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13485 },
13486
13487 /**
13488 * Extract a number packed into a bit array.
13489 * @param {bitArray} a The array to slice.
13490 * @param {Number} bstart The offset to the start of the slice, in bits.
13491 * @param {Number} length The length of the number to extract.
13492 * @return {Number} The requested slice.
13493 */
13494 extract: function(a, bstart, blength) {
13495 // FIXME: this Math.floor is not necessary at all, but for some reason
13496 // seems to suppress a bug in the Chromium JIT.
13497 var x, sh = Math.floor((-bstart-blength) & 31);
13498 if ((bstart + blength - 1 ^ bstart) & -32) {
13499 // it crosses a boundary
13500 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13501 } else {
13502 // within a single word
13503 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13504 }
80c4dd2a
IC
13505 return x & ((1<<blength) - 1);
13506 },
13507
13508 /**
13509 * Concatenate two bit arrays.
13510 * @param {bitArray} a1 The first array.
13511 * @param {bitArray} a2 The second array.
13512 * @return {bitArray} The concatenation of a1 and a2.
13513 */
13514 concat: function (a1, a2) {
13515 if (a1.length === 0 || a2.length === 0) {
13516 return a1.concat(a2);
13517 }
13518
13519 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13520 if (shift === 32) {
13521 return a1.concat(a2);
13522 } else {
13523 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13524 }
80c4dd2a
IC
13525 },
13526
13527 /**
13528 * Find the length of an array of bits.
13529 * @param {bitArray} a The array.
13530 * @return {Number} The length of a, in bits.
13531 */
13532 bitLength: function (a) {
13533 var l = a.length, x;
13534 if (l === 0) { return 0; }
13535 x = a[l - 1];
13536 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13537 },
13538
13539 /**
13540 * Truncate an array.
13541 * @param {bitArray} a The array.
13542 * @param {Number} len The length to truncate to, in bits.
13543 * @return {bitArray} A new array, truncated to len bits.
13544 */
13545 clamp: function (a, len) {
13546 if (a.length * 32 < len) { return a; }
13547 a = a.slice(0, Math.ceil(len / 32));
13548 var l = a.length;
13549 len = len & 31;
13550 if (l > 0 && len) {
13551 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13552 }
13553 return a;
13554 },
13555
13556 /**
13557 * Make a partial word for a bit array.
13558 * @param {Number} len The number of bits in the word.
13559 * @param {Number} x The bits.
13560 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13561 * @return {Number} The partial word.
13562 */
13563 partial: function (len, x, _end) {
13564 if (len === 32) { return x; }
13565 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13566 },
13567
13568 /**
13569 * Get the number of bits used by a partial word.
13570 * @param {Number} x The partial word.
13571 * @return {Number} The number of bits used by the partial word.
13572 */
13573 getPartial: function (x) {
13574 return Math.round(x/0x10000000000) || 32;
13575 },
13576
13577 /**
13578 * Compare two arrays for equality in a predictable amount of time.
13579 * @param {bitArray} a The first array.
13580 * @param {bitArray} b The second array.
13581 * @return {boolean} true if a == b; false otherwise.
13582 */
13583 equal: function (a, b) {
13584 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13585 return false;
ebd8d4e8 13586 }
80c4dd2a
IC
13587 var x = 0, i;
13588 for (i=0; i<a.length; i++) {
13589 x |= a[i]^b[i];
ebd8d4e8 13590 }
80c4dd2a
IC
13591 return (x === 0);
13592 },
13593
13594 /** Shift an array right.
13595 * @param {bitArray} a The array to shift.
13596 * @param {Number} shift The number of bits to shift.
13597 * @param {Number} [carry=0] A byte to carry in
13598 * @param {bitArray} [out=[]] An array to prepend to the output.
13599 * @private
13600 */
13601 _shiftRight: function (a, shift, carry, out) {
13602 var i, last2=0, shift2;
13603 if (out === undefined) { out = []; }
13604
13605 for (; shift >= 32; shift -= 32) {
13606 out.push(carry);
13607 carry = 0;
13608 }
13609 if (shift === 0) {
13610 return out.concat(a);
13611 }
13612
13613 for (i=0; i<a.length; i++) {
13614 out.push(carry | a[i]>>>shift);
13615 carry = a[i] << (32-shift);
13616 }
13617 last2 = a.length ? a[a.length-1] : 0;
13618 shift2 = sjcl.bitArray.getPartial(last2);
13619 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13620 return out;
13621 },
13622
13623 /** xor a block of 4 words together.
13624 * @private
13625 */
13626 _xor4: function(x,y) {
13627 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13628 },
13629
13630 /** byteswap a word array inplace.
13631 * (does not handle partial words)
13632 * @param {sjcl.bitArray} a word array
13633 * @return {sjcl.bitArray} byteswapped array
13634 */
13635 byteswapM: function(a) {
13636 var i, v, m = 0xff00;
13637 for (i = 0; i < a.length; ++i) {
13638 v = a[i];
13639 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13640 }
80c4dd2a
IC
13641 return a;
13642 }
13643};
13644
13645
13646//// codecString.js
13647
13648/** @fileOverview Bit array codec implementations.
13649 *
13650 * @author Emily Stark
13651 * @author Mike Hamburg
13652 * @author Dan Boneh
13653 */
13654
13655/** @namespace UTF-8 strings */
13656sjcl.codec.utf8String = {
13657 /** Convert from a bitArray to a UTF-8 string. */
13658 fromBits: function (arr) {
13659 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13660 for (i=0; i<bl/8; i++) {
13661 if ((i&3) === 0) {
13662 tmp = arr[i/4];
13663 }
13664 out += String.fromCharCode(tmp >>> 24);
13665 tmp <<= 8;
ebd8d4e8 13666 }
80c4dd2a
IC
13667 return decodeURIComponent(escape(out));
13668 },
13669
13670 /** Convert from a UTF-8 string to a bitArray. */
13671 toBits: function (str) {
13672 str = unescape(encodeURIComponent(str));
13673 var out = [], i, tmp=0;
13674 for (i=0; i<str.length; i++) {
13675 tmp = tmp << 8 | str.charCodeAt(i);
13676 if ((i&3) === 3) {
13677 out.push(tmp);
13678 tmp = 0;
13679 }
ebd8d4e8 13680 }
80c4dd2a
IC
13681 if (i&3) {
13682 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13683 }
80c4dd2a
IC
13684 return out;
13685 }
13686};
13687
13688
13689//// codecHex.js
13690
13691/** @fileOverview Bit array codec implementations.
13692 *
13693 * @author Emily Stark
13694 * @author Mike Hamburg
13695 * @author Dan Boneh
13696 */
13697
13698/** @namespace Hexadecimal */
13699sjcl.codec.hex = {
13700 /** Convert from a bitArray to a hex string. */
13701 fromBits: function (arr) {
13702 var out = "", i;
13703 for (i=0; i<arr.length; i++) {
13704 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13705 }
80c4dd2a
IC
13706 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13707 },
13708 /** Convert from a hex string to a bitArray. */
13709 toBits: function (str) {
13710 var i, out=[], len;
13711 str = str.replace(/\s|0x/g, "");
13712 len = str.length;
13713 str = str + "00000000";
13714 for (i=0; i<str.length; i+=8) {
13715 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13716 }
80c4dd2a
IC
13717 return sjcl.bitArray.clamp(out, len*4);
13718 }
13719};
13720
13721
13722//// sha512.js
13723
13724/** @fileOverview Javascript SHA-512 implementation.
13725 *
13726 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13727 * SJCL by Stefan Thomas.
13728 *
13729 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13730 * Released with New BSD License
13731 *
13732 * @author Emily Stark
13733 * @author Mike Hamburg
13734 * @author Dan Boneh
13735 * @author Jeff Mott
13736 * @author Stefan Thomas
13737 */
13738
13739/**
13740 * Context for a SHA-512 operation in progress.
13741 * @constructor
13742 * @class Secure Hash Algorithm, 512 bits.
13743 */
13744sjcl.hash.sha512 = function (hash) {
13745 if (!this._key[0]) { this._precompute(); }
13746 if (hash) {
13747 this._h = hash._h.slice(0);
13748 this._buffer = hash._buffer.slice(0);
13749 this._length = hash._length;
13750 } else {
13751 this.reset();
13752 }
13753};
13754
13755/**
13756 * Hash a string or an array of words.
13757 * @static
13758 * @param {bitArray|String} data the data to hash.
13759 * @return {bitArray} The hash value, an array of 16 big-endian words.
13760 */
13761sjcl.hash.sha512.hash = function (data) {
13762 return (new sjcl.hash.sha512()).update(data).finalize();
13763};
13764
13765sjcl.hash.sha512.prototype = {
13766 /**
13767 * The hash's block size, in bits.
13768 * @constant
13769 */
13770 blockSize: 1024,
13771
13772 /**
13773 * Reset the hash state.
13774 * @return this
13775 */
13776 reset:function () {
13777 this._h = this._init.slice(0);
13778 this._buffer = [];
13779 this._length = 0;
13780 return this;
13781 },
13782
13783 /**
13784 * Input several words to the hash.
13785 * @param {bitArray|String} data the data to hash.
13786 * @return this
13787 */
13788 update: function (data) {
13789 if (typeof data === "string") {
13790 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13791 }
80c4dd2a
IC
13792 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13793 ol = this._length,
13794 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13795 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13796 this._block(b.splice(0,32));
ebd8d4e8 13797 }
80c4dd2a
IC
13798 return this;
13799 },
13800
13801 /**
13802 * Complete hashing and output the hash value.
13803 * @return {bitArray} The hash value, an array of 16 big-endian words.
13804 */
13805 finalize:function () {
13806 var i, b = this._buffer, h = this._h;
13807
13808 // Round out and push the buffer
13809 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13810
13811 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13812 for (i = b.length + 4; i & 31; i++) {
13813 b.push(0);
ebd8d4e8 13814 }
80c4dd2a
IC
13815
13816 // append the length
13817 b.push(0);
13818 b.push(0);
13819 b.push(Math.floor(this._length / 0x100000000));
13820 b.push(this._length | 0);
13821
13822 while (b.length) {
13823 this._block(b.splice(0,32));
ebd8d4e8 13824 }
80c4dd2a
IC
13825
13826 this.reset();
13827 return h;
13828 },
13829
13830 /**
13831 * The SHA-512 initialization vector, to be precomputed.
13832 * @private
13833 */
13834 _init:[],
13835
13836 /**
13837 * Least significant 24 bits of SHA512 initialization values.
13838 *
13839 * Javascript only has 53 bits of precision, so we compute the 40 most
13840 * significant bits and add the remaining 24 bits as constants.
13841 *
13842 * @private
13843 */
13844 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13845
13846 /*
13847 _init:
13848 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13849 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13850 */
13851
13852 /**
13853 * The SHA-512 hash key, to be precomputed.
13854 * @private
13855 */
13856 _key:[],
13857
13858 /**
13859 * Least significant 24 bits of SHA512 key values.
13860 * @private
13861 */
13862 _keyr:
13863 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13864 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13865 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13866 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13867 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13868 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13869 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13870 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13871 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13872 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13873
13874 /*
13875 _key:
13876 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13877 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13878 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13879 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13880 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13881 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13882 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13883 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13884 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13885 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13886 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13887 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13888 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13889 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13890 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13891 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13892 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13893 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13894 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13895 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13896 */
13897
13898 /**
13899 * Function to precompute _init and _key.
13900 * @private
13901 */
13902 _precompute: function () {
13903 // XXX: This code is for precomputing the SHA256 constants, change for
13904 // SHA512 and re-enable.
13905 var i = 0, prime = 2, factor;
13906
13907 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13908 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13909
13910 outer: for (; i<80; prime++) {
13911 for (factor=2; factor*factor <= prime; factor++) {
13912 if (prime % factor === 0) {
13913 // not a prime
13914 continue outer;
ebd8d4e8 13915 }
80c4dd2a
IC
13916 }
13917
13918 if (i<8) {
13919 this._init[i*2] = frac(Math.pow(prime, 1/2));
13920 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13921 }
13922 this._key[i*2] = frac(Math.pow(prime, 1/3));
13923 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13924 i++;
ebd8d4e8 13925 }
80c4dd2a
IC
13926 },
13927
13928 /**
13929 * Perform one cycle of SHA-512.
13930 * @param {bitArray} words one block of words.
13931 * @private
13932 */
13933 _block:function (words) {
13934 var i, wrh, wrl,
13935 w = words.slice(0),
13936 h = this._h,
13937 k = this._key,
13938 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13939 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13940 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13941 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13942
13943 // Working variables
13944 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13945 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13946 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13947 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13948
13949 for (i=0; i<80; i++) {
13950 // load up the input word for this round
13951 if (i<16) {
13952 wrh = w[i * 2];
13953 wrl = w[i * 2 + 1];
13954 } else {
13955 // Gamma0
13956 var gamma0xh = w[(i-15) * 2];
13957 var gamma0xl = w[(i-15) * 2 + 1];
13958 var gamma0h =
13959 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13960 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13961 (gamma0xh >>> 7);
13962 var gamma0l =
13963 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13964 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13965 ((gamma0xh << 25) | (gamma0xl >>> 7));
13966
13967 // Gamma1
13968 var gamma1xh = w[(i-2) * 2];
13969 var gamma1xl = w[(i-2) * 2 + 1];
13970 var gamma1h =
13971 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13972 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13973 (gamma1xh >>> 6);
13974 var gamma1l =
13975 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13976 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13977 ((gamma1xh << 26) | (gamma1xl >>> 6));
13978
13979 // Shortcuts
13980 var wr7h = w[(i-7) * 2];
13981 var wr7l = w[(i-7) * 2 + 1];
13982
13983 var wr16h = w[(i-16) * 2];
13984 var wr16l = w[(i-16) * 2 + 1];
13985
13986 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13987 wrl = gamma0l + wr7l;
13988 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13989 wrl += gamma1l;
13990 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13991 wrl += wr16l;
13992 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13993 }
13994
13995 w[i*2] = wrh |= 0;
13996 w[i*2 + 1] = wrl |= 0;
13997
13998 // Ch
13999 var chh = (eh & fh) ^ (~eh & gh);
14000 var chl = (el & fl) ^ (~el & gl);
14001
14002 // Maj
14003 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14004 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14005
14006 // Sigma0
14007 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14008 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14009
14010 // Sigma1
14011 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14012 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14013
14014 // K(round)
14015 var krh = k[i*2];
14016 var krl = k[i*2+1];
14017
14018 // t1 = h + sigma1 + ch + K(round) + W(round)
14019 var t1l = hl + sigma1l;
14020 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14021 t1l += chl;
14022 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14023 t1l += krl;
14024 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14025 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14026 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14027
14028 // t2 = sigma0 + maj
14029 var t2l = sigma0l + majl;
14030 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14031
14032 // Update working variables
14033 hh = gh;
14034 hl = gl;
14035 gh = fh;
14036 gl = fl;
14037 fh = eh;
14038 fl = el;
14039 el = (dl + t1l) | 0;
14040 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14041 dh = ch;
14042 dl = cl;
14043 ch = bh;
14044 cl = bl;
14045 bh = ah;
14046 bl = al;
14047 al = (t1l + t2l) | 0;
14048 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14049 }
14050
14051 // Intermediate hash
14052 h0l = h[1] = (h0l + al) | 0;
14053 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14054 h1l = h[3] = (h1l + bl) | 0;
14055 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14056 h2l = h[5] = (h2l + cl) | 0;
14057 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14058 h3l = h[7] = (h3l + dl) | 0;
14059 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14060 h4l = h[9] = (h4l + el) | 0;
14061 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14062 h5l = h[11] = (h5l + fl) | 0;
14063 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14064 h6l = h[13] = (h6l + gl) | 0;
14065 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14066 h7l = h[15] = (h7l + hl) | 0;
14067 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14068 }
14069};
14070
14071
14072//// hmac.js
14073
14074/** @fileOverview HMAC implementation.
14075 *
14076 * @author Emily Stark
14077 * @author Mike Hamburg
14078 * @author Dan Boneh
14079 */
14080
14081/** HMAC with the specified hash function.
14082 * @constructor
14083 * @param {bitArray} key the key for HMAC.
14084 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14085 */
14086sjcl.misc.hmac = function (key, Hash) {
14087 this._hash = Hash = Hash || sjcl.hash.sha256;
14088 var exKey = [[],[]], i,
14089 bs = Hash.prototype.blockSize / 32;
14090 this._baseHash = [new Hash(), new Hash()];
14091
14092 if (key.length > bs) {
14093 key = Hash.hash(key);
14094 }
14095
14096 for (i=0; i<bs; i++) {
14097 exKey[0][i] = key[i]^0x36363636;
14098 exKey[1][i] = key[i]^0x5C5C5C5C;
14099 }
14100
14101 this._baseHash[0].update(exKey[0]);
14102 this._baseHash[1].update(exKey[1]);
14103 this._resultHash = new Hash(this._baseHash[0]);
14104};
14105
14106/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14107 * @param {bitArray|String} data The data to mac.
14108 */
14109sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14110 if (!this._updated) {
14111 this.update(data);
14112 return this.digest(data);
14113 } else {
14114 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14115 }
14116};
14117
14118sjcl.misc.hmac.prototype.reset = function () {
14119 this._resultHash = new this._hash(this._baseHash[0]);
14120 this._updated = false;
14121};
14122
14123sjcl.misc.hmac.prototype.update = function (data) {
14124 this._updated = true;
14125 this._resultHash.update(data);
14126};
14127
14128sjcl.misc.hmac.prototype.digest = function () {
14129 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14130
14131 this.reset();
14132
14133 return result;
14134};
14135
14136
14137//// pbkdf2.js
14138
14139
14140/** @fileOverview Password-based key-derivation function, version 2.0.
14141 *
14142 * @author Emily Stark
14143 * @author Mike Hamburg
14144 * @author Dan Boneh
14145 */
14146
14147/** Password-Based Key-Derivation Function, version 2.0.
14148 *
14149 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14150 *
14151 * This is the method specified by RSA's PKCS #5 standard.
14152 *
14153 * @param {bitArray|String} password The password.
14154 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14155 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14156 * @param {Number} [length] The length of the derived key. Defaults to the
14157 output size of the hash function.
14158 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14159 * @return {bitArray} the derived key.
14160 */
14161sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14162 count = count || 1000;
14163
14164 if (length < 0 || count < 0) {
14165 throw sjcl.exception.invalid("invalid params to pbkdf2");
14166 }
14167
14168 if (typeof password === "string") {
14169 password = sjcl.codec.utf8String.toBits(password);
14170 }
14171
14172 if (typeof salt === "string") {
14173 salt = sjcl.codec.utf8String.toBits(salt);
14174 }
14175
14176 Prff = Prff || sjcl.misc.hmac;
14177
14178 var prf = new Prff(password),
14179 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14180
14181 for (k = 1; 32 * out.length < (length || 1); k++) {
14182 u = ui = prf.encrypt(b.concat(salt,[k]));
14183
14184 for (i=1; i<count; i++) {
14185 ui = prf.encrypt(ui);
14186 for (j=0; j<ui.length; j++) {
14187 u[j] ^= ui[j];
14188 }
ebd8d4e8 14189 }
80c4dd2a
IC
14190
14191 out = out.concat(u);
14192 }
14193
14194 if (length) { out = b.clamp(out, length); }
14195
14196 return out;
14197};
14198
14199
14200//// sha256.js
14201
14202/** @fileOverview Javascript SHA-256 implementation.
14203 *
14204 * An older version of this implementation is available in the public
14205 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14206 * Stanford University 2008-2010 and BSD-licensed for liability
14207 * reasons.
14208 *
14209 * Special thanks to Aldo Cortesi for pointing out several bugs in
14210 * this code.
14211 *
14212 * @author Emily Stark
14213 * @author Mike Hamburg
14214 * @author Dan Boneh
14215 */
14216
14217/**
14218 * Context for a SHA-256 operation in progress.
14219 * @constructor
14220 * @class Secure Hash Algorithm, 256 bits.
14221 */
14222sjcl.hash.sha256 = function (hash) {
14223 if (!this._key[0]) { this._precompute(); }
14224 if (hash) {
14225 this._h = hash._h.slice(0);
14226 this._buffer = hash._buffer.slice(0);
14227 this._length = hash._length;
14228 } else {
14229 this.reset();
14230 }
14231};
14232
14233/**
14234 * Hash a string or an array of words.
14235 * @static
14236 * @param {bitArray|String} data the data to hash.
14237 * @return {bitArray} The hash value, an array of 16 big-endian words.
14238 */
14239sjcl.hash.sha256.hash = function (data) {
14240 return (new sjcl.hash.sha256()).update(data).finalize();
14241};
14242
14243sjcl.hash.sha256.prototype = {
14244 /**
14245 * The hash's block size, in bits.
14246 * @constant
14247 */
14248 blockSize: 512,
14249
14250 /**
14251 * Reset the hash state.
14252 * @return this
14253 */
14254 reset:function () {
14255 this._h = this._init.slice(0);
14256 this._buffer = [];
14257 this._length = 0;
14258 return this;
14259 },
14260
14261 /**
14262 * Input several words to the hash.
14263 * @param {bitArray|String} data the data to hash.
14264 * @return this
14265 */
14266 update: function (data) {
14267 if (typeof data === "string") {
14268 data = sjcl.codec.utf8String.toBits(data);
14269 }
14270 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14271 ol = this._length,
14272 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14273 for (i = 512+ol & -512; i <= nl; i+= 512) {
14274 this._block(b.splice(0,16));
ebd8d4e8 14275 }
3af2954a 14276 return this;
80c4dd2a
IC
14277 },
14278
14279 /**
14280 * Complete hashing and output the hash value.
14281 * @return {bitArray} The hash value, an array of 8 big-endian words.
14282 */
14283 finalize:function () {
14284 var i, b = this._buffer, h = this._h;
14285
14286 // Round out and push the buffer
14287 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14288
14289 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14290 for (i = b.length + 2; i & 15; i++) {
14291 b.push(0);
14292 }
14293
14294 // append the length
14295 b.push(Math.floor(this._length / 0x100000000));
14296 b.push(this._length | 0);
14297
14298 while (b.length) {
14299 this._block(b.splice(0,16));
14300 }
14301
14302 this.reset();
14303 return h;
14304 },
14305
14306 /**
14307 * The SHA-256 initialization vector, to be precomputed.
14308 * @private
14309 */
14310 _init:[],
14311 /*
14312 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14313 */
14314
14315 /**
14316 * The SHA-256 hash key, to be precomputed.
14317 * @private
14318 */
14319 _key:[],
14320 /*
14321 _key:
14322 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14323 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14324 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14325 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14326 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14327 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14328 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14329 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14330 */
14331
14332
14333 /**
14334 * Function to precompute _init and _key.
14335 * @private
14336 */
14337 _precompute: function () {
14338 var i = 0, prime = 2, factor;
14339
14340 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14341
14342 outer: for (; i<64; prime++) {
14343 for (factor=2; factor*factor <= prime; factor++) {
14344 if (prime % factor === 0) {
14345 // not a prime
14346 continue outer;
ebd8d4e8 14347 }
80c4dd2a
IC
14348 }
14349
14350 if (i<8) {
14351 this._init[i] = frac(Math.pow(prime, 1/2));
14352 }
14353 this._key[i] = frac(Math.pow(prime, 1/3));
14354 i++;
ebd8d4e8 14355 }
80c4dd2a
IC
14356 },
14357
14358 /**
14359 * Perform one cycle of SHA-256.
14360 * @param {bitArray} words one block of words.
14361 * @private
14362 */
14363 _block:function (words) {
14364 var i, tmp, a, b,
14365 w = words.slice(0),
14366 h = this._h,
14367 k = this._key,
14368 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14369 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14370
14371 /* Rationale for placement of |0 :
14372 * If a value can overflow is original 32 bits by a factor of more than a few
14373 * million (2^23 ish), there is a possibility that it might overflow the
14374 * 53-bit mantissa and lose precision.
14375 *
14376 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14377 * propagates around the loop, and on the hash state h[]. I don't believe
14378 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14379 * (for h4 anyway), and better safe than sorry.
14380 *
14381 * The clamps on h[] are necessary for the output to be correct even in the
14382 * common case and for short inputs.
14383 */
14384 for (i=0; i<64; i++) {
14385 // load up the input word for this round
14386 if (i<16) {
14387 tmp = w[i];
14388 } else {
14389 a = w[(i+1 ) & 15];
14390 b = w[(i+14) & 15];
14391 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14392 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14393 w[i&15] + w[(i+9) & 15]) | 0;
14394 }
14395
14396 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14397
14398 // shift register
14399 h7 = h6; h6 = h5; h5 = h4;
14400 h4 = h3 + tmp | 0;
14401 h3 = h2; h2 = h1; h1 = h0;
14402
14403 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14404 }
14405
14406 h[0] = h[0]+h0 | 0;
14407 h[1] = h[1]+h1 | 0;
14408 h[2] = h[2]+h2 | 0;
14409 h[3] = h[3]+h3 | 0;
14410 h[4] = h[4]+h4 | 0;
14411 h[5] = h[5]+h5 | 0;
14412 h[6] = h[6]+h6 | 0;
14413 h[7] = h[7]+h7 | 0;
14414 }
14415};
dc55c6b0 14416</script>
ab78acc6 14417 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14418WORDLISTS["english"] = [
ebd8d4e8
IC
14419"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14420"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14421"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14422"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14423"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14424"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14425"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14426"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14427"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14428"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14429"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14430"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14431"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14432"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14433"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14434"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14435"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14436"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14437"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14438"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14439"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14440"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14441"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14442"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14443"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14444"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14445"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14446"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14447"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14448"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14449"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14450"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14451"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14452"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14453"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14454"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14455"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14456"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14457"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14458"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14459"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14460"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14461"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14462"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14463"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14464"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14465"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14466"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14467"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14468"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14469"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14470"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14471"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14472"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14473"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14474"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14475"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14476"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14477"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14478"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14479"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14480"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14481"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14482"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14483"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14484"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14485"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14486"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14487"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14488"film","filter","final","find","fine","finger","finish","fire","firm","first",
14489"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14490"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14491"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14492"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14493"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14494"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14495"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14496"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14497"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14498"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14499"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14500"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14501"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14502"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14503"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14504"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14505"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14506"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14507"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14508"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14509"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14510"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14511"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14512"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14513"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14514"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14515"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14516"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14517"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14518"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14519"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14520"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14521"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14522"liar","liberty","library","license","life","lift","light","like","limb","limit",
14523"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14524"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14525"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14526"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14527"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14528"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14529"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14530"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14531"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14532"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14533"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14534"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14535"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14536"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14537"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14538"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14539"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14540"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14541"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14542"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14543"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14544"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14545"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14546"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14547"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14548"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14549"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14550"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14551"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14552"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14553"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14554"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14555"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14556"prize","problem","process","produce","profit","program","project","promote","proof","property",
14557"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14558"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14559"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14560"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14561"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14562"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14563"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14564"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14565"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14566"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14567"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14568"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14569"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14570"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14571"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14572"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14573"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14574"scrub","sea","search","season","seat","second","secret","section","security","seed",
14575"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14576"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14577"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14578"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14579"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14580"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14581"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14582"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14583"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14584"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14585"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14586"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14587"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14588"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14589"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14590"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14591"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14592"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14593"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14594"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14595"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14596"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14597"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14598"thank","that","theme","then","theory","there","they","thing","this","thought",
14599"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14600"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14601"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14602"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14603"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14604"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14605"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14606"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14607"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14608"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14609"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14610"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14611"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14612"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14613"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14614"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14615"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14616"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14617"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14618"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14619"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14620"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14621"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14622"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14623"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14624</script>
ab78acc6 14625 <script>/*
3af2954a
IC
14626 * Copyright (c) 2013 Pavol Rusnak
14627 *
14628 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14629 * this software and associated documentation files (the "Software"), to deal in
14630 * the Software without restriction, including without limitation the rights to
14631 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14632 * of the Software, and to permit persons to whom the Software is furnished to do
14633 * so, subject to the following conditions:
14634 *
14635 * The above copyright notice and this permission notice shall be included in all
14636 * copies or substantial portions of the Software.
14637 *
14638 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14639 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14640 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14641 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14642 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14643 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14644 */
14645
14646/*
14647 * Javascript port from python by Ian Coleman
14648 *
80c4dd2a
IC
14649 * Requires code from sjcl
14650 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14651 */
14652
14653var Mnemonic = function(language) {
14654
14655 var PBKDF2_ROUNDS = 2048;
14656 var RADIX = 2048;
14657
14658 var self = this;
14659 var wordlist = [];
14660
80c4dd2a
IC
14661 var hmacSHA512 = function(key) {
14662 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14663 this.encrypt = function() {
14664 return hasher.encrypt.apply(hasher, arguments);
14665 };
14666 };
14667
3af2954a
IC
14668 function init() {
14669 wordlist = WORDLISTS[language];
14670 if (wordlist.length != RADIX) {
14671 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14672 throw err;
14673 }
14674 }
14675
14676 self.generate = function(strength) {
14677 strength = strength || 128;
14678 var r = strength % 32;
14679 if (r > 0) {
14680 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14681 }
14682 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14683 if (!hasStrongCrypto) {
14684 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14685 }
14686 var buffer = new Uint8Array(strength / 8);
14687 var data = crypto.getRandomValues(buffer);
14688 return self.toMnemonic(data);
14689 }
14690
80c4dd2a
IC
14691 self.toMnemonic = function(byteArray) {
14692 if (byteArray.length % 4 > 0) {
14693 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14694 }
14695
14696 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14697 var data = byteArrayToWordArray(byteArray);
14698 var hash = sjcl.hash.sha256.hash(data);
14699 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14700
14701 // b is a binary string, eg '00111010101100...'
14702 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14703 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14704 //
14705 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14706 // c = bin(int(h, 16))[2:].zfill(256)
14707 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14708 var a = byteArrayToBinaryString(byteArray);
14709 var c = zfill(hexStringToBinaryString(h), 256);
14710 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14711 // b = line1 + line2
14712 var b = a + d;
14713
14714 var result = [];
14715 var blen = b.length / 11;
14716 for (var i=0; i<blen; i++) {
14717 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14718 result.push(wordlist[idx]);
14719 }
14720 return result.join(' ');
14721 }
14722
14723 self.check = function(mnemonic) {
14724 var mnemonic = mnemonic.split(' ')
14725 if (mnemonic.length % 3 > 0) {
14726 return false
14727 }
14728 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14729 var idx = [];
14730 for (var i=0; i<mnemonic.length; i++) {
14731 var word = mnemonic[i];
14732 var wordIndex = wordlist.indexOf(word);
14733 if (wordIndex == -1) {
14734 return false;
14735 }
14736 var binaryIndex = zfill(wordIndex.toString(2), 11);
14737 idx.push(binaryIndex);
14738 }
14739 var b = idx.join('');
14740 var l = b.length;
14741 //d = b[:l / 33 * 32]
14742 //h = b[-l / 33:]
14743 var d = b.substring(0, l / 33 * 32);
14744 var h = b.substring(l - l / 33, l);
14745 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14746 var nd = binaryStringToWordArray(d);
3af2954a 14747 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14748 var ndHash = sjcl.hash.sha256.hash(nd);
14749 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14750 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14751 var nh = ndBstr.substring(0,l/33);
14752 return h == nh;
14753 }
14754
14755 self.toSeed = function(mnemonic, passphrase) {
14756 passphrase = passphrase || '';
7772c641 14757 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
3af2954a
IC
14758 passphrase = self.normalizeString(passphrase)
14759 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14760 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14761 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14762 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14763 var hashHex = sjcl.codec.hex.fromBits(result);
14764 return hashHex;
3af2954a
IC
14765 }
14766
14767 self.normalizeString = function(str) {
14768 if (typeof str.normalize == "function") {
14769 return str.normalize("NFKD");
14770 }
14771 else {
14772 // TODO decide how to handle this in the future.
14773 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14774 return str;
14775 }
14776 }
14777
80c4dd2a
IC
14778 function byteArrayToWordArray(data) {
14779 var a = [];
14780 for (var i=0; i<data.length/4; i++) {
14781 v = 0;
14782 v += data[i*4 + 0] << 8 * 3;
14783 v += data[i*4 + 1] << 8 * 2;
14784 v += data[i*4 + 2] << 8 * 1;
14785 v += data[i*4 + 3] << 8 * 0;
14786 a.push(v);
14787 }
14788 return a;
14789 }
14790
3af2954a
IC
14791 function byteArrayToBinaryString(data) {
14792 var bin = "";
14793 for (var i=0; i<data.length; i++) {
14794 bin += zfill(data[i].toString(2), 8);
14795 }
14796 return bin;
14797 }
14798
80c4dd2a
IC
14799 function hexStringToBinaryString(hexString) {
14800 binaryString = "";
14801 for (var i=0; i<hexString.length; i++) {
14802 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14803 }
14804 return binaryString;
14805 }
14806
14807 function binaryStringToWordArray(binary) {
14808 var aLen = binary.length / 32;
14809 var a = [];
14810 for (var i=0; i<aLen; i++) {
14811 var valueStr = binary.substring(0,32);
3af2954a 14812 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14813 a.push(value);
14814 binary = binary.slice(32);
3af2954a 14815 }
80c4dd2a 14816 return a;
3af2954a
IC
14817 }
14818
14819 // Pad a numeric string on the left with zero digits until the given width
14820 // is reached.
14821 // Note this differs to the python implementation because it does not
14822 // handle numbers starting with a sign.
14823 function zfill(source, length) {
14824 source = source.toString();
14825 while (source.length < length) {
14826 source = '0' + source;
14827 }
14828 return source;
14829 }
14830
14831 init();
ebd8d4e8 14832
3af2954a 14833}
dc55c6b0 14834</script>
ab78acc6 14835 <script>(function() {
ebd8d4e8
IC
14836
14837 var mnemonic = new Mnemonic("english");
73161a92 14838 var seed = null
ebd8d4e8
IC
14839 var bip32RootKey = null;
14840 var bip32ExtendedKey = null;
ab78acc6 14841 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14842 var addressRowTemplate = $("#address-row-template");
14843
80c4dd2a
IC
14844 var showIndex = true;
14845 var showAddress = true;
14846 var showPrivKey = true;
14847
ebd8d4e8 14848 var phraseChangeTimeoutEvent = null;
efe41586 14849 var rootKeyChangedTimeoutEvent = null;
ebd8d4e8
IC
14850
14851 var DOM = {};
d6cedc94
IC
14852 DOM.network = $(".network");
14853 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14854 DOM.phrase = $(".phrase");
721b7284 14855 DOM.passphrase = $(".passphrase");
ebd8d4e8 14856 DOM.generate = $(".generate");
73161a92 14857 DOM.seed = $(".seed");
ebd8d4e8
IC
14858 DOM.rootKey = $(".root-key");
14859 DOM.extendedPrivKey = $(".extended-priv-key");
14860 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14861 DOM.bip32tab = $("#bip32-tab");
14862 DOM.bip44tab = $("#bip44-tab");
14863 DOM.bip32panel = $("#bip32");
14864 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14865 DOM.bip32path = $("#bip32-path");
14866 DOM.bip44path = $("#bip44-path");
14867 DOM.bip44purpose = $("#bip44 .purpose");
14868 DOM.bip44coin = $("#bip44 .coin");
14869 DOM.bip44account = $("#bip44 .account");
14870 DOM.bip44change = $("#bip44 .change");
14871 DOM.strength = $(".strength");
1975bfbc 14872 DOM.hardenedAddresses = $(".hardened-addresses");
ebd8d4e8
IC
14873 DOM.addresses = $(".addresses");
14874 DOM.rowsToAdd = $(".rows-to-add");
14875 DOM.more = $(".more");
14876 DOM.feedback = $(".feedback");
14877 DOM.tab = $(".derivation-type a");
14878 DOM.indexToggle = $(".index-toggle");
14879 DOM.addressToggle = $(".address-toggle");
14880 DOM.privateKeyToggle = $(".private-key-toggle");
14881
ebd8d4e8
IC
14882 function init() {
14883 // Events
d6cedc94 14884 DOM.network.on("change", networkChanged);
a19a5498
IC
14885 DOM.phrase.on("input", delayedPhraseChanged);
14886 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14887 DOM.generate.on("click", generateClicked);
14888 DOM.more.on("click", showMore);
efe41586
IC
14889 DOM.rootKey.on("input", delayedRootKeyChanged);
14890 DOM.bip32path.on("input", calcForDerivationPath);
14891 DOM.bip44purpose.on("input", calcForDerivationPath);
14892 DOM.bip44coin.on("input", calcForDerivationPath);
14893 DOM.bip44account.on("input", calcForDerivationPath);
14894 DOM.bip44change.on("input", calcForDerivationPath);
14895 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
1975bfbc 14896 DOM.hardenedAddresses.on("change", calcForDerivationPath);
ebd8d4e8
IC
14897 DOM.indexToggle.on("click", toggleIndexes);
14898 DOM.addressToggle.on("click", toggleAddresses);
14899 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14900 disableForms();
14901 hidePending();
14902 hideValidationError();
ab78acc6 14903 populateNetworkSelect();
ebd8d4e8
IC
14904 }
14905
14906 // Event handlers
14907
d6cedc94 14908 function networkChanged(e) {
54563907
IC
14909 var networkIndex = e.target.value;
14910 networks[networkIndex].onSelect();
14911 if (seed != null) {
14912 phraseChanged();
14913 }
14914 else {
14915 rootKeyChanged();
14916 }
d6cedc94
IC
14917 }
14918
ebd8d4e8
IC
14919 function delayedPhraseChanged() {
14920 hideValidationError();
14921 showPending();
14922 if (phraseChangeTimeoutEvent != null) {
14923 clearTimeout(phraseChangeTimeoutEvent);
14924 }
14925 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14926 }
14927
14928 function phraseChanged() {
14929 showPending();
14930 hideValidationError();
14931 // Get the mnemonic phrase
14932 var phrase = DOM.phrase.val();
14933 var errorText = findPhraseErrors(phrase);
14934 if (errorText) {
14935 showValidationError(errorText);
14936 return;
14937 }
efe41586
IC
14938 // Calculate and display
14939 var passphrase = DOM.passphrase.val();
14940 calcBip32RootKeyFromSeed(phrase, passphrase);
14941 calcForDerivationPath();
14942 hidePending();
14943 }
14944
14945 function delayedRootKeyChanged() {
14946 // Warn if there is an existing mnemonic or passphrase.
14947 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14948 if (!confirm("This will clear existing mnemonic and passphrase")) {
14949 DOM.rootKey.val(bip32RootKey);
14950 return
14951 }
14952 }
14953 hideValidationError();
14954 showPending();
14955 // Clear existing mnemonic and passphrase
14956 DOM.phrase.val("");
14957 DOM.passphrase.val("");
14958 seed = null;
14959 if (rootKeyChangedTimeoutEvent != null) {
14960 clearTimeout(rootKeyChangedTimeoutEvent);
14961 }
14962 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
14963 }
14964
14965 function rootKeyChanged() {
14966 showPending();
14967 hideValidationError();
14968 // Validate the root key TODO
14969 var rootKeyBase58 = DOM.rootKey.val();
14970 var errorText = validateRootKey(rootKeyBase58);
14971 if (errorText) {
14972 showValidationError(errorText);
14973 return;
14974 }
14975 // Calculate and display
14976 calcBip32RootKeyFromBase58(rootKeyBase58);
14977 calcForDerivationPath();
14978 hidePending();
14979 }
14980
14981 function calcForDerivationPath() {
14982 showPending();
14983 hideValidationError();
ebd8d4e8 14984 // Get the derivation path
38523d36
IC
14985 var derivationPath = getDerivationPath();
14986 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
14987 if (errorText) {
14988 showValidationError(errorText);
14989 return;
14990 }
efe41586 14991 calcBip32ExtendedKey(derivationPath);
ebd8d4e8
IC
14992 displayBip32Info();
14993 hidePending();
14994 }
14995
14996 function generateClicked() {
14997 clearDisplay();
14998 showPending();
14999 setTimeout(function() {
15000 var phrase = generateRandomPhrase();
15001 if (!phrase) {
15002 return;
15003 }
15004 phraseChanged();
15005 }, 50);
15006 }
15007
ebd8d4e8 15008 function toggleIndexes() {
80c4dd2a 15009 showIndex = !showIndex;
ebd8d4e8
IC
15010 $("td.index span").toggleClass("invisible");
15011 }
15012
15013 function toggleAddresses() {
80c4dd2a 15014 showAddress = !showAddress;
ebd8d4e8
IC
15015 $("td.address span").toggleClass("invisible");
15016 }
15017
15018 function togglePrivateKeys() {
80c4dd2a 15019 showPrivKey = !showPrivKey;
ebd8d4e8
IC
15020 $("td.privkey span").toggleClass("invisible");
15021 }
15022
15023 // Private methods
15024
15025 function generateRandomPhrase() {
15026 if (!hasStrongRandom()) {
15027 var errorText = "This browser does not support strong randomness";
15028 showValidationError(errorText);
15029 return;
15030 }
15031 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
15032 var strength = numWords / 3 * 32;
15033 var words = mnemonic.generate(strength);
15034 DOM.phrase.val(words);
15035 return words;
15036 }
15037
efe41586 15038 function calcBip32RootKeyFromSeed(phrase, passphrase) {
73161a92 15039 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 15040 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
efe41586
IC
15041 }
15042
15043 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15044 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58);
15045 }
15046
15047 function calcBip32ExtendedKey(path) {
ebd8d4e8
IC
15048 bip32ExtendedKey = bip32RootKey;
15049 // Derive the key from the path
15050 var pathBits = path.split("/");
15051 for (var i=0; i<pathBits.length; i++) {
15052 var bit = pathBits[i];
15053 var index = parseInt(bit);
15054 if (isNaN(index)) {
15055 continue;
15056 }
15057 var hardened = bit[bit.length-1] == "'";
15058 if (hardened) {
15059 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15060 }
15061 else {
15062 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15063 }
15064 }
15065 }
15066
15067 function showValidationError(errorText) {
15068 DOM.feedback
15069 .text(errorText)
15070 .show();
15071 }
15072
15073 function hideValidationError() {
15074 DOM.feedback
15075 .text("")
15076 .hide();
15077 }
15078
15079 function findPhraseErrors(phrase) {
15080 // TODO make this right
15081 // Preprocess the words
783981de 15082 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
15083 var parts = phrase.split(" ");
15084 var proper = [];
15085 for (var i=0; i<parts.length; i++) {
15086 var part = parts[i];
15087 if (part.length > 0) {
15088 // TODO check that lowercasing is always valid to do
15089 proper.push(part.toLowerCase());
15090 }
15091 }
ebd8d4e8 15092 var properPhrase = proper.join(' ');
563e401a
IC
15093 // Check each word
15094 for (var i=0; i<proper.length; i++) {
15095 var word = proper[i];
15096 if (WORDLISTS["english"].indexOf(word) == -1) {
15097 console.log("Finding closest match to " + word);
15098 var nearestWord = findNearestWord(word);
15099 return word + " not in wordlist, did you mean " + nearestWord + "?";
15100 }
15101 }
ebd8d4e8
IC
15102 // Check the words are valid
15103 var isValid = mnemonic.check(properPhrase);
15104 if (!isValid) {
15105 return "Invalid mnemonic";
15106 }
15107 return false;
15108 }
15109
efe41586
IC
15110 function validateRootKey(rootKeyBase58) {
15111 try {
15112 bitcoin.HDNode.fromBase58(rootKeyBase58);
15113 }
15114 catch (e) {
15115 return "Invalid root key";
15116 }
15117 return "";
15118 }
15119
38523d36
IC
15120 function getDerivationPath() {
15121 if (DOM.bip44tab.hasClass("active")) {
15122 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15123 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15124 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15125 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15126 var path = "m/";
15127 path += purpose + "'/";
15128 path += coin + "'/";
15129 path += account + "'/";
15130 path += change;
15131 DOM.bip44path.val(path);
15132 var derivationPath = DOM.bip44path.val();
15133 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15134 return derivationPath;
15135 }
15136 else if (DOM.bip32tab.hasClass("active")) {
15137 var derivationPath = DOM.bip32path.val();
15138 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15139 return derivationPath;
15140 }
15141 else {
15142 console.log("Unknown derivation path");
15143 }
15144 }
15145
ebd8d4e8 15146 function findDerivationPathErrors(path) {
30c9e79d
IC
15147 // TODO is not perfect but is better than nothing
15148 // Inspired by
15149 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15150 // and
15151 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15152 var maxDepth = 255; // TODO verify this!!
15153 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15154 if (path[0] != "m") {
15155 return "First character must be 'm'";
15156 }
15157 if (path.length > 1) {
15158 if (path[1] != "/") {
15159 return "Separator must be '/'";
15160 }
15161 var indexes = path.split("/");
15162 if (indexes.length > maxDepth) {
15163 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15164 }
15165 for (var depth = 1; depth<indexes.length; depth++) {
15166 var index = indexes[depth];
15167 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15168 if (invalidChars.length > 0) {
15169 return "Invalid characters " + invalidChars + " found at depth " + depth;
15170 }
15171 var indexValue = parseInt(index.replace("'", ""));
15172 if (isNaN(depth)) {
15173 return "Invalid number at depth " + depth;
15174 }
15175 if (indexValue > maxIndexValue) {
15176 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15177 }
15178 }
15179 }
ebd8d4e8
IC
15180 return false;
15181 }
15182
15183 function displayBip32Info() {
15184 // Display the key
73161a92 15185 DOM.seed.val(seed);
ebd8d4e8
IC
15186 var rootKey = bip32RootKey.toBase58();
15187 DOM.rootKey.val(rootKey);
15188 var extendedPrivKey = bip32ExtendedKey.toBase58();
15189 DOM.extendedPrivKey.val(extendedPrivKey);
15190 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15191 DOM.extendedPubKey.val(extendedPubKey);
15192 // Display the addresses and privkeys
15193 clearAddressesList();
15194 displayAddresses(0, 20);
15195 }
15196
15197 function displayAddresses(start, total) {
15198 for (var i=0; i<total; i++) {
80c4dd2a
IC
15199 var index = i + start;
15200 new TableRow(index);
15201 }
15202 }
15203
15204 function TableRow(index) {
15205
1975bfbc
IC
15206 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
15207
80c4dd2a
IC
15208 function init() {
15209 calculateValues();
15210 }
15211
15212 function calculateValues() {
15213 setTimeout(function() {
1975bfbc
IC
15214 var key = "";
15215 if (useHardenedAddresses) {
15216 key = bip32ExtendedKey.deriveHardened(index);
15217 }
15218 else {
15219 key = bip32ExtendedKey.derive(index);
15220 }
80c4dd2a
IC
15221 var address = key.getAddress().toString();
15222 var privkey = key.privKey.toWIF(network);
38523d36 15223 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
15224 if (useHardenedAddresses) {
15225 indexText = indexText + "'";
15226 }
38523d36 15227 addAddressToList(indexText, address, privkey);
80c4dd2a 15228 }, 50)
ebd8d4e8 15229 }
80c4dd2a
IC
15230
15231 init();
15232
ebd8d4e8
IC
15233 }
15234
15235 function showMore() {
15236 var start = DOM.addresses.children().length;
15237 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15238 if (isNaN(rowsToAdd)) {
15239 rowsToAdd = 20;
15240 DOM.rowsToAdd.val("20");
15241 }
15242 if (rowsToAdd > 200) {
15243 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15244 msg += "Do you want to continue?";
15245 if (!confirm(msg)) {
15246 return;
15247 }
15248 }
ebd8d4e8 15249 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
15250 }
15251
15252 function clearDisplay() {
15253 clearAddressesList();
15254 clearKey();
15255 hideValidationError();
15256 }
15257
15258 function clearAddressesList() {
15259 DOM.addresses.empty();
15260 }
15261
15262 function clearKey() {
15263 DOM.rootKey.val("");
15264 DOM.extendedPrivKey.val("");
15265 DOM.extendedPubKey.val("");
15266 }
15267
38523d36 15268 function addAddressToList(indexText, address, privkey) {
ebd8d4e8 15269 var row = $(addressRowTemplate.html());
80c4dd2a
IC
15270 // Elements
15271 var indexCell = row.find(".index span");
15272 var addressCell = row.find(".address span");
15273 var privkeyCell = row.find(".privkey span");
15274 // Content
ae30fed8 15275 indexCell.text(indexText);
80c4dd2a
IC
15276 addressCell.text(address);
15277 privkeyCell.text(privkey);
15278 // Visibility
15279 if (!showIndex) {
15280 indexCell.addClass("invisible");
15281 }
15282 if (!showAddress) {
15283 addressCell.addClass("invisible");
15284 }
15285 if (!showPrivKey) {
6d628db7 15286 privkeyCell.addClass("invisible");
80c4dd2a 15287 }
ebd8d4e8
IC
15288 DOM.addresses.append(row);
15289 }
15290
15291 function hasStrongRandom() {
15292 return 'crypto' in window && window['crypto'] !== null;
15293 }
15294
15295 function disableForms() {
15296 $("form").on("submit", function(e) {
15297 e.preventDefault();
15298 });
15299 }
15300
ebd8d4e8
IC
15301 function parseIntNoNaN(val, defaultVal) {
15302 var v = parseInt(val);
15303 if (isNaN(v)) {
15304 return defaultVal;
15305 }
15306 return v;
15307 }
15308
15309 function showPending() {
15310 DOM.feedback
15311 .text("Calculating...")
15312 .show();
15313 }
15314
563e401a
IC
15315 function findNearestWord(word) {
15316 var words = WORDLISTS["english"];
15317 var minDistance = 99;
15318 var closestWord = words[0];
15319 for (var i=0; i<words.length; i++) {
15320 var comparedTo = words[i];
15321 var distance = Levenshtein.get(word, comparedTo);
15322 if (distance < minDistance) {
15323 closestWord = comparedTo;
15324 minDistance = distance;
15325 }
15326 }
15327 return closestWord;
15328 }
15329
ebd8d4e8
IC
15330 function hidePending() {
15331 DOM.feedback
15332 .text("")
15333 .hide();
15334 }
15335
ab78acc6
IC
15336 function populateNetworkSelect() {
15337 for (var i=0; i<networks.length; i++) {
15338 var network = networks[i];
15339 var option = $("<option>");
15340 option.attr("value", i);
15341 option.text(network.name);
15342 DOM.phraseNetwork.append(option);
15343 }
15344 }
15345
15346 var networks = [
15347 {
15348 name: "Bitcoin",
15349 onSelect: function() {
15350 network = bitcoin.networks.bitcoin;
15351 DOM.bip44coin.val(0);
ab78acc6
IC
15352 },
15353 },
15354 {
15355 name: "Bitcoin Testnet",
15356 onSelect: function() {
15357 network = bitcoin.networks.testnet;
15358 DOM.bip44coin.val(1);
ab78acc6
IC
15359 },
15360 },
15361 {
15362 name: "Litecoin",
15363 onSelect: function() {
15364 network = bitcoin.networks.litecoin;
15365 DOM.bip44coin.val(2);
15366 },
15367 },
15368 {
15369 name: "Dogecoin",
15370 onSelect: function() {
15371 network = bitcoin.networks.dogecoin;
15372 DOM.bip44coin.val(3);
15373 },
15374 },
d5dc92fd
IC
15375 {
15376 name: "ShadowCash",
15377 onSelect: function() {
15378 network = bitcoin.networks.shadow;
15379 DOM.bip44coin.val(35);
15380 },
15381 },
15382 {
15383 name: "ShadowCash Testnet",
15384 onSelect: function() {
15385 network = bitcoin.networks.shadowtn;
15386 DOM.bip44coin.val(1);
15387 },
15388 },
a3baa26e
IC
15389 {
15390 name: "Viacoin",
15391 onSelect: function() {
15392 network = bitcoin.networks.viacoin;
15393 DOM.bip44coin.val(14);
15394 },
15395 },
15396 {
15397 name: "Viacoin Testnet",
15398 onSelect: function() {
15399 network = bitcoin.networks.viacointestnet;
15400 DOM.bip44coin.val(1);
15401 },
15402 },
15403 {
15404 name: "Jumbucks",
15405 onSelect: function() {
15406 network = bitcoin.networks.jumbucks;
15407 DOM.bip44coin.val(26);
15408 },
15409 },
5c434a8a
CM
15410 {
15411 name: "CLAM",
15412 onSelect: function() {
15413 network = bitcoin.networks.clam;
15414 DOM.bip44coin.val(23);
15415 },
15416 },
ab78acc6
IC
15417 ]
15418
ebd8d4e8
IC
15419 init();
15420
15421})();
dc55c6b0 15422</script>
ebd8d4e8
IC
15423 </body>
15424</html>